commit 825fb4863f6b11e1c7c7b5ff76b5479e27061718 Author: 谢洪龙 <599179587@qq.com> Date: Fri Jul 21 14:43:02 2017 +0800 初始化 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f97022 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target/ \ No newline at end of file diff --git a/nb-configuration.xml b/nb-configuration.xml new file mode 100644 index 0000000..99174dc --- /dev/null +++ b/nb-configuration.xml @@ -0,0 +1,19 @@ + + + + + + 1.6-web + Tomcat + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..99d98bb --- /dev/null +++ b/pom.xml @@ -0,0 +1,214 @@ + + 4.0.0 + + com.ifish + IfishSystemEnglish + 1.0.0 + war + + IfishSystemEnglish + + + ${project.build.directory}/endorsed + UTF-8 + + + + + org.csource + fastdfs-client-java + 1.25 + system + ${basedir}/src/main/webapp/WEB-INF/lib/fastdfs-client-java-1.25.jar + + + cn.jpush.api + jpush-client + 3.2.17 + + + org.apache.commons + commons-lang3 + 3.5 + jar + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.13 + jar + + + com.alibaba + fastjson + 1.2.28 + jar + + + org.springframework.data + spring-data-redis + 1.8.4.RELEASE + jar + + + org.apache.commons + commons-pool2 + 2.4.2 + jar + + + redis.clients + jedis + 2.9.0 + jar + + + c3p0 + c3p0 + 0.9.1.2 + jar + + + commons-fileupload + commons-fileupload + 1.3.2 + jar + + + javax + javaee-web-api + 6.0 + provided + + + + org.springframework + spring-context + 4.3.9.RELEASE + + + + org.springframework + spring-beans + 4.3.9.RELEASE + + + + org.springframework + spring-core + 4.3.9.RELEASE + + + + org.springframework + spring-web + 4.3.9.RELEASE + + + + org.springframework + spring-webmvc + 4.3.8.RELEASE + jar + + + + org.springframework + spring-jdbc + 4.3.9.RELEASE + + + + org.mybatis + mybatis + 3.4.4 + + + + org.mybatis + mybatis-spring + 1.3.1 + + + cn.jpush.api + jiguang-common + 1.0.3 + + + org.slf4j + slf4j-api + 1.7.13 + jar + + + + log4j + log4j + 1.2.17 + + + + org.springframework.security + spring-security-web + 4.2.3.RELEASE + + + + org.springframework.security + spring-security-config + 4.2.3.RELEASE + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.6 + 1.6 + + ${endorsed.dir} + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + false + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.1 + + + validate + + copy + + + ${endorsed.dir} + true + + + javax + javaee-endorsed-api + 6.0 + jar + + + + + + + + + + diff --git a/src/main/java/com/ifish/bean/LiveRoomPageInfo.java b/src/main/java/com/ifish/bean/LiveRoomPageInfo.java new file mode 100644 index 0000000..e76fd56 --- /dev/null +++ b/src/main/java/com/ifish/bean/LiveRoomPageInfo.java @@ -0,0 +1,196 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * + * @author Administrator + */ +public class LiveRoomPageInfo implements Serializable { + + private static final long serialVersionUID = 2438713198151455034L; + //直播间ID + private Integer roomId; + //用户ID + private Integer userId; + //用户类型 + private String userType; + //昵称 + private String nickName; + //用户头像 + private String userImg; + //用户最后一次登录时间 + private Date loginTime; + //摄像头ID + private String cameraId; + //直播间名称 + private String roomName; + //直播宣言 + private String roomDesc; + //人气值 + private Integer popularityValue; + //活跃度 + private String liveness; + //直播天数 + private Integer numberDays; + //距离 + private Double distance; + //创建时间 + private Date createTime; + //评论数 + private Integer pinglunNum; + //点赞数量 + private Integer zanNum; + //直播间展示图 + private String roomImg; + + public Integer getRoomId() { + return roomId; + } + + public void setRoomId(Integer roomId) { + this.roomId = roomId; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getCameraId() { + return cameraId; + } + + public void setCameraId(String cameraId) { + this.cameraId = cameraId; + } + + public String getRoomName() { + return roomName; + } + + public void setRoomName(String roomName) { + this.roomName = roomName; + } + + public String getRoomDesc() { + return roomDesc; + } + + public void setRoomDesc(String roomDesc) { + this.roomDesc = roomDesc; + } + + public Integer getPopularityValue() { + return popularityValue; + } + + public void setPopularityValue(Integer popularityValue) { + this.popularityValue = popularityValue; + } + + public Integer getNumberDays() { + return numberDays; + } + + public void setNumberDays(Integer numberDays) { + this.numberDays = numberDays; + } + + public Double getDistance() { + return distance; + } + + public void setDistance(Double distance) { + this.distance = distance; + } + + public String getUserImg() { + return userImg; + } + + public void setUserImg(String userImg) { + this.userImg = userImg; + } + + public String getLiveness() { + return liveness; + } + + public void setLiveness(String liveness) { + this.liveness = liveness; + } + + public Date getLoginTime() { + return loginTime; + } + + public void setLoginTime(Date loginTime) { + this.loginTime = loginTime; + } + + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } + + public Integer getPinglunNum() { + return pinglunNum; + } + + public void setPinglunNum(Integer pinglunNum) { + this.pinglunNum = pinglunNum; + } + + public Integer getZanNum() { + return zanNum; + } + + public void setZanNum(Integer zanNum) { + this.zanNum = zanNum; + } + + /** + * @return the roomImg + */ + public String getRoomImg() { + return roomImg; + } + + /** + * @param roomImg the roomImg to set + */ + public void setRoomImg(String roomImg) { + this.roomImg = roomImg; + } + +} diff --git a/src/main/java/com/ifish/bean/PageResult.java b/src/main/java/com/ifish/bean/PageResult.java new file mode 100644 index 0000000..253c84e --- /dev/null +++ b/src/main/java/com/ifish/bean/PageResult.java @@ -0,0 +1,88 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.List; + +/** + * + * @author Administrator + */ +public class PageResult implements java.io.Serializable { + + private static final long serialVersionUID = 1L; + private int totalCount = 0; + private int pageSize = 10; + private int pageNo = 1; + private int DEF_COUNT = 10; + private List list; + + public PageResult() { + + } + + public PageResult(int pageNo, int pageSize, int totalCount) { + setTotalCount(totalCount); + setPageSize(pageSize); + setPageNo(pageNo); + } + + public PageResult(int pageNo, int pageSize, int totalCount, List list) { + setTotalCount(totalCount); + setPageSize(pageSize); + setPageNo(pageNo); + this.list = list; + } + + public void setTotalCount(int totalCount) { + if (totalCount < 0) { + this.totalCount = 0; + } else { + this.totalCount = totalCount; + } + } + + public int getTotalCount() { + return totalCount; + } + + public void setPageSize(int pageSize) { + if (pageSize < 1) { + this.pageSize = DEF_COUNT; + } else { + this.pageSize = pageSize; + } + } + + public int getPageSize() { + return pageSize; + } + + public void setPageNo(int pageNo) { + if (pageNo < 1) { + this.pageNo = 1; + } else { + this.pageNo = pageNo; + } + } + + public int getPageNo() { + return pageNo; + } + + public int getFirstResult() { + return (pageNo - 1) * pageSize; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + +} diff --git a/src/main/java/com/ifish/bean/Tbl_Activa_Code.java b/src/main/java/com/ifish/bean/Tbl_Activa_Code.java new file mode 100644 index 0000000..20e487a --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Activa_Code.java @@ -0,0 +1,127 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 摄像头激活码(tbl_activa_code) + * + * @author bianj + * @version 1.0.0 2017-07-03 + */ +@Entity +@Table(name = "tbl_activa_code") +public class Tbl_Activa_Code implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = -2477544371712460934L; + + /** + * 激活码 + */ + @Id + @Column(name = "active_code", unique = true, nullable = false, length = 50) + private String activeCode; + + /** + * 批次号 + */ + @Column(name = "batch_code", nullable = true, length = 50) + private String batchCode; + + /** + * + */ + @Column(name = "is_used", nullable = true, length = 1) + private String isUsed; + + /** + * + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 获取激活码 + * + * @return 激活码 + */ + public String getActiveCode() { + return this.activeCode; + } + + /** + * 设置激活码 + * + * @param activeCode 激活码 + */ + public void setActiveCode(String activeCode) { + this.activeCode = activeCode; + } + + /** + * 获取批次号 + * + * @return 批次号 + */ + public String getBatchCode() { + return this.batchCode; + } + + /** + * 设置批次号 + * + * @param batchCode 批次号 + */ + public void setBatchCode(String batchCode) { + this.batchCode = batchCode; + } + + /** + * 获取 + * + * @return + */ + public String getIsUsed() { + return this.isUsed; + } + + /** + * 设置 + * + * @param isUsed + * + */ + public void setIsUsed(String isUsed) { + this.isUsed = isUsed; + } + + /** + * 获取 + * + * @return + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置 + * + * @param createTime + * + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Device.java b/src/main/java/com/ifish/bean/Tbl_Device.java new file mode 100644 index 0000000..ffcb840 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Device.java @@ -0,0 +1,508 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 设备详情表(tbl_device) + * + * @author Administrator + */ +@Entity +@Table(name = "tbl_device") +public class Tbl_Device implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = 3405700970095511149L; + + /** + * 设备Id + */ + @Id + @Column(name = "device_id", unique = true, nullable = false, length = 10) + private Integer deviceId; + + /** + * 服务器IP + */ + @Column(name = "server_ip", nullable = true, length = 50) + private String serverIp; + + /** + * 设备IP + */ + @Column(name = "device_ip", nullable = true, length = 50) + private String deviceIp; + + /** + * 是否为摄像头:1是,0否 + */ + @Column(name = "is_camera", nullable = true, length = 1) + private String isCamera; + + /** + * 设备Mac地址 + */ + @Column(name = "mac_address", unique = true, nullable = true, length = 50) + private String macAddress; + + /** + * 登陆时间 + */ + @Column(name = "login_time", nullable = true) + private Date loginTime; + + /** + * 是否在黑名单:1不在、0在 + */ + @Column(name = "is_blacklist", nullable = true, length = 1) + private String isBlacklist; + + /** + * 设备型号 + */ + @Column(name = "hardware_type", nullable = true, length = 10) + private String hardwareType; + + /** + * 是否推送 + */ + @Column(name = "on_off", nullable = true, length = 1) + private String onOff; + + /** + * 今天是否提醒:1提醒、0不提醒 + */ + @Column(name = "today_remind", nullable = true, length = 1) + private String todayRemind; + + /** + * 是否开启换水提醒:1开启、0不开启 + */ + @Column(name = "water_remind", nullable = true, length = 1) + private String waterRemind; + + /** + * 换水提醒日期 + */ + @Column(name = "remind_date", nullable = true) + private Date remindDate; + + /** + * 换水周期 + */ + @Column(name = "remind_cycle", nullable = true, length = 10) + private Integer remindCycle; + + /** + * 电子厂代码 + */ + @Column(name = "factory_code", nullable = true, length = 20) + private String factoryCode; + + /** + * 鱼缸场代码 + */ + @Column(name = "brand_code", nullable = true, length = 20) + private String brandCode; + + /** + * 摄像头ID + */ + @Column(name = "camera_id", nullable = true, length = 20) + private String cameraId; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 摄像头激活码 + */ + @Column(name = "active_code", nullable = true, length = 50) + private String activeCode; + + /** + * 摄像头激活时间 + */ + @Column(name = "active_time", nullable = true) + private Date activeTime; + + /** + * 修改时间 + */ + @Column(name = "update_time", nullable = true) + private Date updateTime; + + /** + * 获取设备Id + * + * @return 设备Id + */ + public Integer getDeviceId() { + return this.deviceId; + } + + /** + * 设置设备Id + * + * @param deviceId 设备Id + */ + public void setDeviceId(Integer deviceId) { + this.deviceId = deviceId; + } + + /** + * 获取服务器IP + * + * @return 服务器IP + */ + public String getServerIp() { + return this.serverIp; + } + + /** + * 设置服务器IP + * + * @param serverIp 服务器IP + */ + public void setServerIp(String serverIp) { + this.serverIp = serverIp; + } + + /** + * 获取设备IP + * + * @return 设备IP + */ + public String getDeviceIp() { + return this.deviceIp; + } + + /** + * 设置设备IP + * + * @param deviceIp 设备IP + */ + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + /** + * 获取是否为摄像头:1是,0否 + * + * @return 是否为摄像头:1是 + */ + public String getIsCamera() { + return this.isCamera; + } + + /** + * 设置是否为摄像头:1是,0否 + * + * @param isCamera 是否为摄像头:1是,0否 + */ + public void setIsCamera(String isCamera) { + this.isCamera = isCamera; + } + + /** + * 获取设备Mac地址 + * + * @return 设备Mac地址 + */ + public String getMacAddress() { + return this.macAddress; + } + + /** + * 设置设备Mac地址 + * + * @param macAddress 设备Mac地址 + */ + public void setMacAddress(String macAddress) { + this.macAddress = macAddress; + } + + /** + * 获取登陆时间 + * + * @return 登陆时间 + */ + public Date getLoginTime() { + return this.loginTime; + } + + /** + * 设置登陆时间 + * + * @param loginTime 登陆时间 + */ + public void setLoginTime(Date loginTime) { + this.loginTime = loginTime; + } + + /** + * 获取是否在黑名单:1不在、0在 + * + * @return 是否在黑名单 + */ + public String getIsBlacklist() { + return this.isBlacklist; + } + + /** + * 设置是否在黑名单:1不在、0在 + * + * @param isBlacklist 是否在黑名单:1不在、0在 + */ + public void setIsBlacklist(String isBlacklist) { + this.isBlacklist = isBlacklist; + } + + /** + * 获取设备型号 + * + * @return 设备型号 + */ + public String getHardwareType() { + return this.hardwareType; + } + + /** + * 设置设备型号 + * + * @param hardwareType 设备型号 + */ + public void setHardwareType(String hardwareType) { + this.hardwareType = hardwareType; + } + + /** + * 获取是否推送 + * + * @return 是否推送 + */ + public String getOnOff() { + return this.onOff; + } + + /** + * 设置是否推送 + * + * @param onOff 是否推送 + */ + public void setOnOff(String onOff) { + this.onOff = onOff; + } + + /** + * 获取今天是否提醒:1提醒、0不提醒 + * + * @return 今天是否提醒 + */ + public String getTodayRemind() { + return this.todayRemind; + } + + /** + * 设置今天是否提醒:1提醒、0不提醒 + * + * @param todayRemind 今天是否提醒:1提醒、0不提醒 + */ + public void setTodayRemind(String todayRemind) { + this.todayRemind = todayRemind; + } + + /** + * 获取是否开启换水提醒:1开启、0不开启 + * + * @return 是否开启换水提醒 + */ + public String getWaterRemind() { + return this.waterRemind; + } + + /** + * 设置是否开启换水提醒:1开启、0不开启 + * + * @param waterRemind 是否开启换水提醒:1开启、0不开启 + */ + public void setWaterRemind(String waterRemind) { + this.waterRemind = waterRemind; + } + + /** + * 获取换水提醒日期 + * + * @return 换水提醒日期 + */ + public Date getRemindDate() { + return this.remindDate; + } + + /** + * 设置换水提醒日期 + * + * @param remindDate 换水提醒日期 + */ + public void setRemindDate(Date remindDate) { + this.remindDate = remindDate; + } + + /** + * 获取换水周期 + * + * @return 换水周期 + */ + public Integer getRemindCycle() { + return this.remindCycle; + } + + /** + * 设置换水周期 + * + * @param remindCycle 换水周期 + */ + public void setRemindCycle(Integer remindCycle) { + this.remindCycle = remindCycle; + } + + /** + * 获取电子厂代码 + * + * @return 电子厂代码 + */ + public String getFactoryCode() { + return this.factoryCode; + } + + /** + * 设置电子厂代码 + * + * @param factoryCode 电子厂代码 + */ + public void setFactoryCode(String factoryCode) { + this.factoryCode = factoryCode; + } + + /** + * 获取鱼缸场代码 + * + * @return 鱼缸场代码 + */ + public String getBrandCode() { + return this.brandCode; + } + + /** + * 设置鱼缸场代码 + * + * @param brandCode 鱼缸场代码 + */ + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } + + /** + * 获取摄像头ID + * + * @return 摄像头ID + */ + public String getCameraId() { + return this.cameraId; + } + + /** + * 设置摄像头ID + * + * @param cameraId 摄像头ID + */ + public void setCameraId(String cameraId) { + this.cameraId = cameraId; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取摄像头激活码 + * + * @return 摄像头激活码 + */ + public String getActiveCode() { + return this.activeCode; + } + + /** + * 设置摄像头激活码 + * + * @param activeCode 摄像头激活码 + */ + public void setActiveCode(String activeCode) { + this.activeCode = activeCode; + } + + /** + * 获取摄像头激活时间 + * + * @return 摄像头激活时间 + */ + public Date getActiveTime() { + return this.activeTime; + } + + /** + * 设置摄像头激活时间 + * + * @param activeTime 摄像头激活时间 + */ + public void setActiveTime(Date activeTime) { + this.activeTime = activeTime; + } + + /** + * 获取修改时间 + * + * @return 修改时间 + */ + public Date getUpdateTime() { + return this.updateTime; + } + + /** + * 设置修改时间 + * + * @param updateTime 修改时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Device_Statistics.java b/src/main/java/com/ifish/bean/Tbl_Device_Statistics.java new file mode 100644 index 0000000..a5df6aa --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Device_Statistics.java @@ -0,0 +1,630 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 设备统计信息表(tbl_device_statistics) + * + * @author bianj + * @version 1.0.0 2017-06-29 + */ +@Entity +@Table(name = "tbl_device_statistics") +public class Tbl_Device_Statistics implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = 1215383532220649875L; + + /** + * id + */ + @Id + @Column(name = "id", unique = true, nullable = false, length = 10) + private Integer id; + + /** + * 设备ID + */ + @Id + @Column(name = "device_id", unique = true, nullable = false, length = 10) + private Integer deviceId; + + /** + * 设备MAC地址 + */ + @Column(name = "mac_address", nullable = true, length = 50) + private String macAddress; + + /** + * 登陆次数 + */ + @Column(name = "login_count", nullable = true, length = 11) + private int loginCount; + + /** + * 最后登陆时间 + */ + @Column(name = "login_time", nullable = true) + private Date loginTime; + + /** + * 首次激活时间 + */ + @Column(name = "first_activate", nullable = true) + private Date firstActivate; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 是否收费 + */ + @Column(name = "is_charge", nullable = true, length = 1) + private String isCharge; + + /** + * sdk版本 + */ + @Column(name = "sdk_version", nullable = true, length = 10) + private String sdkVersion; + + /** + * sdk时间 + */ + @Column(name = "sdk_time", nullable = true) + private Date sdkTime; + + /** + * 分配日期 + */ + @Column(name = "create_date", nullable = true) + private Date createDate; + + /** + * 是否升级 + */ + @Column(name = "is_upgrade", nullable = true, length = 1) + private String isUpgrade; + + /** + * 更新版本 + */ + @Column(name = "upgrade_version", nullable = true, length = 10) + private String upgradeVersion; + + /** + * 更新时间 + */ + @Column(name = "upgrade_time", nullable = true) + private Date upgradeTime; + + /** + * 授权时间 + */ + @Column(name = "authorize_time", nullable = true) + private Date authorizeTime; + + /** + * 编号 + */ + @Column(name = "create_code", nullable = true, length = 50) + private String createCode; + + /** + * MCU启动次数 + */ + @Column(name = "mcu_count", nullable = true, length = 10) + private Integer mcuCount; + + /** + * 模块启动次数 + */ + @Column(name = "module_count", nullable = true, length = 10) + private Integer moduleCount; + + /** + * 连接路由器次数 + */ + @Column(name = "router_count", nullable = true, length = 10) + private Integer routerCount; + + /** + * 成功连接服务器次数 + */ + @Column(name = "server_count", nullable = true, length = 10) + private Integer serverCount; + + /** + * 尝试连接服务器次数 + */ + @Column(name = "server_try_count", nullable = true, length = 10) + private Integer serverTryCount; + + /** + * mcu版本 + */ + @Column(name = "software_version", nullable = true, length = 10) + private String softwareVersion; + + /** + * 硬件型号 + */ + @Column(name = "hardware_type", nullable = true, length = 10) + private String hardwareType; + + /** + * 电子厂代码 + */ + @Column(name = "factory_code", nullable = true, length = 20) + private String factoryCode; + + /** + * 鱼缸场代码 + */ + @Column(name = "brand_code", nullable = true, length = 20) + private String brandCode; + + /** + * 获取id + * + * @return id + */ + public Integer getId() { + return this.id; + } + + /** + * 设置id + * + * @param id id + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * 获取设备ID + * + * @return 设备ID + */ + public Integer getDeviceId() { + return this.deviceId; + } + + /** + * 设置设备ID + * + * @param deviceId 设备ID + */ + public void setDeviceId(Integer deviceId) { + this.deviceId = deviceId; + } + + /** + * 获取设备MAC地址 + * + * @return 设备MAC地址 + */ + public String getMacAddress() { + return this.macAddress; + } + + /** + * 设置设备MAC地址 + * + * @param macAddress 设备MAC地址 + */ + public void setMacAddress(String macAddress) { + this.macAddress = macAddress; + } + + /** + * 获取登陆次数 + * + * @return 登陆次数 + */ + public Integer getLoginCount() { + return this.loginCount; + } + + /** + * 设置登陆次数 + * + * @param loginCount 登陆次数 + */ + public void setLoginCount(Integer loginCount) { + this.loginCount = loginCount; + } + + /** + * 获取最后登陆时间 + * + * @return 最后登陆时间 + */ + public Date getLoginTime() { + return this.loginTime; + } + + /** + * 设置最后登陆时间 + * + * @param loginTime 最后登陆时间 + */ + public void setLoginTime(Date loginTime) { + this.loginTime = loginTime; + } + + /** + * 获取首次激活时间 + * + * @return 首次激活时间 + */ + public Date getFirstActivate() { + return this.firstActivate; + } + + /** + * 设置首次激活时间 + * + * @param firstActivate 首次激活时间 + */ + public void setFirstActivate(Date firstActivate) { + this.firstActivate = firstActivate; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取是否收费 + * + * @return 是否收费 + */ + public String getIsCharge() { + return this.isCharge; + } + + /** + * 设置是否收费 + * + * @param isCharge 是否收费 + */ + public void setIsCharge(String isCharge) { + this.isCharge = isCharge; + } + + /** + * 获取sdk版本 + * + * @return sdk版本 + */ + public String getSdkVersion() { + return this.sdkVersion; + } + + /** + * 设置sdk版本 + * + * @param sdkVersion sdk版本 + */ + public void setSdkVersion(String sdkVersion) { + this.sdkVersion = sdkVersion; + } + + /** + * 获取sdk时间 + * + * @return sdk时间 + */ + public Date getSdkTime() { + return this.sdkTime; + } + + /** + * 设置sdk时间 + * + * @param sdkTime sdk时间 + */ + public void setSdkTime(Date sdkTime) { + this.sdkTime = sdkTime; + } + + /** + * 获取分配日期 + * + * @return 分配日期 + */ + public Date getCreateDate() { + return this.createDate; + } + + /** + * 设置分配日期 + * + * @param createDate 分配日期 + */ + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + /** + * 获取是否升级 + * + * @return 是否升级 + */ + public String getIsUpgrade() { + return this.isUpgrade; + } + + /** + * 设置是否升级 + * + * @param isUpgrade 是否升级 + */ + public void setIsUpgrade(String isUpgrade) { + this.isUpgrade = isUpgrade; + } + + /** + * 获取更新版本 + * + * @return 更新版本 + */ + public String getUpgradeVersion() { + return this.upgradeVersion; + } + + /** + * 设置更新版本 + * + * @param upgradeVersion 更新版本 + */ + public void setUpgradeVersion(String upgradeVersion) { + this.upgradeVersion = upgradeVersion; + } + + /** + * 获取更新时间 + * + * @return 更新时间 + */ + public Date getUpgradeTime() { + return this.upgradeTime; + } + + /** + * 设置更新时间 + * + * @param upgradeTime 更新时间 + */ + public void setUpgradeTime(Date upgradeTime) { + this.upgradeTime = upgradeTime; + } + + /** + * 获取授权时间 + * + * @return 授权时间 + */ + public Date getAuthorizeTime() { + return this.authorizeTime; + } + + /** + * 设置授权时间 + * + * @param authorizeTime 授权时间 + */ + public void setAuthorizeTime(Date authorizeTime) { + this.authorizeTime = authorizeTime; + } + + /** + * 获取编号 + * + * @return 编号 + */ + public String getCreateCode() { + return this.createCode; + } + + /** + * 设置编号 + * + * @param createCode 编号 + */ + public void setCreateCode(String createCode) { + this.createCode = createCode; + } + + /** + * 获取MCU启动次数 + * + * @return MCU启动次数 + */ + public Integer getMcuCount() { + return this.mcuCount; + } + + /** + * 设置MCU启动次数 + * + * @param mcuCount MCU启动次数 + */ + public void setMcuCount(Integer mcuCount) { + this.mcuCount = mcuCount; + } + + /** + * 获取模块启动次数 + * + * @return 模块启动次数 + */ + public Integer getModuleCount() { + return this.moduleCount; + } + + /** + * 设置模块启动次数 + * + * @param moduleCount 模块启动次数 + */ + public void setModuleCount(Integer moduleCount) { + this.moduleCount = moduleCount; + } + + /** + * 获取连接路由器次数 + * + * @return 连接路由器次数 + */ + public Integer getRouterCount() { + return this.routerCount; + } + + /** + * 设置连接路由器次数 + * + * @param routerCount 连接路由器次数 + */ + public void setRouterCount(Integer routerCount) { + this.routerCount = routerCount; + } + + /** + * 获取成功连接服务器次数 + * + * @return 成功连接服务器次数 + */ + public Integer getServerCount() { + return this.serverCount; + } + + /** + * 设置成功连接服务器次数 + * + * @param serverCount 成功连接服务器次数 + */ + public void setServerCount(Integer serverCount) { + this.serverCount = serverCount; + } + + /** + * 获取尝试连接服务器次数 + * + * @return 尝试连接服务器次数 + */ + public Integer getServerTryCount() { + return this.serverTryCount; + } + + /** + * 设置尝试连接服务器次数 + * + * @param serverTryCount 尝试连接服务器次数 + */ + public void setServerTryCount(Integer serverTryCount) { + this.serverTryCount = serverTryCount; + } + + /** + * 获取mcu版本 + * + * @return mcu版本 + */ + public String getSoftwareVersion() { + return this.softwareVersion; + } + + /** + * 设置mcu版本 + * + * @param softwareVersion mcu版本 + */ + public void setSoftwareVersion(String softwareVersion) { + this.softwareVersion = softwareVersion; + } + + /** + * 获取硬件型号 + * + * @return 硬件型号 + */ + public String getHardwareType() { + return this.hardwareType; + } + + /** + * 设置硬件型号 + * + * @param hardwareType 硬件型号 + */ + public void setHardwareType(String hardwareType) { + this.hardwareType = hardwareType; + } + + /** + * 获取电子厂代码 + * + * @return 电子厂代码 + */ + public String getFactoryCode() { + return this.factoryCode; + } + + /** + * 设置电子厂代码 + * + * @param factoryCode 电子厂代码 + */ + public void setFactoryCode(String factoryCode) { + this.factoryCode = factoryCode; + } + + /** + * 获取鱼缸场代码 + * + * @return 鱼缸场代码 + */ + public String getBrandCode() { + return this.brandCode; + } + + /** + * 设置鱼缸场代码 + * + * @param brandCode 鱼缸场代码 + */ + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Device_User.java b/src/main/java/com/ifish/bean/Tbl_Device_User.java new file mode 100644 index 0000000..08184a0 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Device_User.java @@ -0,0 +1,293 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 设备与用户关系表(tbl_device_user) + * + * @author bianj + * @version 1.0.0 2017-06-27 + */ +@Entity +@Table(name = "tbl_device_user") +public class Tbl_Device_User implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = -4018159739383033383L; + + /** + * id + */ + @Id + @Column(name = "id", unique = true, nullable = false, length = 10) + private Integer id; + + /** + * 用户Id + */ + @Column(name = "user_id", unique = true, nullable = false, length = 10) + private Integer userId; + + /** + * 设备Id + */ + @Column(name = "device_id", unique = true, nullable = false, length = 10) + private Integer deviceId; + + /** + * 是否主控:1、主控制权,0、被分享者 + */ + @Column(name = "is_master", nullable = true, length = 1) + private String isMaster; + + /** + * 显示名称 + */ + @Column(name = "show_name", nullable = true, length = 50) + private String showName; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 修改时间 + */ + @Column(name = "update_time", nullable = true) + private Date updateTime; + + /** + * 保存的显示图标 + */ + @Column(name = "custom_icon_name", nullable = true, length = 100) + private String customIconName; + + /** + * 保存的显示名称 + */ + @Column(name = "custom_show_name", nullable = true, length = 100) + private String customShowName; + + /** + * 是否看护 + */ + @Column(name = "is_look", nullable = true, length = 1) + private String isLook; + + /** + * 是否直播 + */ + @Column(name = "is_live", nullable = true, length = 1) + private String isLive; + + /** + * 获取id + * + * @return id + */ + public Integer getId() { + return this.id; + } + + /** + * 设置id + * + * @param id id + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * 获取用户Id + * + * @return 用户Id + */ + public Integer getUserId() { + return this.userId; + } + + /** + * 设置用户Id + * + * @param userId 用户Id + */ + public void setUserId(Integer userId) { + this.userId = userId; + } + + /** + * 获取设备Id + * + * @return 设备Id + */ + public Integer getDeviceId() { + return this.deviceId; + } + + /** + * 设置设备Id + * + * @param deviceId 设备Id + */ + public void setDeviceId(Integer deviceId) { + this.deviceId = deviceId; + } + + /** + * 获取是否主控:1、主控制权,0、被分享者 + * + * @return 是否主控:1、主控制权 + */ + public String getIsMaster() { + return this.isMaster; + } + + /** + * 设置是否主控:1、主控制权,0、被分享者 + * + * @param isMaster 是否主控:1、主控制权,0、被分享者 + */ + public void setIsMaster(String isMaster) { + this.isMaster = isMaster; + } + + /** + * 获取显示名称 + * + * @return 显示名称 + */ + public String getShowName() { + return this.showName; + } + + /** + * 设置显示名称 + * + * @param showName 显示名称 + */ + public void setShowName(String showName) { + this.showName = showName; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取修改时间 + * + * @return 修改时间 + */ + public Date getUpdateTime() { + return this.updateTime; + } + + /** + * 设置修改时间 + * + * @param updateTime 修改时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取保存的显示图标 + * + * @return 保存的显示图标 + */ + public String getCustomIconName() { + return this.customIconName; + } + + /** + * 设置保存的显示图标 + * + * @param customIconName 保存的显示图标 + */ + public void setCustomIconName(String customIconName) { + this.customIconName = customIconName; + } + + /** + * 获取保存的显示名称 + * + * @return 保存的显示名称 + */ + public String getCustomShowName() { + return this.customShowName; + } + + /** + * 设置保存的显示名称 + * + * @param customShowName 保存的显示名称 + */ + public void setCustomShowName(String customShowName) { + this.customShowName = customShowName; + } + + /** + * 获取是否看护 + * + * @return 是否看护 + */ + public String getIsLook() { + return this.isLook; + } + + /** + * 设置是否看护 + * + * @param isLook 是否看护 + */ + public void setIsLook(String isLook) { + this.isLook = isLook; + } + + /** + * 获取是否直播 + * + * @return 是否直播 + */ + public String getIsLive() { + return this.isLive; + } + + /** + * 设置是否直播 + * + * @param isLive 是否直播 + */ + public void setIsLive(String isLive) { + this.isLive = isLive; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Factory_List.java b/src/main/java/com/ifish/bean/Tbl_Factory_List.java new file mode 100644 index 0000000..b03bf10 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Factory_List.java @@ -0,0 +1,125 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 电子厂详情表(tbl_factory_list) + * + * @author bianj + * @version 1.0.0 2017-07-03 + */ +@Entity +@Table(name = "tbl_factory_list") +public class Tbl_Factory_List implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = -8290320819344778436L; + + /** + * 电子厂代码 + */ + @Id + @Column(name = "factory_code", unique = true, nullable = false, length = 20) + private String factoryCode; + + /** + * 电子厂名称 + */ + @Column(name = "factory_name", nullable = false, length = 20) + private String factoryName; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 是否收税:1收、0不收 + */ + @Column(name = "is_tax", nullable = true, length = 1) + private String isTax; + + /** + * 获取电子厂代码 + * + * @return 电子厂代码 + */ + public String getFactoryCode() { + return this.factoryCode; + } + + /** + * 设置电子厂代码 + * + * @param factoryCode 电子厂代码 + */ + public void setFactoryCode(String factoryCode) { + this.factoryCode = factoryCode; + } + + /** + * 获取电子厂名称 + * + * @return 电子厂名称 + */ + public String getFactoryName() { + return this.factoryName; + } + + /** + * 设置电子厂名称 + * + * @param factoryName 电子厂名称 + */ + public void setFactoryName(String factoryName) { + this.factoryName = factoryName; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取是否收税:1收、0不收 + * + * @return 是否收税 + */ + public String getIsTax() { + return this.isTax; + } + + /** + * 设置是否收税:1收、0不收 + * + * @param isTax 是否收税:1收、0不收 + */ + public void setIsTax(String isTax) { + this.isTax = isTax; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_HardWare_Type.java b/src/main/java/com/ifish/bean/Tbl_HardWare_Type.java new file mode 100644 index 0000000..7760168 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_HardWare_Type.java @@ -0,0 +1,437 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 设备类型详情表(tbl_hardware_type) + * + * @author bianj + * @version 1.0.0 2017-06-27 + */ +@Entity +@Table(name = "tbl_hardware_type") +public class Tbl_HardWare_Type implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = 7870932947017585134L; + + /** + * 设备型号代码 + */ + @Id + @Column(name = "hardware_type", unique = true, nullable = false, length = 10) + private String hardwareType; + + /** + * 电子厂代码 + */ + @Column(name = "factory_code", nullable = true, length = 20) + private String factoryCode; + + /** + * 设备名称 + */ + @Column(name = "hardware_name", nullable = false, length = 20) + private String hardwareName; + + /** + * 描述 + */ + @Column(name = "hardware_desc", nullable = true, length = 100) + private String hardwareDesc; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 控制个数 + */ + @Column(name = "control_amount", nullable = true, length = 10) + private Integer controlAmount; + + /** + * 定时器个数 + */ + @Column(name = "timer_amount", nullable = true, length = 10) + private Integer timerAmount; + + /** + * 是否自定义图标:1是、0否 + */ + @Column(name = "is_custom_icon", nullable = true, length = 1) + private String isCustomIcon; + + /** + * 自定义图标根地址 + */ + @Column(name = "icon_link", nullable = true, length = 200) + private String iconLink; + + /** + * 根地址下图标名称 + */ + @Column(name = "all_icon_name", nullable = true, length = 200) + private String allIconName; + + /** + * 修改时间 + */ + @Column(name = "update_time", nullable = true) + private Date updateTime; + + /** + * 是否有背光:1是、0否 + */ + @Column(name = "is_lightness", nullable = true, length = 1) + private String isLightness; + + /** + * 是否有柜灯:1是、0否 + */ + @Column(name = "is_sark_lamp", nullable = true, length = 1) + private String isSarkLamp; + + /** + * 是否有工作模式:1是、0否 + */ + @Column(name = "is_work_model", nullable = true, length = 1) + private String isWorkModel; + + /** + * 显示名称 + */ + @Column(name = "all_show_name", nullable = true, length = 200) + private String allShowName; + + /** + * 默认名称 + */ + @Column(name = "default_show_name", nullable = true, length = 200) + private String defaultShowName; + + /** + * 默认图标 + */ + @Column(name = "default_icon_name", nullable = true, length = 200) + private String defaultIconName; + + /** + * 获取设备型号代码 + * + * @return 设备型号代码 + */ + public String getHardwareType() { + return this.hardwareType; + } + + /** + * 设置设备型号代码 + * + * @param hardwareType 设备型号代码 + */ + public void setHardwareType(String hardwareType) { + this.hardwareType = hardwareType; + } + + /** + * 获取电子厂代码 + * + * @return 电子厂代码 + */ + public String getFactoryCode() { + return this.factoryCode; + } + + /** + * 设置电子厂代码 + * + * @param factoryCode 电子厂代码 + */ + public void setFactoryCode(String factoryCode) { + this.factoryCode = factoryCode; + } + + /** + * 获取设备名称 + * + * @return 设备名称 + */ + public String getHardwareName() { + return this.hardwareName; + } + + /** + * 设置设备名称 + * + * @param hardwareName 设备名称 + */ + public void setHardwareName(String hardwareName) { + this.hardwareName = hardwareName; + } + + /** + * 获取描述 + * + * @return 描述 + */ + public String getHardwareDesc() { + return this.hardwareDesc; + } + + /** + * 设置描述 + * + * @param hardwareDesc 描述 + */ + public void setHardwareDesc(String hardwareDesc) { + this.hardwareDesc = hardwareDesc; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取控制个数 + * + * @return 控制个数 + */ + public Integer getControlAmount() { + return this.controlAmount; + } + + /** + * 设置控制个数 + * + * @param controlAmount 控制个数 + */ + public void setControlAmount(Integer controlAmount) { + this.controlAmount = controlAmount; + } + + /** + * 获取定时器个数 + * + * @return 定时器个数 + */ + public Integer getTimerAmount() { + return this.timerAmount; + } + + /** + * 设置定时器个数 + * + * @param timerAmount 定时器个数 + */ + public void setTimerAmount(Integer timerAmount) { + this.timerAmount = timerAmount; + } + + /** + * 获取是否自定义图标:1是、0否 + * + * @return 是否自定义图标 + */ + public String getIsCustomIcon() { + return this.isCustomIcon; + } + + /** + * 设置是否自定义图标:1是、0否 + * + * @param isCustomIcon 是否自定义图标:1是、0否 + */ + public void setIsCustomIcon(String isCustomIcon) { + this.isCustomIcon = isCustomIcon; + } + + /** + * 获取自定义图标根地址 + * + * @return 自定义图标根地址 + */ + public String getIconLink() { + return this.iconLink; + } + + /** + * 设置自定义图标根地址 + * + * @param iconLink 自定义图标根地址 + */ + public void setIconLink(String iconLink) { + this.iconLink = iconLink; + } + + /** + * 获取根地址下图标名称 + * + * @return 根地址下图标名称 + */ + public String getAllIconName() { + return this.allIconName; + } + + /** + * 设置根地址下图标名称 + * + * @param allIconName 根地址下图标名称 + */ + public void setAllIconName(String allIconName) { + this.allIconName = allIconName; + } + + /** + * 获取修改时间 + * + * @return 修改时间 + */ + public Date getUpdateTime() { + return this.updateTime; + } + + /** + * 设置修改时间 + * + * @param updateTime 修改时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取是否有背光:1是、0否 + * + * @return 是否有背光 + */ + public String getIsLightness() { + return this.isLightness; + } + + /** + * 设置是否有背光:1是、0否 + * + * @param isLightness 是否有背光:1是、0否 + */ + public void setIsLightness(String isLightness) { + this.isLightness = isLightness; + } + + /** + * 获取是否有柜灯:1是、0否 + * + * @return 是否有柜灯 + */ + public String getIsSarkLamp() { + return this.isSarkLamp; + } + + /** + * 设置是否有柜灯:1是、0否 + * + * @param isSarkLamp 是否有柜灯:1是、0否 + */ + public void setIsSarkLamp(String isSarkLamp) { + this.isSarkLamp = isSarkLamp; + } + + /** + * 获取是否有工作模式:1是、0否 + * + * @return 是否有工作模式 + */ + public String getIsWorkModel() { + return this.isWorkModel; + } + + /** + * 设置是否有工作模式:1是、0否 + * + * @param isWorkModel 是否有工作模式:1是、0否 + */ + public void setIsWorkModel(String isWorkModel) { + this.isWorkModel = isWorkModel; + } + + /** + * 获取显示名称 + * + * @return 显示名称 + */ + public String getAllShowName() { + return this.allShowName; + } + + /** + * 设置显示名称 + * + * @param allShowName 显示名称 + */ + public void setAllShowName(String allShowName) { + this.allShowName = allShowName; + } + + /** + * 获取默认名称 + * + * @return 默认名称 + */ + public String getDefaultShowName() { + return this.defaultShowName; + } + + /** + * 设置默认名称 + * + * @param defaultShowName 默认名称 + */ + public void setDefaultShowName(String defaultShowName) { + this.defaultShowName = defaultShowName; + } + + /** + * 获取默认图标 + * + * @return 默认图标 + */ + public String getDefaultIconName() { + return this.defaultIconName; + } + + /** + * 设置默认图标 + * + * @param defaultIconName 默认图标 + */ + public void setDefaultIconName(String defaultIconName) { + this.defaultIconName = defaultIconName; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Live_Message.java b/src/main/java/com/ifish/bean/Tbl_Live_Message.java new file mode 100644 index 0000000..5b915b7 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Live_Message.java @@ -0,0 +1,231 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 直播间评论表(tbl_live_message) + * + * @author bianj + * @version 1.0.0 2017-07-03 + */ +@Entity +@Table(name = "tbl_live_message") +public class Tbl_Live_Message implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = 4867709378808071267L; + + /** + * 评论Id + */ + @Id + @Column(name = "message_id", unique = true, nullable = false, length = 10) + private Integer messageId; + + /** + * 直播间Id + */ + @Column(name = "room_id", nullable = false, length = 10) + private Integer roomId; + + /** + * 评论用户Id + */ + @Column(name = "user_id", nullable = false, length = 10) + private Integer userId; + + /** + * @用户Id + */ + @Column(name = "as_user_id", nullable = true, length = 10) + private Integer asUserId; + + /** + * 评论内容 + */ + @Column(name = "message_content", nullable = true, length = 200) + private String messageContent; + + /** + * 评论时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * @人的用户名 + */ + private String asUserName; + + /** + * 创建人的头像 + */ + private String userImg; + + /** + * 创建人的用户名 + */ + private String userName; + + /** + * @return the asUserName + */ + public String getAsUserName() { + return asUserName; + } + + /** + * @param asUserName the asUserName to set + */ + public void setAsUserName(String asUserName) { + this.asUserName = asUserName; + } + + /** + * @return the userImg + */ + public String getUserImg() { + return userImg; + } + + /** + * @param userImg the userImg to set + */ + public void setUserImg(String userImg) { + this.userImg = userImg; + } + + /** + * @return the userName + */ + public String getUserName() { + return userName; + } + + /** + * @param userName the userName to set + */ + public void setUserName(String userName) { + this.userName = userName; + } + + /** + * 获取评论Id + * + * @return 评论Id + */ + public Integer getMessageId() { + return this.messageId; + } + + /** + * 设置评论Id + * + * @param messageId 评论Id + */ + public void setMessageId(Integer messageId) { + this.messageId = messageId; + } + + /** + * 获取直播间Id + * + * @return 直播间Id + */ + public Integer getRoomId() { + return this.roomId; + } + + /** + * 设置直播间Id + * + * @param roomId 直播间Id + */ + public void setRoomId(Integer roomId) { + this.roomId = roomId; + } + + /** + * 获取评论用户Id + * + * @return 评论用户Id + */ + public Integer getUserId() { + return this.userId; + } + + /** + * 设置评论用户Id + * + * @param userId 评论用户Id + */ + public void setUserId(Integer userId) { + this.userId = userId; + } + + /** + * 获取@用户Id + * + * @return @用户Id + */ + public Integer getAsUserId() { + return this.asUserId; + } + + /** + * 设置@用户Id + * + * @param asUserId + * @用户Id + */ + public void setAsUserId(Integer asUserId) { + this.asUserId = asUserId; + } + + /** + * 获取评论内容 + * + * @return 评论内容 + */ + public String getMessageContent() { + return this.messageContent; + } + + /** + * 设置评论内容 + * + * @param messageContent 评论内容 + */ + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + /** + * 获取评论时间 + * + * @return 评论时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置评论时间 + * + * @param createTime 评论时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Live_Room.java b/src/main/java/com/ifish/bean/Tbl_Live_Room.java new file mode 100644 index 0000000..dc05973 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Live_Room.java @@ -0,0 +1,293 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 直播间详情表(tbl_live_room) + * + * @author bianj + * @version 1.0.0 2017-07-03 + */ +@Entity +@Table(name = "tbl_live_room") +public class Tbl_Live_Room implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = -9036392996642877776L; + + /** + * 直播间Id + */ + @Id + @Column(name = "room_id", unique = true, nullable = false, length = 10) + private Integer roomId; + + /** + * 用户Id + */ + @Column(name = "user_id", unique = true, nullable = false, length = 10) + private Integer userId; + + /** + * 摄像头ID + */ + @Column(name = "camera_id", nullable = false, length = 20) + private String cameraId; + + /** + * 直播间名称 + */ + @Column(name = "room_name", nullable = true, length = 20) + private String roomName; + + /** + * 直播间描述 + */ + @Column(name = "room_desc", nullable = true, length = 70) + private String roomDesc; + + /** + * */ + @Column(name = "room_img", nullable = true, length = 100) + private String roomImg; + + /** + * 直播间状态:1直播、0关闭 + */ + @Column(name = "room_status", nullable = true, length = 1) + private String roomStatus; + + /** + * 人气值 + */ + @Column(name = "popularity_value", nullable = false, length = 10) + private Integer popularityValue; + + /** + * 点赞数量 + */ + @Column(name = "zanNum", nullable = true, length = 10) + private Integer zanNum; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * */ + @Column(name = "update_time", nullable = true) + private Date updateTime; + + /** + * 获取直播间Id + * + * @return 直播间Id + */ + public Integer getRoomId() { + return this.roomId; + } + + /** + * 设置直播间Id + * + * @param roomId 直播间Id + */ + public void setRoomId(Integer roomId) { + this.roomId = roomId; + } + + /** + * 获取用户Id + * + * @return 用户Id + */ + public Integer getUserId() { + return this.userId; + } + + /** + * 设置用户Id + * + * @param userId 用户Id + */ + public void setUserId(Integer userId) { + this.userId = userId; + } + + /** + * 获取摄像头ID + * + * @return 摄像头ID + */ + public String getCameraId() { + return this.cameraId; + } + + /** + * 设置摄像头ID + * + * @param cameraId 摄像头ID + */ + public void setCameraId(String cameraId) { + this.cameraId = cameraId; + } + + /** + * 获取直播间名称 + * + * @return 直播间名称 + */ + public String getRoomName() { + return this.roomName; + } + + /** + * 设置直播间名称 + * + * @param roomName 直播间名称 + */ + public void setRoomName(String roomName) { + this.roomName = roomName; + } + + /** + * 获取直播间描述 + * + * @return 直播间描述 + */ + public String getRoomDesc() { + return this.roomDesc; + } + + /** + * 设置直播间描述 + * + * @param roomDesc 直播间描述 + */ + public void setRoomDesc(String roomDesc) { + this.roomDesc = roomDesc; + } + + /** + * 获取 + * + * @return + */ + public String getRoomImg() { + return this.roomImg; + } + + /** + * 设置 + * + * @param roomImg + * + */ + public void setRoomImg(String roomImg) { + this.roomImg = roomImg; + } + + /** + * 获取直播间状态:1直播、0关闭 + * + * @return 直播间状态 + */ + public String getRoomStatus() { + return this.roomStatus; + } + + /** + * 设置直播间状态:1直播、0关闭 + * + * @param roomStatus 直播间状态:1直播、0关闭 + */ + public void setRoomStatus(String roomStatus) { + this.roomStatus = roomStatus; + } + + /** + * 获取人气值 + * + * @return 人气值 + */ + public Integer getPopularityValue() { + return this.popularityValue; + } + + /** + * 设置人气值 + * + * @param popularityValue 人气值 + */ + public void setPopularityValue(Integer popularityValue) { + this.popularityValue = popularityValue; + } + + /** + * 获取点赞数量 + * + * @return 点赞数量 + */ + public Integer getZanNum() { + return this.zanNum; + } + + /** + * 设置点赞数量 + * + * @param zanNum 点赞数量 + */ + public void setZanNum(Integer zanNum) { + this.zanNum = zanNum; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取 + * + * @return + */ + public Date getUpdateTime() { + return this.updateTime; + } + + /** + * 设置 + * + * @param updateTime + * + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Live_Watch.java b/src/main/java/com/ifish/bean/Tbl_Live_Watch.java new file mode 100644 index 0000000..e66b614 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Live_Watch.java @@ -0,0 +1,126 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 用户观看直播记录(tbl_live_watch) + * + * @author bianj + * @version 1.0.0 2017-07-14 + */ +@Entity +@Table(name = "tbl_live_watch") +public class Tbl_Live_Watch { + + /** + * 版本号 + */ + private static final long serialVersionUID = -3178390426587691302L; + + /** + * 直播间ID + */ + @Id + @Column(name = "room_id", unique = true, nullable = false, length = 10) + private Integer roomId; + + /** + * 用户id + */ + @Id + @Column(name = "user_id", unique = true, nullable = false, length = 10) + private Integer userId; + + /** + * 修改时间 + */ + @Column(name = "update_time", nullable = true) + private Date updateTime; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = false) + private Date createTime; + + /** + * 获取直播间ID + * + * @return 直播间ID + */ + public Integer getRoomId() { + return this.roomId; + } + + /** + * 设置直播间ID + * + * @param roomId 直播间ID + */ + public void setRoomId(Integer roomId) { + this.roomId = roomId; + } + + /** + * 获取用户id + * + * @return 用户id + */ + public Integer getUserId() { + return this.userId; + } + + /** + * 设置用户id + * + * @param userId 用户id + */ + public void setUserId(Integer userId) { + this.userId = userId; + } + + /** + * 获取修改时间 + * + * @return 修改时间 + */ + public Date getUpdateTime() { + return this.updateTime; + } + + /** + * 设置修改时间 + * + * @param updateTime 修改时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Push_List.java b/src/main/java/com/ifish/bean/Tbl_Push_List.java new file mode 100644 index 0000000..8bfa849 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Push_List.java @@ -0,0 +1,465 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 推送详情表(tbl_push_list) + * + * @author bianj + * @version 1.0.0 2017-07-03 + */ +@Entity +@Table(name = "tbl_push_list") +public class Tbl_Push_List implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = -7760764975977010045L; + + /** + * ID + */ + @Id + @Column(name = "push_id", unique = true, nullable = false, length = 10) + private Integer pushId; + + /** + * 用户Id + */ + @Column(name = "user_id", nullable = true, length = 10) + private Integer userId; + + /** + * 设备Id + */ + @Column(name = "device_id", nullable = true, length = 10) + private Integer deviceId; + + /** + * 显示名称 + */ + @Column(name = "show_name", nullable = true, length = 20) + private String showName; + + /** + * 推送手机类型 + */ + @Column(name = "phone_type", nullable = true, length = 20) + private String phoneType; + + /** + * 推送消息类型 + * 1."remove_device","解绑通知";2."wendu_warn","温度预警;3."qu_reply","问题反馈";4."app_update","IOS更新推送";5."remind_water","换水提醒";6."offline_push","离线通知";7."send_report","看护报告";8."shops_push","看护通知";9."all_push","所有用户推送" + */ + @Column(name = "push_type", nullable = true, length = 20) + private String pushType; + + /** + * 推送标题 + */ + @Column(name = "push_title", nullable = true, length = 100) + private String pushTitle; + + /** + * 推送内容 + */ + @Column(name = "push_context", nullable = true, length = 200) + private String pushContext; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 链接 + */ + @Column(name = "push_link", nullable = false, length = 100) + private String pushLink; + + /** + * 极光推送状态 + */ + @Column(name = "jpush_status", nullable = true, length = 1) + private String jpushStatus; + + /** + * 谷歌推送状态 + */ + @Column(name = "google_status", nullable = true, length = 1) + private String googleStatus; + + /** + * 看护报告Id + */ + @Column(name = "report_id", nullable = true, length = 10) + private Integer reportId; + + /** + * MCU启动次数 + */ + @Column(name = "mcu_count", nullable = true, length = 10) + private Integer mcuCount; + + /** + * 模块启动次数 + */ + @Column(name = "modular_count", nullable = true, length = 10) + private Integer modularCount; + + /** + * 连接路由器次数 + */ + @Column(name = "router_count", nullable = true, length = 10) + private Integer routerCount; + + /** + * 成功连接服务器次数 + */ + @Column(name = "server_count", nullable = true, length = 10) + private Integer serverCount; + + /** + * 尝试连接服务器次数 + */ + @Column(name = "server_try_count", nullable = true, length = 10) + private Integer serverTryCount; + + /** + * 获取ID + * + * @return ID + */ + public Integer getPushId() { + return this.pushId; + } + + /** + * 设置ID + * + * @param pushId ID + */ + public void setPushId(Integer pushId) { + this.pushId = pushId; + } + + /** + * 获取用户Id + * + * @return 用户Id + */ + public Integer getUserId() { + return this.userId; + } + + /** + * 设置用户Id + * + * @param userId 用户Id + */ + public void setUserId(Integer userId) { + this.userId = userId; + } + + /** + * 获取设备Id + * + * @return 设备Id + */ + public Integer getDeviceId() { + return this.deviceId; + } + + /** + * 设置设备Id + * + * @param deviceId 设备Id + */ + public void setDeviceId(Integer deviceId) { + this.deviceId = deviceId; + } + + /** + * 获取显示名称 + * + * @return 显示名称 + */ + public String getShowName() { + return this.showName; + } + + /** + * 设置显示名称 + * + * @param showName 显示名称 + */ + public void setShowName(String showName) { + this.showName = showName; + } + + /** + * 获取推送手机类型 + * + * @return 推送手机类型 + */ + public String getPhoneType() { + return this.phoneType; + } + + /** + * 设置推送手机类型 + * + * @param phoneType 推送手机类型 + */ + public void setPhoneType(String phoneType) { + this.phoneType = phoneType; + } + + /** + * 获取推送消息类型 + * 1."remove_device","解绑通知";2."wendu_warn","温度预警;3."qu_reply","问题反馈";4."app_update","IOS更新推送";5."remind_water","换水提醒";6."offline_push","离线通知";7."send_report","看护报告";8."shops_push","看护通知";9."all_push","所有用户推送" + * + * @return 推送消息类型 1."remove_device" + */ + public String getPushType() { + return this.pushType; + } + + /** + * 设置推送消息类型 + * 1."remove_device","解绑通知";2."wendu_warn","温度预警;3."qu_reply","问题反馈";4."app_update","IOS更新推送";5."remind_water","换水提醒";6."offline_push","离线通知";7."send_report","看护报告";8."shops_push","看护通知";9."all_push","所有用户推送" + * + * @param pushType 推送消息类型 + * 1."remove_device","解绑通知";2."wendu_warn","温度预警;3."qu_reply","问题反馈";4."app_update","IOS更新推送";5."remind_water","换水提醒";6."offline_push","离线通知";7."send_report","看护报告";8."shops_push","看护通知";9."all_push","所有用户推送" + */ + public void setPushType(String pushType) { + this.pushType = pushType; + } + + /** + * 获取推送标题 + * + * @return 推送标题 + */ + public String getPushTitle() { + return this.pushTitle; + } + + /** + * 设置推送标题 + * + * @param pushTitle 推送标题 + */ + public void setPushTitle(String pushTitle) { + this.pushTitle = pushTitle; + } + + /** + * 获取推送内容 + * + * @return 推送内容 + */ + public String getPushContext() { + return this.pushContext; + } + + /** + * 设置推送内容 + * + * @param pushContext 推送内容 + */ + public void setPushContext(String pushContext) { + this.pushContext = pushContext; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取链接 + * + * @return 链接 + */ + public String getPushLink() { + return this.pushLink; + } + + /** + * 设置链接 + * + * @param pushLink 链接 + */ + public void setPushLink(String pushLink) { + this.pushLink = pushLink; + } + + /** + * 获取极光推送状态 + * + * @return 极光推送状态 + */ + public String getJpushStatus() { + return this.jpushStatus; + } + + /** + * 设置极光推送状态 + * + * @param jpushStatus 极光推送状态 + */ + public void setJpushStatus(String jpushStatus) { + this.jpushStatus = jpushStatus; + } + + /** + * 获取谷歌推送状态 + * + * @return 谷歌推送状态 + */ + public String getGoogleStatus() { + return this.googleStatus; + } + + /** + * 设置谷歌推送状态 + * + * @param googleStatus 谷歌推送状态 + */ + public void setGoogleStatus(String googleStatus) { + this.googleStatus = googleStatus; + } + + /** + * 获取看护报告Id + * + * @return 看护报告Id + */ + public Integer getReportId() { + return this.reportId; + } + + /** + * 设置看护报告Id + * + * @param reportId 看护报告Id + */ + public void setReportId(Integer reportId) { + this.reportId = reportId; + } + + /** + * 获取MCU启动次数 + * + * @return MCU启动次数 + */ + public Integer getMcuCount() { + return this.mcuCount; + } + + /** + * 设置MCU启动次数 + * + * @param mcuCount MCU启动次数 + */ + public void setMcuCount(Integer mcuCount) { + this.mcuCount = mcuCount; + } + + /** + * 获取模块启动次数 + * + * @return 模块启动次数 + */ + public Integer getModularCount() { + return this.modularCount; + } + + /** + * 设置模块启动次数 + * + * @param modularCount 模块启动次数 + */ + public void setModularCount(Integer modularCount) { + this.modularCount = modularCount; + } + + /** + * 获取连接路由器次数 + * + * @return 连接路由器次数 + */ + public Integer getRouterCount() { + return this.routerCount; + } + + /** + * 设置连接路由器次数 + * + * @param routerCount 连接路由器次数 + */ + public void setRouterCount(Integer routerCount) { + this.routerCount = routerCount; + } + + /** + * 获取成功连接服务器次数 + * + * @return 成功连接服务器次数 + */ + public Integer getServerCount() { + return this.serverCount; + } + + /** + * 设置成功连接服务器次数 + * + * @param serverCount 成功连接服务器次数 + */ + public void setServerCount(Integer serverCount) { + this.serverCount = serverCount; + } + + /** + * 获取尝试连接服务器次数 + * + * @return 尝试连接服务器次数 + */ + public Integer getServerTryCount() { + return this.serverTryCount; + } + + /** + * 设置尝试连接服务器次数 + * + * @param serverTryCount 尝试连接服务器次数 + */ + public void setServerTryCount(Integer serverTryCount) { + this.serverTryCount = serverTryCount; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Security_User.java b/src/main/java/com/ifish/bean/Tbl_Security_User.java new file mode 100644 index 0000000..579f58f --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Security_User.java @@ -0,0 +1,221 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * (tbl_security_user) + * + * @author bianj + * @version 1.0.0 2017-07-20 + */ +@Entity +@Table(name = "tbl_security_user") +public class Tbl_Security_User { + + /** + * 版本号 + */ + private static final long serialVersionUID = -8984570421187661490L; + + /** + * 用户id + */ + @Id + @Column(name = "id", unique = true, nullable = false, length = 10) + private Integer id; + + /** + * 用户名 + */ + @Column(name = "username", nullable = false, length = 20) + private String username; + + /** + * 用户密码 + */ + @Column(name = "password", nullable = false, length = 32) + private String password; + + /** + * 邮箱 + */ + @Column(name = "email", nullable = true, length = 30) + private String email; + + /** + * 权限 + */ + @Column(name = "role", nullable = false, length = 1) + private String role; + + /** + * 权限名称 + */ + @Column(name = "rolename", nullable = false, length = 20) + private String rolename; + + /** + * 厂家代码 + */ + @Column(name = "code", nullable = false, length = 20) + private String code; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 获取用户id + * + * @return 用户id + */ + public Integer getId() { + return this.id; + } + + /** + * 设置用户id + * + * @param id 用户id + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * 获取用户名 + * + * @return 用户名 + */ + public String getUsername() { + return this.username; + } + + /** + * 设置用户名 + * + * @param username 用户名 + */ + public void setUsername(String username) { + this.username = username; + } + + /** + * 获取用户密码 + * + * @return 用户密码 + */ + public String getPassword() { + return this.password; + } + + /** + * 设置用户密码 + * + * @param password 用户密码 + */ + public void setPassword(String password) { + this.password = password; + } + + /** + * 获取邮箱 + * + * @return 邮箱 + */ + public String getEmail() { + return this.email; + } + + /** + * 设置邮箱 + * + * @param email 邮箱 + */ + public void setEmail(String email) { + this.email = email; + } + + /** + * 获取权限 + * + * @return 权限 + */ + public String getRole() { + return this.role; + } + + /** + * 设置权限 + * + * @param role 权限 + */ + public void setRole(String role) { + this.role = role; + } + + /** + * 获取权限名称 + * + * @return 权限名称 + */ + public String getRolename() { + return this.rolename; + } + + /** + * 设置权限名称 + * + * @param rolename 权限名称 + */ + public void setRolename(String rolename) { + this.rolename = rolename; + } + + /** + * 获取厂家代码 + * + * @return 厂家代码 + */ + public String getCode() { + return this.code; + } + + /** + * 设置厂家代码 + * + * @param code 厂家代码 + */ + public void setCode(String code) { + this.code = code; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_User.java b/src/main/java/com/ifish/bean/Tbl_User.java new file mode 100644 index 0000000..cea1ae5 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_User.java @@ -0,0 +1,581 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 用户详情表(tbl_user) + * + * @author bianj + * @version 1.0.0 2017-06-28 + */ +@Entity +@Table(name = "tbl_user") +public class Tbl_User implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = 1916426418064460350L; + + /** + * 用户Id + */ + @Id + @Column(name = "user_id", unique = true, nullable = false, length = 10) + private Integer userId; + + /** + * 昵称 + */ + @Column(name = "nick_name", nullable = true, length = 20) + private String nickName; + + /** + * 密码 + */ + @Column(name = "user_password", nullable = true, length = 32) + private String userPassword; + + /** + * 手机 + */ + @Column(name = "phone_number", unique = true, nullable = true, length = 11) + private String phoneNumber; + + /** + * 邮箱 + */ + @Column(name = "user_email", unique = true, nullable = true, length = 50) + private String userEmail; + + /** + * 用户类型 + */ + @Column(name = "user_type", nullable = false, length = 1) + private String userType; + + /** + * 头像 + */ + @Column(name = "user_img", nullable = true, length = 100) + private String userImg; + + /** + * 性别 + */ + @Column(name = "user_sex", nullable = true, length = 1) + private String userSex; + + /** + * 登陆次数 + */ + @Column(name = "login_count", nullable = true, length = 10) + private Integer loginCount; + + /** + * 修改时间 + */ + @Column(name = "update_time", nullable = true) + private Date updateTime; + + /** + * 登陆时间 + */ + @Column(name = "login_time", nullable = true) + private Date loginTime; + + /** + * 注册时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 登陆手机类型 + */ + @Column(name = "login_type", nullable = true, length = 10) + private String loginType; + + /** + * 备注 + */ + @Column(name = "remarks", nullable = true, length = 100) + private String remarks; + + /** + * 地址 + */ + @Column(name = "address", nullable = true, length = 200) + private String address; + + /** + * 技威Code1 + */ + @Column(name = "p2pverify_code1", nullable = true, length = 50) + private String p2pverifyCode1; + + /** + * 技威Code2 + */ + @Column(name = "p2pverify_code2", nullable = true, length = 50) + private String p2pverifyCode2; + + /** + * 技威用户ID + */ + @Column(name = "gwell_userid", nullable = true, length = 50) + private String gwellUserid; + + /** + * 是否注册技威:1已注册、0未注册 + */ + @Column(name = "is_register_gwell", nullable = true, length = 1) + private String isRegisterGwell; + + /** + * 极光用户ID + */ + @Column(name = "jiguang_userid", nullable = true, length = 50) + private String jiguangUserid; + + /** + * */ + @Column(name = "token", nullable = true, length = 50) + private String token; + + /** + * 经度 + */ + @Column(name = "longitude", nullable = true) + private Double longitude; + + /** + * 纬度 + */ + @Column(name = "latitude", nullable = true) + private Double latitude; + + /** + * 获取用户Id + * + * @return 用户Id + */ + public Integer getUserId() { + return this.userId; + } + + /** + * 设置用户Id + * + * @param userId 用户Id + */ + public void setUserId(Integer userId) { + this.userId = userId; + } + + /** + * 获取昵称 + * + * @return 昵称 + */ + public String getNickName() { + return this.nickName; + } + + /** + * 设置昵称 + * + * @param nickName 昵称 + */ + public void setNickName(String nickName) { + this.nickName = nickName; + } + + /** + * 获取密码 + * + * @return 密码 + */ + public String getUserPassword() { + return this.userPassword; + } + + /** + * 设置密码 + * + * @param userPassword 密码 + */ + public void setUserPassword(String userPassword) { + this.userPassword = userPassword; + } + + /** + * 获取手机 + * + * @return 手机 + */ + public String getPhoneNumber() { + return this.phoneNumber; + } + + /** + * 设置手机 + * + * @param phoneNumber 手机 + */ + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + /** + * 获取邮箱 + * + * @return 邮箱 + */ + public String getUserEmail() { + return this.userEmail; + } + + /** + * 设置邮箱 + * + * @param userEmail 邮箱 + */ + public void setUserEmail(String userEmail) { + this.userEmail = userEmail; + } + + /** + * 获取用户类型 + * + * @return 用户类型 + */ + public String getUserType() { + return this.userType; + } + + /** + * 设置用户类型 + * + * @param userType 用户类型 + */ + public void setUserType(String userType) { + this.userType = userType; + } + + /** + * 获取头像 + * + * @return 头像 + */ + public String getUserImg() { + return this.userImg; + } + + /** + * 设置头像 + * + * @param userImg 头像 + */ + public void setUserImg(String userImg) { + this.userImg = userImg; + } + + /** + * 获取性别 + * + * @return 性别 + */ + public String getUserSex() { + return this.userSex; + } + + /** + * 设置性别 + * + * @param userSex 性别 + */ + public void setUserSex(String userSex) { + this.userSex = userSex; + } + + /** + * 获取登陆次数 + * + * @return 登陆次数 + */ + public Integer getLoginCount() { + return this.loginCount; + } + + /** + * 设置登陆次数 + * + * @param loginCount 登陆次数 + */ + public void setLoginCount(Integer loginCount) { + this.loginCount = loginCount; + } + + /** + * 获取修改时间 + * + * @return 修改时间 + */ + public Date getUpdateTime() { + return this.updateTime; + } + + /** + * 设置修改时间 + * + * @param updateTime 修改时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取登陆时间 + * + * @return 登陆时间 + */ + public Date getLoginTime() { + return this.loginTime; + } + + /** + * 设置登陆时间 + * + * @param loginTime 登陆时间 + */ + public void setLoginTime(Date loginTime) { + this.loginTime = loginTime; + } + + /** + * 获取注册时间 + * + * @return 注册时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置注册时间 + * + * @param createTime 注册时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取登陆手机类型 + * + * @return 登陆手机类型 + */ + public String getLoginType() { + return this.loginType; + } + + /** + * 设置登陆手机类型 + * + * @param loginType 登陆手机类型 + */ + public void setLoginType(String loginType) { + this.loginType = loginType; + } + + /** + * 获取备注 + * + * @return 备注 + */ + public String getRemarks() { + return this.remarks; + } + + /** + * 设置备注 + * + * @param remarks 备注 + */ + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + /** + * 获取地址 + * + * @return 地址 + */ + public String getAddress() { + return this.address; + } + + /** + * 设置地址 + * + * @param address 地址 + */ + public void setAddress(String address) { + this.address = address; + } + + /** + * 获取技威Code1 + * + * @return 技威Code1 + */ + public String getP2pverifyCode1() { + return this.p2pverifyCode1; + } + + /** + * 设置技威Code1 + * + * @param p2pverifyCode1 技威Code1 + */ + public void setP2pverifyCode1(String p2pverifyCode1) { + this.p2pverifyCode1 = p2pverifyCode1; + } + + /** + * 获取技威Code2 + * + * @return 技威Code2 + */ + public String getP2pverifyCode2() { + return this.p2pverifyCode2; + } + + /** + * 设置技威Code2 + * + * @param p2pverifyCode2 技威Code2 + */ + public void setP2pverifyCode2(String p2pverifyCode2) { + this.p2pverifyCode2 = p2pverifyCode2; + } + + /** + * 获取技威用户ID + * + * @return 技威用户ID + */ + public String getGwellUserid() { + return this.gwellUserid; + } + + /** + * 设置技威用户ID + * + * @param gwellUserid 技威用户ID + */ + public void setGwellUserid(String gwellUserid) { + this.gwellUserid = gwellUserid; + } + + /** + * 获取是否注册技威:1已注册、0未注册 + * + * @return 是否注册技威 + */ + public String getIsRegisterGwell() { + return this.isRegisterGwell; + } + + /** + * 设置是否注册技威:1已注册、0未注册 + * + * @param isRegisterGwell 是否注册技威:1已注册、0未注册 + */ + public void setIsRegisterGwell(String isRegisterGwell) { + this.isRegisterGwell = isRegisterGwell; + } + + /** + * 获取极光用户ID + * + * @return 极光用户ID + */ + public String getJiguangUserid() { + return this.jiguangUserid; + } + + /** + * 设置极光用户ID + * + * @param jiguangUserid 极光用户ID + */ + public void setJiguangUserid(String jiguangUserid) { + this.jiguangUserid = jiguangUserid; + } + + /** + * 获取 + * + * @return + */ + public String getToken() { + return this.token; + } + + /** + * 设置 + * + * @param token + * + */ + public void setToken(String token) { + this.token = token; + } + + /** + * 获取经度 + * + * @return 经度 + */ + public Double getLongitude() { + return this.longitude; + } + + /** + * 设置经度 + * + * @param longitude 经度 + */ + public void setLongitude(Double longitude) { + this.longitude = longitude; + } + + /** + * 获取纬度 + * + * @return 纬度 + */ + public Double getLatitude() { + return this.latitude; + } + + /** + * 设置纬度 + * + * @param latitude 纬度 + */ + public void setLatitude(Double latitude) { + this.latitude = latitude; + } +} diff --git a/src/main/java/com/ifish/bean/Tbl_Vender.java b/src/main/java/com/ifish/bean/Tbl_Vender.java new file mode 100644 index 0000000..c0a1010 --- /dev/null +++ b/src/main/java/com/ifish/bean/Tbl_Vender.java @@ -0,0 +1,245 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.bean; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * 鱼缸场详情表(tbl_vender_list) + * + * @author bianj + * @version 1.0.0 2017-06-27 + */ +@Entity +@Table(name = "tbl_vender_list") +public class Tbl_Vender implements java.io.Serializable { + + /** + * 版本号 + */ + private static final long serialVersionUID = 2462685903502867014L; + + /** + * 鱼缸厂编号 + */ + @Id + @Column(name = "brand_code", unique = true, nullable = false, length = 20) + private String brandCode; + + /** + * logo + */ + @Column(name = "brand_logo", nullable = true, length = 100) + private String brandLogo; + + /** + * 鱼缸厂名称 + */ + @Column(name = "brand_name", nullable = false, length = 20) + private String brandName; + + /** + * 品牌介绍 + */ + @Column(name = "brand_introduce", nullable = true, length = 100) + private String brandIntroduce; + + /** + * app展示 + */ + @Column(name = "app_show", nullable = true, length = 1) + private String appShow; + + /** + * 联系电话 + */ + @Column(name = "contact_phone", nullable = true, length = 30) + private String contactPhone; + + /** + * 联系地址 + */ + @Column(name = "contact_address", nullable = true, length = 50) + private String contactAddress; + + /** + * 更新时间 + */ + @Column(name = "update_time", nullable = true) + private Date updateTime; + + /** + * 创建时间 + */ + @Column(name = "create_time", nullable = true) + private Date createTime; + + /** + * 获取鱼缸厂编号 + * + * @return 鱼缸厂编号 + */ + public String getBrandCode() { + return this.brandCode; + } + + /** + * 设置鱼缸厂编号 + * + * @param brandCode 鱼缸厂编号 + */ + public void setBrandCode(String brandCode) { + this.brandCode = brandCode; + } + + /** + * 获取logo + * + * @return logo + */ + public String getBrandLogo() { + return this.brandLogo; + } + + /** + * 设置logo + * + * @param brandLogo logo + */ + public void setBrandLogo(String brandLogo) { + this.brandLogo = brandLogo; + } + + /** + * 获取鱼缸厂名称 + * + * @return 鱼缸厂名称 + */ + public String getBrandName() { + return this.brandName; + } + + /** + * 设置鱼缸厂名称 + * + * @param brandName 鱼缸厂名称 + */ + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + /** + * 获取品牌介绍 + * + * @return 品牌介绍 + */ + public String getBrandIntroduce() { + return this.brandIntroduce; + } + + /** + * 设置品牌介绍 + * + * @param brandIntroduce 品牌介绍 + */ + public void setBrandIntroduce(String brandIntroduce) { + this.brandIntroduce = brandIntroduce; + } + + /** + * 获取app展示 + * + * @return app展示 + */ + public String getAppShow() { + return this.appShow; + } + + /** + * 设置app展示 + * + * @param appShow app展示 + */ + public void setAppShow(String appShow) { + this.appShow = appShow; + } + + /** + * 获取联系电话 + * + * @return 联系电话 + */ + public String getContactPhone() { + return this.contactPhone; + } + + /** + * 设置联系电话 + * + * @param contactPhone 联系电话 + */ + public void setContactPhone(String contactPhone) { + this.contactPhone = contactPhone; + } + + /** + * 获取联系地址 + * + * @return 联系地址 + */ + public String getContactAddress() { + return this.contactAddress; + } + + /** + * 设置联系地址 + * + * @param contactAddress 联系地址 + */ + public void setContactAddress(String contactAddress) { + this.contactAddress = contactAddress; + } + + /** + * 获取更新时间 + * + * @return 更新时间 + */ + public Date getUpdateTime() { + return this.updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取创建时间 + * + * @return 创建时间 + */ + public Date getCreateTime() { + return this.createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/src/main/java/com/ifish/config/MybatisConfig.java b/src/main/java/com/ifish/config/MybatisConfig.java new file mode 100644 index 0000000..235479f --- /dev/null +++ b/src/main/java/com/ifish/config/MybatisConfig.java @@ -0,0 +1,86 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.config; + +import javax.sql.DataSource; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * + * @author Administrator + */ +@Configuration +@EnableTransactionManagement +public class MybatisConfig { + + @Bean + public DataSource dataSource() { +// try { +// ComboPooledDataSource datasourc = new ComboPooledDataSource(); +// datasourc.setDriverClass(JdbcProperties.driverClassName); +// datasourc.setJdbcUrl(JdbcProperties.url); +// datasourc.setUser(JdbcProperties.username); +// datasourc.setPassword(JdbcProperties.password); +// datasourc.setAutoCommitOnClose(JdbcProperties.autoCommitOnClose); +// datasourc.setInitialPoolSize(JdbcProperties.initialPoolSize); +// datasourc.setMinPoolSize(JdbcProperties.minPoolSize); +// datasourc.setMaxPoolSize(JdbcProperties.maxPoolSize); +// datasourc.setAcquireIncrement(JdbcProperties.acquireIncrement); +// datasourc.setCheckoutTimeout(JdbcProperties.checkoutTimeout); +// datasourc.setMaxIdleTime(JdbcProperties.maxIdleTime); +// datasourc.setIdleConnectionTestPeriod(JdbcProperties.idleConnectionTestPeriod); +// return datasourc; +// } catch (Exception e) { +// +// } + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.jdbc.Driver"); + //线上生产数据库连接 + dataSource.setUsername("ifish"); + dataSource.setPassword("ifish7pwd"); + dataSource.setUrl("jdbc:mysql://localhost:3306/myfishdbenglish?characterEncoding=UTF-8"); + return dataSource; + } + + @Bean(name = "sqlSessionFactory") + public SqlSessionFactoryBean sqlSessionFactory() { + SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); + ssfb.setDataSource(dataSource()); + ssfb.setTypeAliasesPackage("com.ifish.bean"); + try { + org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); + configuration.setMapUnderscoreToCamelCase(true); + ssfb.setConfiguration(configuration); + + } catch (Exception e) { + } + + return ssfb; + } + + @Bean + public MapperScannerConfigurer mpperScannnerConfigurer() { + MapperScannerConfigurer msc = new MapperScannerConfigurer(); + msc.setSqlSessionFactoryBeanName("sqlSessionFactory"); + msc.setBasePackage("com.ifish.mapper"); + return msc; + } + + @Bean + PlatformTransactionManager transactionManager() { + DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); + transactionManager.setDataSource(dataSource()); + return transactionManager; + } + +} diff --git a/src/main/java/com/ifish/config/RedisConfig.java b/src/main/java/com/ifish/config/RedisConfig.java new file mode 100644 index 0000000..fbabe23 --- /dev/null +++ b/src/main/java/com/ifish/config/RedisConfig.java @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.config; + +import com.ifish.util.IfishFilePath; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; + +/** + * + * @author Administrator + */ +@Configuration +public class RedisConfig { + + @Bean + public RedisConnectionFactory redisCF() { + JedisConnectionFactory cf = new JedisConnectionFactory(); + +// //获取当前操作系统(servers_os为服务器设置的属性JAVA_OPTS=%JAVA_OPTS% -Dservers_os=online84) +// String servers_os = System.getProperty("servers_os") == null ? "" : System.getProperty("servers_os"); + if (IfishFilePath.link_img_head.contains("ifish7")) { + //站点线上服务器 + cf.setHostName("120.55.190.56"); + cf.setPort(3796); + cf.setPassword("ifish7myredis"); + } else { + //站点测试服务器 + cf.setHostName("139.196.24.156"); + cf.setPort(3796); + cf.setPassword("ifish7myredis"); +// FileUtil.writeLinesByLog("测试缓存连接"); + } + + return cf; + } + + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory cf) { + RedisTemplate redis = new RedisTemplate(); + redis.setConnectionFactory(cf); + return redis; + } + + @Bean + public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory cf) { + StringRedisTemplate redis = new StringRedisTemplate(); + redis.setConnectionFactory(cf); + return redis; + } +} diff --git a/src/main/java/com/ifish/config/RootConfig.java b/src/main/java/com/ifish/config/RootConfig.java new file mode 100644 index 0000000..09ca7e6 --- /dev/null +++ b/src/main/java/com/ifish/config/RootConfig.java @@ -0,0 +1,39 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.ComponentScan.Filter; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.web.multipart.commons.CommonsMultipartResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +/** + * + * @author Administrator + */ +@Configuration +//@Import(MybatisConfig.class) //导入数据库文件配置 +@ComponentScan(basePackages = {"com.ifish.*"}, + excludeFilters = { + @Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)}) +public class RootConfig { + + /** + * 文件上传 + * + * @return + */ + @Bean + public CommonsMultipartResolver multipartResolver() { + CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(); + commonsMultipartResolver.setMaxUploadSize(10485760); + return commonsMultipartResolver; + } + +} diff --git a/src/main/java/com/ifish/config/SecuredConfig.java b/src/main/java/com/ifish/config/SecuredConfig.java new file mode 100644 index 0000000..02389dc --- /dev/null +++ b/src/main/java/com/ifish/config/SecuredConfig.java @@ -0,0 +1,19 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.config; + +import com.ifish.helper.UserHelper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +/** + * + * @author Administrator + */ +public class SecuredConfig extends WebSecurityConfigurerAdapter { + @Autowired + private UserHelper userHelper; +} diff --git a/src/main/java/com/ifish/config/SecurityWebInitializer.java b/src/main/java/com/ifish/config/SecurityWebInitializer.java new file mode 100644 index 0000000..6333a08 --- /dev/null +++ b/src/main/java/com/ifish/config/SecurityWebInitializer.java @@ -0,0 +1,16 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.config; + +import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; + +/** + * + * @author Administrator + */ +public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer { + +} diff --git a/src/main/java/com/ifish/config/WebAppInitializer.java b/src/main/java/com/ifish/config/WebAppInitializer.java new file mode 100644 index 0000000..c963f53 --- /dev/null +++ b/src/main/java/com/ifish/config/WebAppInitializer.java @@ -0,0 +1,46 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.config; + +import javax.servlet.Filter; +import org.springframework.context.annotation.Bean; +import org.springframework.web.filter.CharacterEncodingFilter; +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +/** + * + * @author Administrator + */ +public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { + + @Override + protected Class[] getRootConfigClasses() { + return new Class[]{RootConfig.class, MybatisConfig.class}; + } + + @Override + protected Class[] getServletConfigClasses() { + return new Class[]{WebConfig.class}; + } + + @Override + protected String[] getServletMappings() { + return new String[]{"/api/*"}; + } + + @Override + protected Filter[] getServletFilters() { + return null; + } + + @Bean + public Filter characterEncodingFilter() { + CharacterEncodingFilter filter = new CharacterEncodingFilter(); + filter.setEncoding("UTF-8"); + filter.setForceEncoding(true); + return filter; + } +} diff --git a/src/main/java/com/ifish/config/WebConfig.java b/src/main/java/com/ifish/config/WebConfig.java new file mode 100644 index 0000000..813a598 --- /dev/null +++ b/src/main/java/com/ifish/config/WebConfig.java @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.config; + +import com.ifish.util.IfishFilePath; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.InternalResourceViewResolver; + +/** + * + * @author Administrator + */ +@Configuration +/** + * 启动SpringMVC + */ +@EnableWebMvc +/** + * 启动组件扫描器,com.mymvc.controller是包 + */ +@ComponentScan("com.ifish.controller") +public class WebConfig extends WebMvcConfigurerAdapter { + + /** + * 配置视图解析器 + * + * @return + */ + @Bean + public ViewResolver viewResolver() { + InternalResourceViewResolver resolver = new InternalResourceViewResolver(); + resolver.setPrefix("/WEB-INF/views/"); + resolver.setSuffix(".jsp"); + resolver.setExposeContextBeansAsAttributes(true); + return resolver; + } + + /** + * 配置静态资源的处理 + * + * @param configurer + */ + @Override + public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { + configurer.enable();; + } + +} diff --git a/src/main/java/com/ifish/controller/Index.java b/src/main/java/com/ifish/controller/Index.java new file mode 100644 index 0000000..63cfb4a --- /dev/null +++ b/src/main/java/com/ifish/controller/Index.java @@ -0,0 +1,26 @@ + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +/** + * + * @author Administrator + */ +@Controller +public class Index { + + @RequestMapping(value = "", method = RequestMethod.GET) + public ModelAndView Index() { + ModelAndView mv = new ModelAndView(); + mv.setViewName("index"); + return mv; + } + +} diff --git a/src/main/java/com/ifish/enums/GwellEnum.java b/src/main/java/com/ifish/enums/GwellEnum.java new file mode 100644 index 0000000..ed918b3 --- /dev/null +++ b/src/main/java/com/ifish/enums/GwellEnum.java @@ -0,0 +1,41 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.enums; + +/** + * + * @author Administrator + */ +public enum GwellEnum { + + success("0", "注册成功"),//注册成功 + fail("1", "注册失败"),//注册失败 + repeat("7", "邮箱已被注册");//邮箱已被注册 + + private GwellEnum(String key, String value) { + this.key = key; + this.value = value; + } + + private String key; + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/com/ifish/enums/PushTypeEnum.java b/src/main/java/com/ifish/enums/PushTypeEnum.java new file mode 100644 index 0000000..5e209a9 --- /dev/null +++ b/src/main/java/com/ifish/enums/PushTypeEnum.java @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.enums; + +/** + * 推送消息类型 + * + * @author Administrator + */ +public enum PushTypeEnum { + remove_device("remove_device", "解绑通知"), + wendu_warn("wendu_warn", "温度预警"), + qu_reply("qu_reply", "问题反馈"), + app_update("app_update", "IOS更新推送"), + remind_water("remind_water", "换水提醒"), + offline_push("offline_push", "离线通知"), + send_report("send_report", "看护报告"), + shops_push("shops_push", "看护通知"), + all_push("all_push", "所有用户推送"); + + private PushTypeEnum(String key, String value) { + this.key = key; + this.value = value; + } + + private String key; + private String value; + + //普通方法 + public static String getValue(String key) { + for (PushTypeEnum c : PushTypeEnum.values()) { + if (c.getKey().equals(key)) { + return c.getValue(); + } + } + return null; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/src/main/java/com/ifish/enums/ResultEnum.java b/src/main/java/com/ifish/enums/ResultEnum.java new file mode 100644 index 0000000..853dad8 --- /dev/null +++ b/src/main/java/com/ifish/enums/ResultEnum.java @@ -0,0 +1,66 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.enums; + +/** + * + * @author Administrator + */ +public enum ResultEnum { + success("100", "成功"), + fail101("101", "失败"), + warn201("201", "手机已经注册过"), + warn202("202", "手机未注册"), + warn203("203", "未知操作"),//获取验证码时 + warn204("204", "密码不正确"), + warn205("205", "图片格式不正确"), + warn206("206", "上传图片太大"), + warn207("207", "设备不存在"), + warn208("208", "激活码已被使用"), + warn209("209", "无效的激活码"), + warn210("210", "摄像头不存在"), + warn211("211", "用户ID不存在"), + warn212("212", "请填写正确的商家手机号"), + warn213("213", "包含敏感词"), + warn214("214", "直播间已存在"), + warn215("215", "金币不足"), + warn216("216", "金币规则不存在"), + warn217("217", "打赏金额错误"), + warn218("218", "没有商家"), + warn219("219", "优惠券已停止兑换"), + warn220("220", "用户能兑换数量达到上限"), + warn221("221", "优惠券已全部兑换完"), + warn222("222", "请上传正确的商品介绍图"), + warn223("223", "请上传正确的商品介绍视频"), + error400("400", "安全校验失败"), + error401("401", "参数校验失败"), + error402("402", "参数不存在"); + + private ResultEnum(String key, String value) { + this.key = key; + this.value = value; + } + + private String key; + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/src/main/java/com/ifish/enums/SendTypeEnum.java b/src/main/java/com/ifish/enums/SendTypeEnum.java new file mode 100644 index 0000000..a8d3b8f --- /dev/null +++ b/src/main/java/com/ifish/enums/SendTypeEnum.java @@ -0,0 +1,42 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.enums; + +/** + * 获取验证码操作类型 + * + * @author ggw + * + */ +public enum SendTypeEnum { + register("1", "注册操作"), + findpwd("2", "找回密码操作"); + + private SendTypeEnum(String key, String value) { + this.key = key; + this.value = value; + } + + private String key; + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/src/main/java/com/ifish/enums/SmsSignEnum.java b/src/main/java/com/ifish/enums/SmsSignEnum.java new file mode 100644 index 0000000..01018ca --- /dev/null +++ b/src/main/java/com/ifish/enums/SmsSignEnum.java @@ -0,0 +1,43 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.enums; + +/** + * + * @author Administrator + */ +public enum SmsSignEnum { + sign1("sign1", "活动验证"), + sign2("sign2", "变更验证"), + sign3("sign3", "登录验证"), + sign4("sign4", "注册验证"), + sign5("sign5", "身份验证"); + + private SmsSignEnum(String key, String value) { + this.key = key; + this.value = value; + } + + private String key; + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/src/main/java/com/ifish/enums/SmsTemplateEnum.java b/src/main/java/com/ifish/enums/SmsTemplateEnum.java new file mode 100644 index 0000000..2006e37 --- /dev/null +++ b/src/main/java/com/ifish/enums/SmsTemplateEnum.java @@ -0,0 +1,45 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.enums; + +/** + * + * @author Administrator + */ +public enum SmsTemplateEnum { + SMS_720021("SMS_720021", "身份验证验证码"), + SMS_720020("SMS_720020", "登陆确认验证码"), + SMS_720019("SMS_720019", "登陆异常验证码"), + SMS_720018("SMS_720018", "用户注册验证码"), + SMS_720017("SMS_720017", "活动确认验证码"), + SMS_720016("SMS_720016", "修改密码验证码"), + SMS_720015("SMS_720015", "信息变更验证码"); + + private SmsTemplateEnum(String key, String value) { + this.key = key; + this.value = value; + } + + private String key; + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/src/main/java/com/ifish/enums/SubDirectoryEnum.java b/src/main/java/com/ifish/enums/SubDirectoryEnum.java new file mode 100644 index 0000000..2715c25 --- /dev/null +++ b/src/main/java/com/ifish/enums/SubDirectoryEnum.java @@ -0,0 +1,45 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.enums; + +/** + * + * @author Administrator + */ +public enum SubDirectoryEnum { + headImage("app/", "头像"), + banner("banner/", "banner图"), + look("look/", "看护报告"), + ueditorHtml("ueditorHtml/", "后台生成的网页"), + adInfo("Img/adInfo/", "广告图片"), + information("Img/information/", "资讯图片"), + ifishGoods("Img/goods/", "商品图片"), + ifishCommodity("Img/commodity/", "商家商品介绍图"); + + private SubDirectoryEnum(String key, String value) { + this.key = key; + this.value = value; + } + + private String key; + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/com/ifish/helper/RedisHelper.java b/src/main/java/com/ifish/helper/RedisHelper.java new file mode 100644 index 0000000..5f8f512 --- /dev/null +++ b/src/main/java/com/ifish/helper/RedisHelper.java @@ -0,0 +1,172 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.helper; + +import com.ifish.util.IfishUtil; +import java.util.Iterator; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +/** + * redis缓存服务器所有接口方法 + * + * @author Administrator + */ +@Component +public class RedisHelper implements RedisHelperI { + + @Autowired + private StringRedisTemplate redis; + + /* + *获取缓存值 + */ + @Override + public String getRedis(String key) { + try { + String result = redis.opsForValue().get(key.toLowerCase()); + return result; + } catch (Exception e) { + return null; + } + } + + /* + *设置缓存(默认时间为1天) + */ + @Override + public void setRedis(String key, String value) { + if (value == null) { + return; + } + try { + redis.opsForValue().set(key.toLowerCase(), value, IfishUtil.CacheTime_DAYS, TimeUnit.DAYS); + } catch (Exception e) { + } + } + + /*设置自定义时效缓存 + *key 缓存名称,value缓存值(string),time(保存时间),unit(时间类型) + */ + @Override + public void setRedis(String key, String value, int time, TimeUnit unit) { + if (value == null) { + return; + } + try { + redis.opsForValue().set(key.toLowerCase(), value, time, unit); + } catch (Exception e) { + } + } + + /* + *设置按天时效缓存 + */ + @Override + public void setRedisToDAYS(String key, String value) { + if (value == null) { + return; + } + try { + redis.opsForValue().set(key.toLowerCase(), value, IfishUtil.CacheTime_DAYS, TimeUnit.DAYS); + } catch (Exception e) { + } + } + + /* + *设置按时时效缓存 + */ + @Override + public void setRedisToHOURS(String key, String value) { + if (value == null) { + return; + } + try { + redis.opsForValue().set(key.toLowerCase(), value, IfishUtil.CacheTime_HOURS, TimeUnit.HOURS); + } catch (Exception e) { + } + } + + /* + *设置按分时效缓存 + */ + @Override + public void setRedisToMINUTES(String key, String value) { + if (value == null) { + return; + } + try { + redis.opsForValue().set(key.toLowerCase(), value, IfishUtil.CacheTime_MINUTES, TimeUnit.MINUTES); + } catch (Exception e) { + } + } + + /* + *设置按秒时效缓存 + */ + @Override + public void setRedisToSECONDS(String key, String value) { + if (value == null) { + return; + } + try { + redis.opsForValue().set(key.toLowerCase(), value, IfishUtil.CacheTime_SECONDS, TimeUnit.SECONDS); + } catch (Exception e) { + } + } + + /* + *删除缓存值 + */ + @Override + public void deleteRedis(String key) { + try { + redis.delete(key.toLowerCase()); + } catch (Exception e) { + } + } + + /* + *删除带前缀的批量缓存 + *tagkey 缓存前缀 + *如省份缓存 province:10,前缀为province + */ + @Override + public void delRedisByTagKey(String tagkey) { + try { + Set set = redis.keys(tagkey.toLowerCase() + "*"); + Iterator it = set.iterator(); + while (it.hasNext()) { + String keyStr = it.next(); + redis.delete(keyStr); + } + } catch (Exception e) { + } + } + + /* + * 删除当前缓存数据库所有的key + * 排除系数设置缓存 + */ + @Override + public void deleteDBRedis() { + try { + Set set = redis.keys("*"); + Iterator it = set.iterator(); + while (it.hasNext()) { + String keyStr = it.next(); + //排除系数设置缓存 + if (!keyStr.contains("recommendsetting:")) { + redis.delete(keyStr); + } + } + } catch (Exception e) { + } + } +} diff --git a/src/main/java/com/ifish/helper/RedisHelperI.java b/src/main/java/com/ifish/helper/RedisHelperI.java new file mode 100644 index 0000000..0faa9cb --- /dev/null +++ b/src/main/java/com/ifish/helper/RedisHelperI.java @@ -0,0 +1,69 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.helper; + +import java.util.concurrent.TimeUnit; + +/** + * redis缓存服务器所有接口方法 + * + * @author Administrator + */ +public interface RedisHelperI { + + /* + *删除带前缀的批量缓存 + *tagkey 缓存前缀 + *如省份缓存 province:10,前缀为province + */ + void delRedisByTagKey(String tagkey); + + /* + *删除缓存值 + */ + void deleteRedis(String key); + + /* + *删除当前缓存数据库所有的key + */ + void deleteDBRedis(); + + /* + *获取缓存值 + */ + String getRedis(String key); + + /* + *设置缓存(有效时间默认为1天) + */ + void setRedis(String key, String value); + + /*设置自定义时效缓存 + *key 缓存名称,value缓存值(string),time(保存时间),unit(时间类型) + */ + void setRedis(String key, String value, int time, TimeUnit unit); + + /* + *设置按天时效缓存 + */ + void setRedisToDAYS(String key, String value); + + /* + *设置按时时效缓存 + */ + void setRedisToHOURS(String key, String value); + + /* + *设置按分时效缓存 + */ + void setRedisToMINUTES(String key, String value); + + /* + *设置按秒时效缓存 + */ + void setRedisToSECONDS(String key, String value); + +} diff --git a/src/main/java/com/ifish/helper/RedisKeyHelper.java b/src/main/java/com/ifish/helper/RedisKeyHelper.java new file mode 100644 index 0000000..0429082 --- /dev/null +++ b/src/main/java/com/ifish/helper/RedisKeyHelper.java @@ -0,0 +1,360 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.helper; + +import com.ifish.bean.Tbl_Device; +import com.ifish.bean.Tbl_Device_Statistics; +import com.ifish.bean.Tbl_Device_User; +import com.ifish.bean.Tbl_Live_Room; +import com.ifish.bean.Tbl_User; +import com.ifish.util.RedisKey; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * + * @author Administrator + */ +@Component +public class RedisKeyHelper implements RedisKeyHelperI { + + @Autowired + private RedisHelperI redisHelperI; + + /** + * 根据phoneNumber获取Tbl_User用户信息的Redis缓存key键值 + * + * @param userId + * @return + */ + @Override + public String getTbl_UserRedisKeyByPhoneNumber(String phoneNumber) { + return RedisKey.USER_PHONE + phoneNumber; + } + + /** + * 根据token获取tbl_user用户信息的redis缓存key键值 + * + * @param token + * @return + */ + @Override + public String getTbl_UserRedisKeyByToken(String token) { + return RedisKey.USER_TOKEN + token; + } + + /** + * 根据Email获取Tbl_User用户信息的Redis缓存key键值 + * + * @param userId + * @return + */ + @Override + public String getTbl_UserRedisKeyByEmail(String email) { + return RedisKey.USER_EMAIL + email; + } + + /** + * 根据userId获取Tbl_User用户信息的Redis缓存key键值 + * + * @param userId + * @return + */ + @Override + public String getTbl_UserRedisKeyByUserId(Integer userId) { + return RedisKey.USER_ID_KEY + userId; + } + + /** + * 根据mac地址获取Tbl_Device的redis缓存key键值 + * + * @param macAddress + * @return + */ + @Override + public String getTbl_DeviceRedisKeyByMacAddress(String macAddress) { + return RedisKey.DEVICE_KEY_MACADDRESS + macAddress; + } + + /** + * 根据摄像头Id获取Tbl_Device的redis缓存key键值 + * + * @param macAddress + * @return + */ + @Override + public String getTbl_CameraRedisKeyByCameraId(String CameraId) { + return RedisKey.DEVICE_KEY_CAMERAID + CameraId; + } + + /** + * 根据Id获取Tbl_Device的redis缓存key键值 + * + * @param macAddress + * @return + */ + @Override + public String getTbl_DeviceRedisKeyByDeviceId(Integer deviceId) { + return RedisKey.DEVICE_KEY_DEVICEID + deviceId; + } + + /** + * 根据设备ID和用户ID获取Tbl_Device_User的redis缓存key键值 + * + * @param userId + * @param deviceId + * @return + */ + @Override + public String getTbl_Device_UserRedisKeyByDeviceIdAndUserId(Integer userId, Integer deviceId) { + return RedisKey.DEVICE_USER_DEVICEID_AND_USERID + "u_" + userId + "_d_" + deviceId; + } + + /** + * 根据设备ID获取Tbl_Device_User(列表)的redis缓存key键值 + * + * @param userId + * @param deviceId + * @return + */ + @Override + public String getListTbl_Device_UserKeyByDeviceId(Integer deviceId) { + return RedisKey.DEVICE_USER_LIST_DEVICEID + deviceId; + } + + /** + * 根据用户ID获取Tbl_Device_User(列表)的redis缓存key键值 + * + * @param userId + * @param deviceId + * @return + */ + @Override + public String getListTbl_Device_UserKeyByUserId(Integer userId) { + return RedisKey.DEVICE_USER_LIST_USERID + userId; + } + + /** + * 根据mac地址获取Tbl_Device_Statistics的redis缓存key键值 + * + * @param macAddress + * @return + */ + @Override + public String getTbl_Device_StatisticsRedisKeyByMacAddress(String macAddress) { + return RedisKey.DEVICE_STATISTICS_MACADDRESS + macAddress; + } + + /** + * 根据Id获取Tbl_Device_Statistics的redis缓存key键值 + * + * @param macAddress + * @return + */ + @Override + public String getTbl_Device_StatisticsRedisKeyByDeviceId(Integer deviceId) { + return RedisKey.DEVICE_STATISTICS_DEVICEID + deviceId; + } + + /** + * 根据typeCode获取Tbl_HardWare_Type的redis缓存key键值 + * + * @param typeCode + * @return + */ + @Override + public String getTbl_HardWare_TypeRedisKeyByTypeCode(String typeCode) { + return RedisKey.HARD_WARE_TYPE + typeCode; + } + + /** + * 根据brandCode获取Tbl_Vender_list的redis缓存key键值 + * + * @param brandCode + * @return + */ + @Override + public String getTbl_Vender_ListRedisKeyByCode(String brandCode) { + return RedisKey.VENDER_CODE + brandCode; + } + + /** + * 根据直播间Id获取Tbl_Live_Room的redis缓存key键值 + * + * @param roomId + * @return + */ + @Override + public String getTbl_Live_RoomRedisKeyByRoomId(Integer roomId) { + return RedisKey.LIVEROOM_ROOMID + roomId; + } + + /** + * 根据用户Id获取Tbl_Live_Room的redis缓存key键值 + * + * @param roomId + * @return + */ + @Override + public String getTbl_Live_RoomRedisKeyByUserId(Integer User) { + return RedisKey.LIVEROOM_USERID + User; + } + + /** + * 根据分页和排序条件获取直播间列表缓存key键值 + * + * @param first + * @param pageSize + * @param orders + * @return + */ + @Override + public String getListTbl_Live_Room_RedisKey(Integer first, Integer pageSize, String orders) { + return RedisKey.LIVEROMM_LIST + "f_" + first + "_p_" + pageSize + "_o_" + orders; + } + + /** + * 获取所有开启直播间总数量的redis缓存key键值 + * + * @return + */ + @Override + + public String getTbl_Live_Room_CountRedisKey() { + return RedisKey.LIVEROOM_COUNT; + } + + /** + * 获取直播间评论列表的redis缓存key键值 + * + * @param roomId + * @return + */ + @Override + public String getTbl_Live_Message(Integer firstResult, Integer pageSize, Integer roomId) { + return RedisKey.LIVEMESSAGE_ROOMID + roomId + "_f_" + firstResult + "_p_" + pageSize; + } + + /** + * 根据pushId获取Tbl_push_list的redis缓存key键值 + * + * @param pushId + * @return + */ + @Override + public String getTbl_Push_List_RedisByPushId(Integer pushId) { + return RedisKey.PUSHLIST_PUSHID + pushId; + } + + /** + * 根据MD5值获取redis缓存key键值 + * + * @param md5 + * @return + */ + @Override + public String getEmailRedisKey(String md5) { + return RedisKey.EMAIL_REGIESTER + md5; + } + + /** + * 删除redis中某个设备详情Tbl_Device的缓存 + * + * @param device + * @return + */ + @Override + public void deleteRedisByTbl_Device(Tbl_Device device) { + if (device.getDeviceId() != null && device.getDeviceId() > 0) { + redisHelperI.deleteRedis(getTbl_DeviceRedisKeyByDeviceId(device.getDeviceId())); + } + if (StringUtils.isNotBlank(device.getMacAddress())) { + redisHelperI.deleteRedis(getTbl_DeviceRedisKeyByMacAddress(device.getMacAddress())); + } + if (StringUtils.isNotBlank(device.getCameraId())) { + redisHelperI.deleteRedis(getTbl_CameraRedisKeyByCameraId(device.getCameraId())); + } + } + + /** + * 删除redis中某个设备统计信息Tbl_Device_Statistics的缓存 + * + * @param device + * @return + */ + @Override + public void deleteRedisByTbl_Device_Statistics(Tbl_Device_Statistics device) { + if (device.getDeviceId() != null && device.getDeviceId() > 0) { + redisHelperI.deleteRedis(getTbl_DeviceRedisKeyByDeviceId(device.getDeviceId())); + } + if (StringUtils.isNotBlank(device.getMacAddress())) { + redisHelperI.deleteRedis(getTbl_DeviceRedisKeyByMacAddress(device.getMacAddress())); + } + } + + /** + * 删除redis中某个设备和用户关系Tbl_Device_User的缓存 + * + * @param tbl_Device_User + */ + @Override + public void deleteRedisByTbl_Device_User(Tbl_Device_User tbl_Device_User) { + if (tbl_Device_User.getDeviceId() != null && tbl_Device_User.getUserId() != null && tbl_Device_User.getDeviceId() > 0 && tbl_Device_User.getUserId() > 0) { + redisHelperI.deleteRedis(getTbl_Device_UserRedisKeyByDeviceIdAndUserId(tbl_Device_User.getUserId(), tbl_Device_User.getDeviceId())); + } + if (tbl_Device_User.getDeviceId() != null && tbl_Device_User.getDeviceId() > 0) { + redisHelperI.deleteRedis(getListTbl_Device_UserKeyByDeviceId(tbl_Device_User.getDeviceId())); + } + } + + /** + * 删除redis中某个用户Tbl_User的缓存 + * + * @param tbl_User + */ + @Override + public void deleteRedisByTbl_User(Tbl_User tbl_User) { + if (tbl_User.getUserId() != null && tbl_User.getUserId() > 0) { + redisHelperI.deleteRedis(getTbl_UserRedisKeyByUserId(tbl_User.getUserId())); + } + if (StringUtils.isNotBlank(tbl_User.getUserEmail())) { + redisHelperI.deleteRedis(getTbl_UserRedisKeyByEmail(tbl_User.getUserEmail())); + } + if (StringUtils.isNotBlank(tbl_User.getPhoneNumber())) { + redisHelperI.deleteRedis(getTbl_UserRedisKeyByPhoneNumber(tbl_User.getPhoneNumber())); + } + if (StringUtils.isNotBlank(tbl_User.getToken())) { + redisHelperI.deleteRedis(getTbl_UserRedisKeyByToken(tbl_User.getToken())); + } + } + + /** + * 删除redis中某个直播间Tbl_Live_Room的缓存 + * + * @param live_Room + */ + @Override + public void deleteRedisByTbl_Live_Room(Tbl_Live_Room live_Room) { + if (live_Room.getRoomId() != null && live_Room.getRoomId() > 0) { + redisHelperI.deleteRedis(getTbl_Live_RoomRedisKeyByRoomId(live_Room.getRoomId())); + } + if (live_Room.getUserId() != null && live_Room.getUserId() > 0) { + redisHelperI.deleteRedis(getTbl_Live_RoomRedisKeyByUserId(live_Room.getUserId())); + } + redisHelperI.deleteRedis(getTbl_Live_Room_CountRedisKey()); + redisHelperI.delRedisByTagKey(RedisKey.LIVEROMM_LIST); + } + + /** + * 删除redis中有直播间总数缓存 + */ + @Override + public void deleteRedisByLiveRoomListCount() { + redisHelperI.deleteRedis(getTbl_Live_Room_CountRedisKey()); + } + +} diff --git a/src/main/java/com/ifish/helper/RedisKeyHelperI.java b/src/main/java/com/ifish/helper/RedisKeyHelperI.java new file mode 100644 index 0000000..04c2967 --- /dev/null +++ b/src/main/java/com/ifish/helper/RedisKeyHelperI.java @@ -0,0 +1,234 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.helper; + +import com.ifish.bean.Tbl_Device; +import com.ifish.bean.Tbl_Device_Statistics; +import com.ifish.bean.Tbl_Device_User; +import com.ifish.bean.Tbl_Live_Room; +import com.ifish.bean.Tbl_User; + +/** + * + * @author Administrator + */ +public interface RedisKeyHelperI { + + /** + * 根据token获取tbl_user用户信息的redis缓存key键值 + * + * @param token + * @return + */ + public String getTbl_UserRedisKeyByToken(String token); + + /** + * 根据userId获取Tbl_User用户信息的Redis缓存key键值 + * + * @param userId + * @return + */ + public String getTbl_UserRedisKeyByUserId(Integer userId); + + /** + * 根据phoneNumber获取Tbl_User用户信息的Redis缓存key键值 + * + * @param userId + * @return + */ + public String getTbl_UserRedisKeyByPhoneNumber(String phoneNumber); + + /** + * 根据Email获取Tbl_User用户信息的Redis缓存key键值 + * + * @param userId + * @return + */ + public String getTbl_UserRedisKeyByEmail(String email); + + /** + * 根据mac地址获取Tbl_Device的redis缓存key键值 + * + * @param macAddress + * @return + */ + public String getTbl_DeviceRedisKeyByMacAddress(String macAddress); + + /** + * 根据摄像头Id获取Tbl_Device的redis缓存key键值 + * + * @param macAddress + * @return + */ + public String getTbl_CameraRedisKeyByCameraId(String CameraId); + + /** + * 根据Id获取Tbl_Device的redis缓存key键值 + * + * @param macAddress + * @return + */ + public String getTbl_DeviceRedisKeyByDeviceId(Integer deviceId); + + /** + * 根据mac地址获取Tbl_Device_Statistics的redis缓存key键值 + * + * @param macAddress + * @return + */ + public String getTbl_Device_StatisticsRedisKeyByMacAddress(String macAddress); + + /** + * 根据Id获取Tbl_Device_Statistics的redis缓存key键值 + * + * @param macAddress + * @return + */ + public String getTbl_Device_StatisticsRedisKeyByDeviceId(Integer deviceId); + + /** + * 根据设备ID和用户ID获取Tbl_Device_User的redis缓存key键值 + * + * @param userId + * @param deviceId + * @return + */ + public String getTbl_Device_UserRedisKeyByDeviceIdAndUserId(Integer userId, Integer deviceId); + + /** + * 根据设备ID获取Tbl_Device_User(列表)的redis缓存key键值 + * + * @param userId + * @param deviceId + * @return + */ + public String getListTbl_Device_UserKeyByDeviceId(Integer deviceId); + + /** + * 根据用户ID获取Tbl_Device_User(列表)的redis缓存key键值 + * + * @param userId + * @param deviceId + * @return + */ + public String getListTbl_Device_UserKeyByUserId(Integer userId); + + /** + * 根据typeCode获取Tbl_HardWare_Type的redis缓存key键值 + * + * @param typeCode + * @return + */ + public String getTbl_HardWare_TypeRedisKeyByTypeCode(String typeCode); + + /** + * 根据brandCode获取Tbl_Vender_list的redis缓存key键值 + * + * @param brandCode + * @return + */ + public String getTbl_Vender_ListRedisKeyByCode(String brandCode); + + /** + * 根据直播间Id获取Tbl_Live_Room的redis缓存key键值 + * + * @param roomId + * @return + */ + public String getTbl_Live_RoomRedisKeyByRoomId(Integer roomId); + + /** + * 根据用户Id获取Tbl_Live_Room的redis缓存key键值 + * + * @param roomId + * @return + */ + public String getTbl_Live_RoomRedisKeyByUserId(Integer User); + + /** + * 根据分页和排序条件获取直播间列表缓存key键值 + * + * @param first + * @param pageSize + * @param orders + * @return + */ + public String getListTbl_Live_Room_RedisKey(Integer first, Integer pageSize, String orders); + + /** + * 获取所有开启直播间总数量的redis缓存key键值 + * + * @return + */ + public String getTbl_Live_Room_CountRedisKey(); + + /** + * 获取直播间评论列表的redis缓存key键值 + * + * @param roomId + * @return + */ + public String getTbl_Live_Message(Integer firstResult, Integer pageSize, Integer roomId); + + /** + * 根据pushId获取Tbl_push_list的redis缓存key键值 + * + * @param pushId + * @return + */ + public String getTbl_Push_List_RedisByPushId(Integer pushId); + + /** + * 根据MD5值获取redis缓存key键值 + * + * @param md5 + * @return + */ + public String getEmailRedisKey(String md5); + + /** + * 删除redis中某个设备详情的缓存 + * + * @param device + * @return + */ + public void deleteRedisByTbl_Device(Tbl_Device device); + + /** + * 删除redis中某个设备统计信息Tbl_Device_Statistics的缓存 + * + * @param device + * @return + */ + public void deleteRedisByTbl_Device_Statistics(Tbl_Device_Statistics device); + + /** + * 删除redis中某个设备和用户关系Tbl_Device_User的缓存 + * + * @param tbl_Device_User + */ + public void deleteRedisByTbl_Device_User(Tbl_Device_User tbl_Device_User); + + /** + * 删除redis中某个用户Tbl_User的缓存 + * + * @param tbl_User + */ + public void deleteRedisByTbl_User(Tbl_User tbl_User); + + /** + * 删除redis中某个直播间Tbl_Live_Room的缓存 + * + * @param live_Room + */ + public void deleteRedisByTbl_Live_Room(Tbl_Live_Room live_Room); + + /** + * 删除redis中有直播间总数缓存 + */ + public void deleteRedisByLiveRoomListCount(); + +} diff --git a/src/main/java/com/ifish/helper/UserHelper.java b/src/main/java/com/ifish/helper/UserHelper.java new file mode 100644 index 0000000..241b481 --- /dev/null +++ b/src/main/java/com/ifish/helper/UserHelper.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.helper; + +import com.ifish.bean.Tbl_Security_User; + +/** + * + * @author Administrator + */ +public interface UserHelper { + + /** + * 根据用户名获取后台管理账户 + * + * @param usernameSring + * @return + */ + public Tbl_Security_User getTbl_Security_User(String usernameSring); +} diff --git a/src/main/java/com/ifish/helper/UserHelperI.java b/src/main/java/com/ifish/helper/UserHelperI.java new file mode 100644 index 0000000..d85cf17 --- /dev/null +++ b/src/main/java/com/ifish/helper/UserHelperI.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.helper; + +import com.ifish.bean.Tbl_Security_User; + +/** + * + * @author Administrator + */ +public class UserHelperI implements UserHelper { + + @Override + public Tbl_Security_User getTbl_Security_User(String usernameSring) { + + + + } + +} diff --git a/src/main/java/com/ifish/util/IfishFilePath.java b/src/main/java/com/ifish/util/IfishFilePath.java new file mode 100644 index 0000000..521c71e --- /dev/null +++ b/src/main/java/com/ifish/util/IfishFilePath.java @@ -0,0 +1,105 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.util; + +import com.ifish.enums.SubDirectoryEnum; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.util.Properties; + +/** + * + * @author Administrator + */ +public class IfishFilePath { + + //头像地址 + public static String path_img; + /** + * 图片头地址 + */ + public static String link_img_head; + //商家图片地址 + public static String path_shops; + //商品介绍图片 + public static String path_commodity; + //微信分享页面 + public static String path_share_html; + //微信分享页图片 + public static String path_share_img; + //看护报告页面 + public static String path_look_html; + //看护报告图片 + public static String path_look_img; + //html名字 + public static String html_name; + //图片上传格式 + public static String check_style; + //云信爱鱼奇官方帐号 + public static String ifish_account; + //IM官方手机号 + public static String netease_phone; + //直播间封面 + public static String path_room_img; + //开发模式 + public static boolean devModel; + + static { + Properties prop = new Properties(); + InputStream in = IfishFilePath.class.getResourceAsStream("/property.properties"); + try { + prop.load(in); + //利用反射机制给属性赋值 + Field[] fields = IfishFilePath.class.getDeclaredFields(); + for (Field field : fields) { + String name = field.getName(); + //获取property.properties的值 + String value = prop.getProperty(name).trim(); + //判断这个值希望塞入的变量类型,并进行转换 + Object value1 = getValue(value, field); + //转换完成后塞入此变量 + field.set(IfishFilePath.class, value1); + + } + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 验证图片格式 + */ + public static String checkImgName(String fileName) { + //对格式进行验证 + int index = fileName.lastIndexOf("."); + String extEndName = fileName.substring(++index, fileName.length()); + if (check_style.indexOf(extEndName.toUpperCase()) == -1) { + return null; + } + //返回格式.png + return "." + extEndName; + } + + /** + * 获取图片链接地址 + * + * @param type + * @return + */ + public static String getPath(SubDirectoryEnum pictureEnum, String fileName) { + return link_img_head + pictureEnum.getKey() + fileName; + } + + private static Object getValue(String value, Field field) { + if (field.getType().equals(int.class)) { + return Integer.valueOf(value); + } else if (field.getType().equals(boolean.class)) { + return Boolean.valueOf(value); + } + return value; + } +} diff --git a/src/main/java/com/ifish/util/JdbcProperties.java b/src/main/java/com/ifish/util/JdbcProperties.java new file mode 100644 index 0000000..9260ea9 --- /dev/null +++ b/src/main/java/com/ifish/util/JdbcProperties.java @@ -0,0 +1,61 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.util; + +import java.io.InputStream; +import java.lang.reflect.Field; +import java.util.Properties; + +/** + * + * @author Administrator + */ +public class JdbcProperties { + + public static String driverClassName; + public static String url; + public static String username; + public static String password; + public static boolean autoCommitOnClose; + public static int initialPoolSize; + public static int minPoolSize; + public static int maxPoolSize; + public static int acquireIncrement; + public static int checkoutTimeout; + public static int maxIdleTime; + public static int idleConnectionTestPeriod; + + static { + Properties prop = new Properties(); + InputStream in = IfishFilePath.class.getResourceAsStream("/jdbc.properties"); + try { + prop.load(in); + //利用反射机制给属性赋值 + Field[] fields = JdbcProperties.class.getDeclaredFields(); + for (Field field : fields) { + String name = field.getName(); + //获取property.properties的值 + String value = prop.getProperty(name).trim(); + //判断这个值希望塞入的变量类型,并进行转换 + Object value1 = getValue(value, field); + //转换完成后塞入此变量 + field.set(IfishFilePath.class, value1); + } + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static Object getValue(String value, Field field) { + if (field.getType().equals(int.class)) { + return Integer.valueOf(value); + } else if (field.getType().equals(boolean.class)) { + return Boolean.valueOf(value); + } + return value; + } +} diff --git a/src/main/java/com/ifish/util/RedisKey.java b/src/main/java/com/ifish/util/RedisKey.java new file mode 100644 index 0000000..0bc4124 --- /dev/null +++ b/src/main/java/com/ifish/util/RedisKey.java @@ -0,0 +1,117 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.ifish.util; + +/** + * + * @author Administrator + */ +public class RedisKey { + + /** + * 用户缓存前缀,以id进行存储 + */ + public static final String USER_ID_KEY = "userE:id_"; + + /** + * 用户缓存前缀,以手机号进行存储 + */ + public static final String USER_PHONE = "userE:ph_"; + /** + * 用户缓存前缀,以邮箱进行存储 + */ + public static final String USER_EMAIL = "userE:ema_"; + + /** + * 用户缓存前缀,以token进行存储 + */ + public static final String USER_TOKEN = "userE:to_"; + + /** + * 设备用户关系缓存前缀,以设备ID和用户ID进行存储 + */ + public static final String DEVICE_USER_DEVICEID_AND_USERID = "deviceUserE:"; + + /** + * 设备用户关系缓存前缀(列表),以设备ID进行存储 + */ + public static final String DEVICE_USER_LIST_DEVICEID = "deviceUserlistE:id_"; + + /** + * 设备用户关系缓存前缀(列表),以用户ID进行存储 + */ + public static final String DEVICE_USER_LIST_USERID = "deviceUserlistE:u_"; + + /** + * 设备详情缓存前缀,以macAddress进行存储 + */ + public static final String DEVICE_KEY_MACADDRESS = "deviceE:mac_"; + + /** + * 设备详情缓存前缀,以deviceId进行存储 + */ + public static final String DEVICE_KEY_DEVICEID = "deviceE:id_"; + + /** + * 设备详情缓存前缀,以摄像头ID进行存储 + */ + public static final String DEVICE_KEY_CAMERAID = "deviceE:cid_"; + + /** + * 设备统计信息表缓存前缀,以deviceId为前缀 + */ + public static final String DEVICE_STATISTICS_DEVICEID = "devicestatiE:id_"; + + /** + * 设备统计信息表缓存前缀,以mac地址为前缀 + */ + public static final String DEVICE_STATISTICS_MACADDRESS = "devicestatiE:mac_"; + + /** + * 设备类型缓存前缀 + */ + public static final String HARD_WARE_TYPE = "hardwaretypeE:"; + + /** + * 鱼缸厂统计表缓存前缀,以鱼缸场代码进行存储 + */ + public static final String VENDER_CODE = "tblvenderE:code_"; + + /** + * 直播间详情表缓存前缀,以直播间ID进行存储 + */ + public static final String LIVEROOM_ROOMID = "liveroomE:id_"; + + /** + * 直播间详情表缓存前缀,以直播间ID进行存储 + */ + public static final String LIVEROOM_USERID = "liveroomE:uid_"; + + /** + * 直播间列表缓存前缀,以分页和排序条件进行存储 + */ + public static final String LIVEROMM_LIST = "liveroomlistE:"; + + /** + * 所有开启的直播间缓存总数 + */ + public static final String LIVEROOM_COUNT = "liveroomE:num_"; + + /** + * 指定直播间评论列表 + */ + public static final String LIVEMESSAGE_ROOMID = "livemessageE:rid_"; + + /** + * 推送信息表缓存前缀,以推送Id进行存储 + */ + public static final String PUSHLIST_PUSHID = "pushlistE:id_"; + + /** + * 邮箱验证有效缓存key + */ + public static final String EMAIL_REGIESTER = "emailkeyE:"; +} diff --git a/src/main/resources/fdfs_client_ifish7.conf b/src/main/resources/fdfs_client_ifish7.conf new file mode 100644 index 0000000..9661bfb --- /dev/null +++ b/src/main/resources/fdfs_client_ifish7.conf @@ -0,0 +1,7 @@ +connect_timeout = 2 +network_timeout = 30 +charset = UTF-8 +http.tracker_http_port = 85 +http.anti_steal_token = no +http.secret_key = FastDFS1234567890 +tracker_server = 120.55.190.56:22131 \ No newline at end of file diff --git a/src/main/resources/fdfs_client_zhangxinyanv5.conf b/src/main/resources/fdfs_client_zhangxinyanv5.conf new file mode 100644 index 0000000..6a88c9e --- /dev/null +++ b/src/main/resources/fdfs_client_zhangxinyanv5.conf @@ -0,0 +1,8 @@ +connect_timeout = 2 +network_timeout = 30 +charset = UTF-8 +http.tracker_http_port = 8017 +http.anti_steal_token = no +http.secret_key = FastDFS1234567890 +tracker_server = 139.196.24.156:22122 + diff --git a/src/main/resources/jdbc.properties b/src/main/resources/jdbc.properties new file mode 100644 index 0000000..1b38a52 --- /dev/null +++ b/src/main/resources/jdbc.properties @@ -0,0 +1,40 @@ +#c3p0.driverClassName=com.mysql.jdbc.Driver +#c3p0.url=jdbc\:mysql\://localhost\:3306/myfishdbenglish?characterEncoding\=UTF-8 +#c3p0.username=ifish +#c3p0.password=ifish7pwd +#c3p0.autoCommitOnClose=true +#c3p0.initialPoolSize=20 +#c3p0.minPoolSize=20 +#c3p0.maxPoolSize=50 +#c3p0.acquireIncrement=3 + +#c3p0.checkoutTimeout=5000 +#c3p0.maxIdleTime=7200 +#c3p0.idleConnectionTestPeriod=18000 +#c3p0.maxIdleTimeExcessConnections=1800 + +#c3p0.automaticTestTable=C3P0TestTable +#c3p0.testConnectionOnCheckout=false +#c3p0.testConnectionOnCheckin=false + +#\u8fd9\u91cc\u662f\u4e0a\u9762\u53d6\u6d88\u524d\u7f00\u7684\u5f15\u7528,\u5982\u679c\u4fee\u6539\uff0c\u8bf7\u4fee\u6539\u8fd9\u91cc +driverClassName=com.mysql.jdbc.Driver +url=jdbc\:mysql\://localhost\:3306/myfishdbenglish?characterEncoding\=UTF-8 +username=ifish +password=ifish7pwd +autoCommitOnClose=true +initialPoolSize=20 +minPoolSize=20 +maxPoolSize=50 +acquireIncrement=3 +checkoutTimeout=5000 +maxIdleTime=7200 +idleConnectionTestPeriod=18000 + +#org.hibernate.dialect.MySQLInnoDBDialect +hibernate.dialect=org.hibernate.dialect.MySQLDialect +hibernate.show_sql=false +hibernate.format_sql=true +hibernate.hbm2ddl.auto=false +hibernate.jdbc.batch_size=50 +hibernate.query.substitutions=true 1,false 0 diff --git a/src/main/resources/property.properties b/src/main/resources/property.properties new file mode 100644 index 0000000..7c9f526 --- /dev/null +++ b/src/main/resources/property.properties @@ -0,0 +1,32 @@ +#\u5934\u50cf\u5b58\u50a8\u8def\u5f84 +path_img=/mydata/tmp/Img/app +#\u5546\u5bb6\u8ba4\u8bc1\u56fe\u7247 +path_shops=/mydata/tmp/Img/shops +#\u5546\u54c1\u4ecb\u7ecd\u56fe\u7247 +path_commodity=/mydata/tmp/Img/commodity +#\u76f4\u64ad\u95f4\u5c01\u9762 +path_room_img=/mydata/tmp/Img/room +#\u5fae\u4fe1\u5206\u4eab\u9875\u9762 +path_share_html=/mydata/tmp/html/ +#\u5fae\u4fe1\u5206\u4eab\u9875\u56fe\u7247 +path_share_img=/mydata/tmp/html/images/share +#\u770b\u62a4\u62a5\u544a\u9875\u9762 +path_look_html=/mydata/tmp/look/ +#\u770b\u62a4\u62a5\u544a\u56fe\u7247 +path_look_img=/mydata/tmp/look/images/share +#\u770b\u62a4\u62a5\u544a\u6a21\u7248html\u540d\u5b57 +html_name=index.html +#\u4e91\u4fe1\u7231\u9c7c\u5947\u5b98\u65b9\u5e10\u53f7 +ifish_account=ifish +#IM\u5b98\u65b9\u624b\u673a\u53f7 +netease_phone=18501773036 +#\u672c\u5730 +#link_img_head=http://192.168.61.128:81/ +#\u6d4b\u8bd5\u73af\u5883 +link_img_head=http://139.196.24.156:83/ +#\u6b63\u5f0f\u73af\u5883 +#link_img_head=https://app.ifish7.com/ +#\u56fe\u7247\u683c\u5f0f\u9a8c\u8bc1 +check_style=GIF,PNG,BMP,JPG,JPEG +#\u662f\u5426\u5f00\u53d1\u6a21\u5f0f\uff0cfalse\u5219\u4ee3\u8868\u8981\u53d1\u5e03\u5230\u6d4b\u8bd5\u6216\u8005\u6b63\u5f0f\u73af\u5883\uff0c\u4f1a\u8fdb\u884c\u5168\u5c40\u5934\u90e8\u9a8c\u8bc1\uff0ctrue\u4ee3\u8868\u5728\u672c\u5730\u8fdb\u884c\u4ee3\u7801\u7f16\u5199\uff0c\u4e0d\u4f1a\u8fdb\u884c\u9a8c\u8bc1 +devModel=true \ No newline at end of file diff --git a/src/main/webapp/META-INF/context.xml b/src/main/webapp/META-INF/context.xml new file mode 100644 index 0000000..de4388d --- /dev/null +++ b/src/main/webapp/META-INF/context.xml @@ -0,0 +1,2 @@ + + diff --git a/src/main/webapp/WEB-INF/lib/fastdfs-client-java-1.25.jar b/src/main/webapp/WEB-INF/lib/fastdfs-client-java-1.25.jar new file mode 100644 index 0000000..74adb92 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/fastdfs-client-java-1.25.jar differ diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp new file mode 100644 index 0000000..b6b1ad9 --- /dev/null +++ b/src/main/webapp/index.jsp @@ -0,0 +1,87 @@ +<%@page contentType="text/html" pageEncoding="UTF-8"%> + + + + + + 爱鱼奇-登录 + + + + + + + + + + + + +
+
+
+
+
+
+

+ 爱鱼奇

+
+
+
+
+ +
+
+

+ 后台管理系统

+
+

+ 爱鱼奇合作伙伴登录

+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+   +
+
+ 忘记密码   + +
+
+
+
+
+
+
+
+
+

+ +

+
+
+ + + diff --git a/src/main/webapp/static/family.css b/src/main/webapp/static/family.css new file mode 100644 index 0000000..e50db93 --- /dev/null +++ b/src/main/webapp/static/family.css @@ -0,0 +1,97 @@ + +/* cyrillic */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 300; + src: local('Oswald Light'), local('Oswald-Light'), url(http://fonts.gstatic.com/s/oswald/v13/WDQRONh0ieLkzMd4njMkJBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 300; + src: local('Oswald Light'), local('Oswald-Light'), url(http://fonts.gstatic.com/s/oswald/v13/qlwg-kjAsZDGqOniRm96VBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 300; + src: local('Oswald Light'), local('Oswald-Light'), url(http://fonts.gstatic.com/s/oswald/v13/l1cOQ90roY9yC7voEhngDBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 300; + src: local('Oswald Light'), local('Oswald-Light'), url(http://fonts.gstatic.com/s/oswald/v13/HqHm7BVC_nzzTui2lzQTDVtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 400; + src: local('Oswald Regular'), local('Oswald-Regular'), url(http://fonts.gstatic.com/s/oswald/v13/DgBpgaYycijFA8v2hNt7MfesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 400; + src: local('Oswald Regular'), local('Oswald-Regular'), url(http://fonts.gstatic.com/s/oswald/v13/peRd8sj511qE2lHtK-QfcPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 400; + src: local('Oswald Regular'), local('Oswald-Regular'), url(http://fonts.gstatic.com/s/oswald/v13/yg0glPPxXUISnKUejCX4qfesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 400; + src: local('Oswald Regular'), local('Oswald-Regular'), url(http://fonts.gstatic.com/s/oswald/v13/pEobIV_lL25TKBpqVI_a2w.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 700; + src: local('Oswald Bold'), local('Oswald-Bold'), url(http://fonts.gstatic.com/s/oswald/v13/smkSb2csQFrK-wxLDSe5RxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 700; + src: local('Oswald Bold'), local('Oswald-Bold'), url(http://fonts.gstatic.com/s/oswald/v13/69aXBpgQONjr_rHWADjBuRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 700; + src: local('Oswald Bold'), local('Oswald-Bold'), url(http://fonts.gstatic.com/s/oswald/v13/dI-qzxlKVQA6TUC5RKSb3xJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Oswald'; + font-style: normal; + font-weight: 700; + src: local('Oswald Bold'), local('Oswald-Bold'), url(http://fonts.gstatic.com/s/oswald/v13/bH7276GfdCjMjApa_dkG6VtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} \ No newline at end of file diff --git a/src/main/webapp/static/familyopen.css b/src/main/webapp/static/familyopen.css new file mode 100644 index 0000000..483c991 --- /dev/null +++ b/src/main/webapp/static/familyopen.css @@ -0,0 +1,336 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(http://fonts.gstatic.com/s/opensans/v14/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(http://fonts.gstatic.com/s/opensans/v14/RjgO7rYTmqiVp7vzi-Q5URJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(http://fonts.gstatic.com/s/opensans/v14/LWCjsQkB6EMdfHrEVqA1KRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(http://fonts.gstatic.com/s/opensans/v14/xozscpT2726on7jbcb_pAhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(http://fonts.gstatic.com/s/opensans/v14/59ZRklaO5bWGqF5A9baEERJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(http://fonts.gstatic.com/s/opensans/v14/u-WUoqrET9fUeobQW7jkRRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(http://fonts.gstatic.com/s/opensans/v14/cJZKeOuBrn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v14/k3k702ZOKiLJc3WVjuplzK-j2U0lmluP9RWlSytm3ho.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v14/k3k702ZOKiLJc3WVjuplzJX5f-9o1vgP2EXwfjgl7AY.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v14/k3k702ZOKiLJc3WVjuplzBWV49_lSm1NYrwo-zkhivY.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v14/k3k702ZOKiLJc3WVjuplzKaRobkAwv3vxw3jMhVENGA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v14/k3k702ZOKiLJc3WVjuplzP8zf_FOSsgRmwsS7Aa9k2w.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v14/k3k702ZOKiLJc3WVjuplzD0LW-43aMEzIO6XUTLjad8.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v14/k3k702ZOKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(http://fonts.gstatic.com/s/opensans/v14/EInbV5DfGHOiMmvb1Xr-hq-j2U0lmluP9RWlSytm3ho.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(http://fonts.gstatic.com/s/opensans/v14/EInbV5DfGHOiMmvb1Xr-hpX5f-9o1vgP2EXwfjgl7AY.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(http://fonts.gstatic.com/s/opensans/v14/EInbV5DfGHOiMmvb1Xr-hhWV49_lSm1NYrwo-zkhivY.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(http://fonts.gstatic.com/s/opensans/v14/EInbV5DfGHOiMmvb1Xr-hqaRobkAwv3vxw3jMhVENGA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(http://fonts.gstatic.com/s/opensans/v14/EInbV5DfGHOiMmvb1Xr-hv8zf_FOSsgRmwsS7Aa9k2w.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(http://fonts.gstatic.com/s/opensans/v14/EInbV5DfGHOiMmvb1Xr-hj0LW-43aMEzIO6XUTLjad8.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(http://fonts.gstatic.com/s/opensans/v14/EInbV5DfGHOiMmvb1Xr-hugdm0LZdjqr5-oayXSOefg.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://fonts.gstatic.com/s/opensans/v14/xjAJXh38I15wypJXxuGMBjTOQ_MqJVwkKsUn0wKzc2I.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://fonts.gstatic.com/s/opensans/v14/xjAJXh38I15wypJXxuGMBjUj_cnvWIuuBMVgbX098Mw.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://fonts.gstatic.com/s/opensans/v14/xjAJXh38I15wypJXxuGMBkbcKLIaa1LC45dFaAfauRA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://fonts.gstatic.com/s/opensans/v14/xjAJXh38I15wypJXxuGMBmo_sUJ8uO4YLWRInS22T3Y.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://fonts.gstatic.com/s/opensans/v14/xjAJXh38I15wypJXxuGMBr6up8jxqWt8HVA3mDhkV_0.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://fonts.gstatic.com/s/opensans/v14/xjAJXh38I15wypJXxuGMBiYE0-AqJ3nfInTTiDXDjU4.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://fonts.gstatic.com/s/opensans/v14/xjAJXh38I15wypJXxuGMBo4P5ICox8Kq3LLUNMylGO4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxp6iIh_FvlUHQwED9Yt5Kbw.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxi_vZmeiCMnoWNN9rHBYaTc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxiFaMxiho_5XQnyRZzQsrZs.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxgalQocB-__pDVGhF3uS2Ks.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxmhQUTDJGru-0vvUpABgH8I.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxujkDdvhIIFj_YMdgqpnSB0.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxolIZu-HDpmDIZMigmsroc4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxiU8QAtQT9M0M1_mbVWrUPc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxkNaUOL0oYRolx8sebiIY9k.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxooGEx1DzoxsbCRd2IM2afI.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxnPzCMEhbIaaYiFY6KPniws.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxmqi69zMYkLa7XwlUIemKB4.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxowYyzpnB4tyYboSwKGmD2g.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(http://fonts.gstatic.com/s/opensans/v14/PRmiXeptR36kaC0GEAetxnibbpXgLHK_uTT48UMyjSM.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} \ No newline at end of file diff --git a/src/main/webapp/static/fonts/FontAwesome.otf b/src/main/webapp/static/fonts/FontAwesome.otf new file mode 100644 index 0000000..3461e3f Binary files /dev/null and b/src/main/webapp/static/fonts/FontAwesome.otf differ diff --git a/src/main/webapp/static/fonts/fontawesome-webfont.eot b/src/main/webapp/static/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..6cfd566 Binary files /dev/null and b/src/main/webapp/static/fonts/fontawesome-webfont.eot differ diff --git a/src/main/webapp/static/fonts/fontawesome-webfont.svg b/src/main/webapp/static/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..a9f8469 --- /dev/null +++ b/src/main/webapp/static/fonts/fontawesome-webfont.svg @@ -0,0 +1,504 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/static/fonts/fontawesome-webfont.ttf b/src/main/webapp/static/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..5cd6cff Binary files /dev/null and b/src/main/webapp/static/fonts/fontawesome-webfont.ttf differ diff --git a/src/main/webapp/static/fonts/fontawesome-webfont.woff b/src/main/webapp/static/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..9eaecb3 Binary files /dev/null and b/src/main/webapp/static/fonts/fontawesome-webfont.woff differ diff --git a/src/main/webapp/static/images/avatar/128.jpg b/src/main/webapp/static/images/avatar/128.jpg new file mode 100644 index 0000000..8701b28 Binary files /dev/null and b/src/main/webapp/static/images/avatar/128.jpg differ diff --git a/src/main/webapp/static/images/avatar/48.jpg b/src/main/webapp/static/images/avatar/48.jpg new file mode 100644 index 0000000..e41c9d1 Binary files /dev/null and b/src/main/webapp/static/images/avatar/48.jpg differ diff --git a/src/main/webapp/static/images/avatar/profile-pic.png b/src/main/webapp/static/images/avatar/profile-pic.png new file mode 100644 index 0000000..50ef657 Binary files /dev/null and b/src/main/webapp/static/images/avatar/profile-pic.png differ diff --git a/src/main/webapp/static/images/bg/1.jpg b/src/main/webapp/static/images/bg/1.jpg new file mode 100644 index 0000000..d9bc257 Binary files /dev/null and b/src/main/webapp/static/images/bg/1.jpg differ diff --git a/src/main/webapp/static/images/bg/2.jpg b/src/main/webapp/static/images/bg/2.jpg new file mode 100644 index 0000000..250b779 Binary files /dev/null and b/src/main/webapp/static/images/bg/2.jpg differ diff --git a/src/main/webapp/static/images/bg/3.jpg b/src/main/webapp/static/images/bg/3.jpg new file mode 100644 index 0000000..9d16c0e Binary files /dev/null and b/src/main/webapp/static/images/bg/3.jpg differ diff --git a/src/main/webapp/static/images/bg/bg.png b/src/main/webapp/static/images/bg/bg.png new file mode 100644 index 0000000..75e50e8 Binary files /dev/null and b/src/main/webapp/static/images/bg/bg.png differ diff --git a/src/main/webapp/static/images/bg/bg1.png b/src/main/webapp/static/images/bg/bg1.png new file mode 100644 index 0000000..f49236f Binary files /dev/null and b/src/main/webapp/static/images/bg/bg1.png differ diff --git a/src/main/webapp/static/images/bg/login-background.png b/src/main/webapp/static/images/bg/login-background.png new file mode 100644 index 0000000..0fb681a Binary files /dev/null and b/src/main/webapp/static/images/bg/login-background.png differ diff --git a/src/main/webapp/static/images/blogs/1.jpg b/src/main/webapp/static/images/blogs/1.jpg new file mode 100644 index 0000000..8a7391c Binary files /dev/null and b/src/main/webapp/static/images/blogs/1.jpg differ diff --git a/src/main/webapp/static/images/blogs/10.jpg b/src/main/webapp/static/images/blogs/10.jpg new file mode 100644 index 0000000..0a7d181 Binary files /dev/null and b/src/main/webapp/static/images/blogs/10.jpg differ diff --git a/src/main/webapp/static/images/blogs/11.jpg b/src/main/webapp/static/images/blogs/11.jpg new file mode 100644 index 0000000..8a7391c Binary files /dev/null and b/src/main/webapp/static/images/blogs/11.jpg differ diff --git a/src/main/webapp/static/images/blogs/12.jpg b/src/main/webapp/static/images/blogs/12.jpg new file mode 100644 index 0000000..b3961ec Binary files /dev/null and b/src/main/webapp/static/images/blogs/12.jpg differ diff --git a/src/main/webapp/static/images/blogs/2.jpg b/src/main/webapp/static/images/blogs/2.jpg new file mode 100644 index 0000000..0d03c9a Binary files /dev/null and b/src/main/webapp/static/images/blogs/2.jpg differ diff --git a/src/main/webapp/static/images/blogs/3.jpg b/src/main/webapp/static/images/blogs/3.jpg new file mode 100644 index 0000000..b3961ec Binary files /dev/null and b/src/main/webapp/static/images/blogs/3.jpg differ diff --git a/src/main/webapp/static/images/blogs/4.jpg b/src/main/webapp/static/images/blogs/4.jpg new file mode 100644 index 0000000..0a7d181 Binary files /dev/null and b/src/main/webapp/static/images/blogs/4.jpg differ diff --git a/src/main/webapp/static/images/blogs/5.jpg b/src/main/webapp/static/images/blogs/5.jpg new file mode 100644 index 0000000..0d03c9a Binary files /dev/null and b/src/main/webapp/static/images/blogs/5.jpg differ diff --git a/src/main/webapp/static/images/blogs/6.jpg b/src/main/webapp/static/images/blogs/6.jpg new file mode 100644 index 0000000..0a7d181 Binary files /dev/null and b/src/main/webapp/static/images/blogs/6.jpg differ diff --git a/src/main/webapp/static/images/blogs/7.jpg b/src/main/webapp/static/images/blogs/7.jpg new file mode 100644 index 0000000..b3961ec Binary files /dev/null and b/src/main/webapp/static/images/blogs/7.jpg differ diff --git a/src/main/webapp/static/images/blogs/8.jpg b/src/main/webapp/static/images/blogs/8.jpg new file mode 100644 index 0000000..8a7391c Binary files /dev/null and b/src/main/webapp/static/images/blogs/8.jpg differ diff --git a/src/main/webapp/static/images/blogs/9.jpg b/src/main/webapp/static/images/blogs/9.jpg new file mode 100644 index 0000000..0d03c9a Binary files /dev/null and b/src/main/webapp/static/images/blogs/9.jpg differ diff --git a/src/main/webapp/static/images/blogs/blog_item1.jpg b/src/main/webapp/static/images/blogs/blog_item1.jpg new file mode 100644 index 0000000..44d8e00 Binary files /dev/null and b/src/main/webapp/static/images/blogs/blog_item1.jpg differ diff --git a/src/main/webapp/static/images/gallery/1.jpg b/src/main/webapp/static/images/gallery/1.jpg new file mode 100644 index 0000000..ef2dbef Binary files /dev/null and b/src/main/webapp/static/images/gallery/1.jpg differ diff --git a/src/main/webapp/static/images/gallery/10.jpg b/src/main/webapp/static/images/gallery/10.jpg new file mode 100644 index 0000000..af4e817 Binary files /dev/null and b/src/main/webapp/static/images/gallery/10.jpg differ diff --git a/src/main/webapp/static/images/gallery/11.jpg b/src/main/webapp/static/images/gallery/11.jpg new file mode 100644 index 0000000..ef2dbef Binary files /dev/null and b/src/main/webapp/static/images/gallery/11.jpg differ diff --git a/src/main/webapp/static/images/gallery/12.jpg b/src/main/webapp/static/images/gallery/12.jpg new file mode 100644 index 0000000..b3961ec Binary files /dev/null and b/src/main/webapp/static/images/gallery/12.jpg differ diff --git a/src/main/webapp/static/images/gallery/2.jpg b/src/main/webapp/static/images/gallery/2.jpg new file mode 100644 index 0000000..0d03c9a Binary files /dev/null and b/src/main/webapp/static/images/gallery/2.jpg differ diff --git a/src/main/webapp/static/images/gallery/3.jpg b/src/main/webapp/static/images/gallery/3.jpg new file mode 100644 index 0000000..b3961ec Binary files /dev/null and b/src/main/webapp/static/images/gallery/3.jpg differ diff --git a/src/main/webapp/static/images/gallery/4.jpg b/src/main/webapp/static/images/gallery/4.jpg new file mode 100644 index 0000000..0a7d181 Binary files /dev/null and b/src/main/webapp/static/images/gallery/4.jpg differ diff --git a/src/main/webapp/static/images/gallery/5.jpg b/src/main/webapp/static/images/gallery/5.jpg new file mode 100644 index 0000000..0d03c9a Binary files /dev/null and b/src/main/webapp/static/images/gallery/5.jpg differ diff --git a/src/main/webapp/static/images/gallery/6.jpg b/src/main/webapp/static/images/gallery/6.jpg new file mode 100644 index 0000000..af4e817 Binary files /dev/null and b/src/main/webapp/static/images/gallery/6.jpg differ diff --git a/src/main/webapp/static/images/gallery/7.jpg b/src/main/webapp/static/images/gallery/7.jpg new file mode 100644 index 0000000..b3961ec Binary files /dev/null and b/src/main/webapp/static/images/gallery/7.jpg differ diff --git a/src/main/webapp/static/images/gallery/8.jpg b/src/main/webapp/static/images/gallery/8.jpg new file mode 100644 index 0000000..ef2dbef Binary files /dev/null and b/src/main/webapp/static/images/gallery/8.jpg differ diff --git a/src/main/webapp/static/images/gallery/9.jpg b/src/main/webapp/static/images/gallery/9.jpg new file mode 100644 index 0000000..0d03c9a Binary files /dev/null and b/src/main/webapp/static/images/gallery/9.jpg differ diff --git a/src/main/webapp/static/images/gallery/blog_item1.jpg b/src/main/webapp/static/images/gallery/blog_item1.jpg new file mode 100644 index 0000000..44d8e00 Binary files /dev/null and b/src/main/webapp/static/images/gallery/blog_item1.jpg differ diff --git a/src/main/webapp/static/images/icons/loading.gif b/src/main/webapp/static/images/icons/loading.gif new file mode 100644 index 0000000..ddb7ff1 Binary files /dev/null and b/src/main/webapp/static/images/icons/loading.gif differ diff --git a/src/main/webapp/static/images/thumbs/arch-1.jpg b/src/main/webapp/static/images/thumbs/arch-1.jpg new file mode 100644 index 0000000..d124a34 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/arch-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/arch-2.jpg b/src/main/webapp/static/images/thumbs/arch-2.jpg new file mode 100644 index 0000000..f3f457b Binary files /dev/null and b/src/main/webapp/static/images/thumbs/arch-2.jpg differ diff --git a/src/main/webapp/static/images/thumbs/autumn-1.jpg b/src/main/webapp/static/images/thumbs/autumn-1.jpg new file mode 100644 index 0000000..7bf34e5 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/autumn-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/boats-1.jpg b/src/main/webapp/static/images/thumbs/boats-1.jpg new file mode 100644 index 0000000..cb1f102 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/boats-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/book-1.jpg b/src/main/webapp/static/images/thumbs/book-1.jpg new file mode 100644 index 0000000..04f3e13 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/book-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/business-1.jpg b/src/main/webapp/static/images/thumbs/business-1.jpg new file mode 100644 index 0000000..b47c113 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/business-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/calendar-1.jpg b/src/main/webapp/static/images/thumbs/calendar-1.jpg new file mode 100644 index 0000000..40a164e Binary files /dev/null and b/src/main/webapp/static/images/thumbs/calendar-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/car-1.jpg b/src/main/webapp/static/images/thumbs/car-1.jpg new file mode 100644 index 0000000..e973519 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/car-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/christmas-1.jpg b/src/main/webapp/static/images/thumbs/christmas-1.jpg new file mode 100644 index 0000000..c413ca2 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/christmas-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/christmas-2.jpg b/src/main/webapp/static/images/thumbs/christmas-2.jpg new file mode 100644 index 0000000..12e4bc9 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/christmas-2.jpg differ diff --git a/src/main/webapp/static/images/thumbs/christmas-3.jpg b/src/main/webapp/static/images/thumbs/christmas-3.jpg new file mode 100644 index 0000000..055a59b Binary files /dev/null and b/src/main/webapp/static/images/thumbs/christmas-3.jpg differ diff --git a/src/main/webapp/static/images/thumbs/city-1.jpg b/src/main/webapp/static/images/thumbs/city-1.jpg new file mode 100644 index 0000000..c264244 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/city-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/city-2.jpg b/src/main/webapp/static/images/thumbs/city-2.jpg new file mode 100644 index 0000000..847ee65 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/city-2.jpg differ diff --git a/src/main/webapp/static/images/thumbs/coffee-grass.jpg b/src/main/webapp/static/images/thumbs/coffee-grass.jpg new file mode 100644 index 0000000..f83f2bc Binary files /dev/null and b/src/main/webapp/static/images/thumbs/coffee-grass.jpg differ diff --git a/src/main/webapp/static/images/thumbs/coins.jpg b/src/main/webapp/static/images/thumbs/coins.jpg new file mode 100644 index 0000000..b2ef265 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/coins.jpg differ diff --git a/src/main/webapp/static/images/thumbs/crayons.jpg b/src/main/webapp/static/images/thumbs/crayons.jpg new file mode 100644 index 0000000..d204359 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/crayons.jpg differ diff --git a/src/main/webapp/static/images/thumbs/cupcakes.jpg b/src/main/webapp/static/images/thumbs/cupcakes.jpg new file mode 100644 index 0000000..04fbe53 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/cupcakes.jpg differ diff --git a/src/main/webapp/static/images/thumbs/eggs-nest.jpg b/src/main/webapp/static/images/thumbs/eggs-nest.jpg new file mode 100644 index 0000000..d70d200 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/eggs-nest.jpg differ diff --git a/src/main/webapp/static/images/thumbs/flower-1.jpg b/src/main/webapp/static/images/thumbs/flower-1.jpg new file mode 100644 index 0000000..5ce75de Binary files /dev/null and b/src/main/webapp/static/images/thumbs/flower-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/flower-2.jpg b/src/main/webapp/static/images/thumbs/flower-2.jpg new file mode 100644 index 0000000..aea7d1d Binary files /dev/null and b/src/main/webapp/static/images/thumbs/flower-2.jpg differ diff --git a/src/main/webapp/static/images/thumbs/flower-3.jpg b/src/main/webapp/static/images/thumbs/flower-3.jpg new file mode 100644 index 0000000..a4bf086 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/flower-3.jpg differ diff --git a/src/main/webapp/static/images/thumbs/fountain.jpg b/src/main/webapp/static/images/thumbs/fountain.jpg new file mode 100644 index 0000000..a40754d Binary files /dev/null and b/src/main/webapp/static/images/thumbs/fountain.jpg differ diff --git a/src/main/webapp/static/images/thumbs/leaves.jpg b/src/main/webapp/static/images/thumbs/leaves.jpg new file mode 100644 index 0000000..30476f7 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/leaves.jpg differ diff --git a/src/main/webapp/static/images/thumbs/lichterman.jpg b/src/main/webapp/static/images/thumbs/lichterman.jpg new file mode 100644 index 0000000..ea8c177 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/lichterman.jpg differ diff --git a/src/main/webapp/static/images/thumbs/pinecone.jpg b/src/main/webapp/static/images/thumbs/pinecone.jpg new file mode 100644 index 0000000..838e65e Binary files /dev/null and b/src/main/webapp/static/images/thumbs/pinecone.jpg differ diff --git a/src/main/webapp/static/images/thumbs/river-1.jpg b/src/main/webapp/static/images/thumbs/river-1.jpg new file mode 100644 index 0000000..001f712 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/river-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/river-2.jpg b/src/main/webapp/static/images/thumbs/river-2.jpg new file mode 100644 index 0000000..c2dc0ca Binary files /dev/null and b/src/main/webapp/static/images/thumbs/river-2.jpg differ diff --git a/src/main/webapp/static/images/thumbs/sunset-1.jpg b/src/main/webapp/static/images/thumbs/sunset-1.jpg new file mode 100644 index 0000000..6a44a95 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/sunset-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/tree.jpg b/src/main/webapp/static/images/thumbs/tree.jpg new file mode 100644 index 0000000..dbb1fa4 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/tree.jpg differ diff --git a/src/main/webapp/static/images/thumbs/winter-1.jpg b/src/main/webapp/static/images/thumbs/winter-1.jpg new file mode 100644 index 0000000..93a20b2 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/winter-1.jpg differ diff --git a/src/main/webapp/static/images/thumbs/winter-2.jpg b/src/main/webapp/static/images/thumbs/winter-2.jpg new file mode 100644 index 0000000..df8e5b2 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/winter-2.jpg differ diff --git a/src/main/webapp/static/images/thumbs/winter-sun.jpg b/src/main/webapp/static/images/thumbs/winter-sun.jpg new file mode 100644 index 0000000..ef8417a Binary files /dev/null and b/src/main/webapp/static/images/thumbs/winter-sun.jpg differ diff --git a/src/main/webapp/static/images/thumbs/woodstump.jpg b/src/main/webapp/static/images/thumbs/woodstump.jpg new file mode 100644 index 0000000..2e799c6 Binary files /dev/null and b/src/main/webapp/static/images/thumbs/woodstump.jpg differ diff --git a/src/main/webapp/static/script/animation.js b/src/main/webapp/static/script/animation.js new file mode 100644 index 0000000..35ff5f5 --- /dev/null +++ b/src/main/webapp/static/script/animation.js @@ -0,0 +1,9 @@ +$(document).ready(function(){ + $.cookie('animations','bounce'); + $('#change-transitions button').click(function() { + $("body").removeClass($.cookie('animations')); + var ani = $(this).attr('data-value'); + $("body").addClass("animated " + ani); + $.cookie('animations', ani); + }); +}); \ No newline at end of file diff --git a/src/main/webapp/static/script/bootstrap-hover-dropdown.js b/src/main/webapp/static/script/bootstrap-hover-dropdown.js new file mode 100644 index 0000000..5feb177 --- /dev/null +++ b/src/main/webapp/static/script/bootstrap-hover-dropdown.js @@ -0,0 +1,90 @@ +/* + * Project: Twitter Bootstrap Hover Dropdown + * Author: Cameron Spear + * Contributors: Mattia Larentis + * + * Dependencies: Bootstrap's Dropdown plugin, jQuery + * + * A simple plugin to enable Bootstrap dropdowns to active on hover and provide a nice user experience. + * + * License: MIT + * + * http://cameronspear.com/blog/twitter-bootstrap-dropdown-on-hover-plugin/ + */ +;(function($, window, undefined) { + // outside the scope of the jQuery plugin to + // keep track of all dropdowns + var $allDropdowns = $(); + + // if instantlyCloseOthers is true, then it will instantly + // shut other nav items when a new one is hovered over + $.fn.dropdownHover = function(options) { + + // the element we really care about + // is the dropdown-toggle's parent + $allDropdowns = $allDropdowns.add(this.parent()); + + return this.each(function() { + var $this = $(this), + $parent = $this.parent(), + defaults = { + delay: 500, + instantlyCloseOthers: true + }, + data = { + delay: $(this).data('delay'), + instantlyCloseOthers: $(this).data('close-others') + }, + settings = $.extend(true, {}, defaults, options, data), + timeout; + + $parent.hover(function(event) { + // so a neighbor can't open the dropdown + if(!$parent.hasClass('open') && !$this.is(event.target)) { + return true; + } + + if(settings.instantlyCloseOthers === true) + $allDropdowns.removeClass('open'); + + window.clearTimeout(timeout); + $parent.addClass('open'); + }, function() { + timeout = window.setTimeout(function() { + $parent.removeClass('open'); + }, settings.delay); + }); + + // this helps with button groups! + $this.hover(function() { + if(settings.instantlyCloseOthers === true) + $allDropdowns.removeClass('open'); + + window.clearTimeout(timeout); + $parent.addClass('open'); + }); + + // handle submenus + $parent.find('.dropdown-submenu').each(function(){ + var $this = $(this); + var subTimeout; + $this.hover(function() { + window.clearTimeout(subTimeout); + $this.children('.dropdown-menu').show(); + // always close submenu siblings instantly + $this.siblings().children('.dropdown-menu').hide(); + }, function() { + var $submenu = $this.children('.dropdown-menu'); + subTimeout = window.setTimeout(function() { + $submenu.hide(); + }, settings.delay); + }); + }); + }); + }; + + $(document).ready(function() { + // apply dropdownHover to all elements with the data-hover="dropdown" attribute + $('[data-hover="dropdown"]').dropdownHover(); + }); +})(jQuery, this); diff --git a/src/main/webapp/static/script/bootstrap.min.js b/src/main/webapp/static/script/bootstrap.min.js new file mode 100644 index 0000000..b04a0e8 --- /dev/null +++ b/src/main/webapp/static/script/bootstrap.min.js @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); \ No newline at end of file diff --git a/src/main/webapp/static/script/charts-chartjs.js b/src/main/webapp/static/script/charts-chartjs.js new file mode 100644 index 0000000..b292dff --- /dev/null +++ b/src/main/webapp/static/script/charts-chartjs.js @@ -0,0 +1,153 @@ +$(function () { + + //BEGIN LINE CHART + var lineChartData = { + labels : ["January","February","March","April","May","June","July"], + datasets : [ + { + fillColor : "rgba(220,220,220,0.5)", + strokeColor : "rgba(220,220,220,1)", + pointColor : "rgba(220,220,220,1)", + pointStrokeColor : "#fff", + data : [65,59,90,81,56,55,40] + }, + { + fillColor : "rgba(151,187,205,0.5)", + strokeColor : "rgba(151,187,205,1)", + pointColor : "rgba(151,187,205,1)", + pointStrokeColor : "#fff", + data : [28,48,40,19,96,27,100] + } + ] + + } + + var myLine = new Chart(document.getElementById("line-chart").getContext("2d")).Line(lineChartData); + //END LINE CHART + + //BEGIN BAR CHART + var barChartData = { + labels : ["January","February","March","April","May","June","July"], + datasets : [ + { + fillColor : "rgba(220,220,220,0.5)", + strokeColor : "rgba(220,220,220,1)", + data : [65,59,90,81,56,55,40] + }, + { + fillColor : "rgba(151,187,205,0.5)", + strokeColor : "rgba(151,187,205,1)", + data : [28,48,40,19,96,27,100] + } + ] + + } + + var myLine = new Chart(document.getElementById("bar-chart").getContext("2d")).Bar(barChartData); + //END BAR CHART + + //BEGIN RADAR CHART + var radarChartData = { + labels : ["Eating","Drinking","Sleeping","Designing","Coding","Partying","Running"], + datasets : [ + { + fillColor : "rgba(220,220,220,0.5)", + strokeColor : "rgba(220,220,220,1)", + pointColor : "rgba(220,220,220,1)", + pointStrokeColor : "#fff", + data : [65,59,90,81,56,55,40] + }, + { + fillColor : "rgba(151,187,205,0.5)", + strokeColor : "rgba(151,187,205,1)", + pointColor : "rgba(151,187,205,1)", + pointStrokeColor : "#fff", + data : [28,48,40,19,96,27,100] + } + ] + + } + + var myRadar = new Chart(document.getElementById("radar-chart").getContext("2d")).Radar(radarChartData,{scaleShowLabels : false, pointLabelFontSize : 10}); + //END RADAR CHART + + //BEGIN POLAR AREA CHART + var chartData = [ + { + value : Math.random(), + color: "#D97041" + }, + { + value : Math.random(), + color: "#C7604C" + }, + { + value : Math.random(), + color: "#21323D" + }, + { + value : Math.random(), + color: "#9D9B7F" + }, + { + value : Math.random(), + color: "#7D4F6D" + }, + { + value : Math.random(), + color: "#584A5E" + } + ]; + var myPolarArea = new Chart(document.getElementById("polar-area-chart").getContext("2d")).PolarArea(chartData); + //END POLAR AREA CHART + + //BEGIN PIE CHART + var pieData = [ + { + value: 30, + color:"#F38630" + }, + { + value : 50, + color : "#E0E4CC" + }, + { + value : 100, + color : "#69D2E7" + } + + ]; + + var myPie = new Chart(document.getElementById("pie-chart").getContext("2d")).Pie(pieData); + //END PIE CHART + + //BEGIN DOUGHNUT CHART + var doughnutData = [ + { + value: 30, + color:"#F7464A" + }, + { + value : 50, + color : "#46BFBD" + }, + { + value : 100, + color : "#FDB45C" + }, + { + value : 40, + color : "#949FB1" + }, + { + value : 120, + color : "#4D5360" + } + + ]; + + var myDoughnut = new Chart(document.getElementById("doughnut-chart").getContext("2d")).Doughnut(doughnutData); + //END DOUGHNUT CHART + +}); + diff --git a/src/main/webapp/static/script/charts-flotchart.js b/src/main/webapp/static/script/charts-flotchart.js new file mode 100644 index 0000000..c2028ce --- /dev/null +++ b/src/main/webapp/static/script/charts-flotchart.js @@ -0,0 +1,353 @@ +$(function () { + + //BEGIN LINE CHART + var d1_1 = [["Jan", 200],["Feb", 201],["Mar", 199],["Apr", 187],["May", 193],["Jun", 192],["Jul", 206],["Aug", 186],["Sep", 206]]; + var d1_2 = [["Jan", 122],["Feb", 170],["Mar", 163],["Apr", 161],["May", 122],["Jun", 136],["Jul", 130],["Aug", 128],["Sep", 148]]; + var d1_3 = [["Jan", 81],["Feb", 92],["Mar", 98],["Apr", 102],["May", 80],["Jun", 97],["Jul", 86],["Aug", 105],["Sep", 85]]; + $.plot("#line-chart", [{ + data: d1_1, + label: "Chrome", + color: "#ffce54" + },{ + data: d1_2, + label: "Firefox", + color: "#3DB9D3" + },{ + data: d1_3, + label: "Safari", + color: "#df4782" + }], { + series: { + lines: { + show: !0, + fill: .01 + }, + points: { + show: !0, + radius: 4 + } + }, + grid: { + borderColor: "#fafafa", + borderWidth: 1, + hoverable: !0 + }, + tooltip: !0, + tooltipOpts: { + content: "%x : %y", + defaultTheme: false + }, + xaxis: { + tickColor: "#fafafa", + mode: "categories" + }, + yaxis: { + tickColor: "#fafafa" + }, + shadowSize: 0 + }); + //END LINE CHART + + //BEGIN LINE CHART SPLINE + var d2_1 = [["Jan", 181],["Feb", 184],["Mar", 189],["Apr", 180],["May", 208],["Jun", 183],["Jul", 185],["Aug", 188],["Sep", 202]]; + var d2_2 = [["Jan", 170],["Feb", 152],["Mar", 133],["Apr", 146],["May", 164],["Jun", 151],["Jul", 120],["Aug", 127],["Sep", 161]]; + var d2_3 = [["Jan", 102],["Feb", 91],["Mar", 106],["Apr", 89],["May", 90],["Jun", 94],["Jul", 86],["Aug", 105],["Sep", 88]]; + $.plot("#line-chart-spline", [{ + data: d2_1, + label: "Chrome", + color: "#ffce54" + },{ + data: d2_2, + label: "Firefox", + color: "#3DB9D3" + },{ + data: d2_3, + label: "Safari", + color: "#df4782" + }], { + series: { + lines: { + show: !1 + }, + splines: { + show: !0, + tension: .4, + lineWidth: 2, + fill: 0 + }, + points: { + show: !0, + radius: 4 + } + }, + grid: { + borderColor: "#fafafa", + borderWidth: 1, + hoverable: !0 + }, + tooltip: !0, + tooltipOpts: { + content: "%x : %y", + defaultTheme: false + }, + xaxis: { + tickColor: "#fafafa", + mode: "categories" + }, + yaxis: { + tickColor: "#fafafa" + }, + shadowSize: 0 + }); + //END LINE CHART SPLINE + + //BEGIN BAR CHART + var d3 = [["Jan", 93],["Feb", 78],["Mar", 47],["Apr", 35],["May", 48],["Jun", 26],["Jul", 49],["Aug", 96],["Sep", 54],["Oct", 99],["Nov", 92],["Dec", 43]]; + $.plot("#bar-chart", [{ + data: d3, + label: "Revenue", + color: "#01b6ad" + }], { + series: { + bars: { + align: "center", + lineWidth: 0, + show: !0, + barWidth: .6, + fill: .9 + } + }, + grid: { + borderColor: "#fafafa", + borderWidth: 1, + hoverable: !0 + }, + tooltip: !0, + tooltipOpts: { + content: "%x : %y", + defaultTheme: false + }, + xaxis: { + tickColor: "#fafafa", + mode: "categories" + }, + yaxis: { + tickColor: "#fafafa" + }, + shadowSize: 0 + }); + //END BAR CHART + + //BEGIN BAR CHART STACK + var d4_1 = [["Jan", 126],["Feb", 73],["Mar", 94],["Apr", 54],["May", 92],["Jun", 141],["Jul", 29],["Aug", 44],["Sep", 30],["Oct", 40],["Nov", 67],["Dec", 92]]; + var d4_2 = [["Jan", 58],["Feb", 61],["Mar", 46],["Apr", 35],["May", 55],["Jun", 46],["Jul", 57],["Aug", 80],["Sep", 100],["Oct", 91],["Nov", 35],["Dec", 57]]; + $.plot("#bar-chart-stack", [{ + data: d4_1, + label: "New Visitor", + color: "#3DB9D3" + },{ + data: d4_2, + label: "Returning Visitor", + color: "#ffce54" + }], { + series: { + stack: !0, + bars: { + align: "center", + lineWidth: 0, + show: !0, + barWidth: .6, + fill: .9 + } + }, + grid: { + borderColor: "#fafafa", + borderWidth: 1, + hoverable: !0 + }, + tooltip: !0, + tooltipOpts: { + content: "%x : %y", + defaultTheme: false + }, + xaxis: { + tickColor: "#fafafa", + mode: "categories" + }, + yaxis: { + tickColor: "#fafafa" + }, + shadowSize: 0 + }); + //END BAR CHART STACK + + //BEGIN AREA CHART + var d5_1 = [["Jan", 35],["Feb", 60],["Mar", 85],["Apr", 46],["May", 99],["Jun", 82],["Jul", 96]]; + var d5_2 = [["Jan", 47],["Feb", 74],["Mar", 36],["Apr", 83],["May", 39],["Jun", 10],["Jul", 51]]; + $.plot("#area-chart", [{ + data: d5_1, + label: "New Visitor", + color: "#ffce54" + },{ + data: d5_2, + label: "Returning Visitor", + color: "#87318c" + }], { + series: { + lines: { + show: !0, + fill: .8 + }, + points: { + show: !0, + radius: 4 + } + }, + grid: { + borderColor: "#fafafa", + borderWidth: 1, + hoverable: !0 + }, + tooltip: !0, + tooltipOpts: { + content: "%x : %y", + defaultTheme: false + }, + xaxis: { + tickColor: "#fafafa", + mode: "categories" + }, + yaxis: { + tickColor: "#fafafa" + }, + shadowSize: 0 + }); + //END AREA CHART + + //BEGIN AREA CHART SPLINE + var d6_1 = [["Jan", 67],["Feb", 91],["Mar", 36],["Apr", 150],["May", 28],["Jun", 123],["Jul", 38]]; + var d6_2 = [["Jan", 59],["Feb", 49],["Mar", 45],["Apr", 94],["May", 76],["Jun", 22],["Jul", 31]]; + $.plot("#area-chart-spline", [{ + data: d6_1, + label: "New Visitor", + color: "#a01518" + },{ + data: d6_2, + label: "Returning Visitor", + color: "#01b6ad" + }], { + series: { + lines: { + show: !1 + }, + splines: { + show: !0, + tension: .4, + lineWidth: 2, + fill: .8 + }, + points: { + show: !0, + radius: 4 + } + }, + grid: { + borderColor: "#fafafa", + borderWidth: 1, + hoverable: !0 + }, + tooltip: !0, + tooltipOpts: { + content: "%x : %y", + defaultTheme: false + }, + xaxis: { + tickColor: "#fafafa", + mode: "categories" + }, + yaxis: { + tickColor: "#fafafa" + }, + shadowSize: 0 + }); + //END AREA CHART SPLINE + + //BEGIN PIE CHART + var d7_1 = [40]; + var d7_2 = [20]; + var d7_3 = [40]; + $.plot('#pie-chart', [{ + data: d7_1, + label: "Search Engines", + color: "#3DB9D3" + }, + { + data: d7_2, + label: "Referrals", + color: "#ffce54" + }, + { + data: d7_3, + label: "Direct", + color: "#fc6e51" + }], { + series: { + pie: { + show: true, + radius: 1, + label: { + show: true, + radius: 3/4, + background: { + opacity: 0.5, + color: '#000' + } + } + } + } + }); + //END PIE CHART + + //BEGIN PERCENTILES CHART + var males = {"15%": [[2, 88.0], [3, 93.3], [4, 102.0], [5, 108.5], [6, 115.7], [7, 115.6], [8, 124.6], [9, 130.3], [10, 134.3], [11, 141.4], [12, 146.5], [13, 151.7], [14, 159.9], [15, 165.4], [16, 167.8], [17, 168.7], [18, 169.5], [19, 168.0]], "90%": [[2, 96.8], [3, 105.2], [4, 113.9], [5, 120.8], [6, 127.0], [7, 133.1], [8, 139.1], [9, 143.9], [10, 151.3], [11, 161.1], [12, 164.8], [13, 173.5], [14, 179.0], [15, 182.0], [16, 186.9], [17, 185.2], [18, 186.3], [19, 186.6]], "25%": [[2, 89.2], [3, 94.9], [4, 104.4], [5, 111.4], [6, 117.5], [7, 120.2], [8, 127.1], [9, 132.9], [10, 136.8], [11, 144.4], [12, 149.5], [13, 154.1], [14, 163.1], [15, 169.2], [16, 170.4], [17, 171.2], [18, 172.4], [19, 170.8]], "10%": [[2, 86.9], [3, 92.6], [4, 99.9], [5, 107.0], [6, 114.0], [7, 113.5], [8, 123.6], [9, 129.2], [10, 133.0], [11, 140.6], [12, 145.2], [13, 149.7], [14, 158.4], [15, 163.5], [16, 166.9], [17, 167.5], [18, 167.1], [19, 165.3]], "mean": [[2, 91.9], [3, 98.5], [4, 107.1], [5, 114.4], [6, 120.6], [7, 124.7], [8, 131.1], [9, 136.8], [10, 142.3], [11, 150.0], [12, 154.7], [13, 161.9], [14, 168.7], [15, 173.6], [16, 175.9], [17, 176.6], [18, 176.8], [19, 176.7]], "75%": [[2, 94.5], [3, 102.1], [4, 110.8], [5, 117.9], [6, 124.0], [7, 129.3], [8, 134.6], [9, 141.4], [10, 147.0], [11, 156.1], [12, 160.3], [13, 168.3], [14, 174.7], [15, 178.0], [16, 180.2], [17, 181.7], [18, 181.3], [19, 182.5]], "85%": [[2, 96.2], [3, 103.8], [4, 111.8], [5, 119.6], [6, 125.6], [7, 131.5], [8, 138.0], [9, 143.3], [10, 149.3], [11, 159.8], [12, 162.5], [13, 171.3], [14, 177.5], [15, 180.2], [16, 183.8], [17, 183.4], [18, 183.5], [19, 185.5]], "50%": [[2, 91.9], [3, 98.2], [4, 106.8], [5, 114.6], [6, 120.8], [7, 125.2], [8, 130.3], [9, 137.1], [10, 141.5], [11, 149.4], [12, 153.9], [13, 162.2], [14, 169.0], [15, 174.8], [16, 176.0], [17, 176.8], [18, 176.4], [19, 177.4]]}; + + var females = {"15%": [[2, 84.8], [3, 93.7], [4, 100.6], [5, 105.8], [6, 113.3], [7, 119.3], [8, 124.3], [9, 131.4], [10, 136.9], [11, 143.8], [12, 149.4], [13, 151.2], [14, 152.3], [15, 155.9], [16, 154.7], [17, 157.0], [18, 156.1], [19, 155.4]], "90%": [[2, 95.6], [3, 104.1], [4, 111.9], [5, 119.6], [6, 127.6], [7, 133.1], [8, 138.7], [9, 147.1], [10, 152.8], [11, 161.3], [12, 166.6], [13, 167.9], [14, 169.3], [15, 170.1], [16, 172.4], [17, 169.2], [18, 171.1], [19, 172.4]], "25%": [[2, 87.2], [3, 95.9], [4, 101.9], [5, 107.4], [6, 114.8], [7, 121.4], [8, 126.8], [9, 133.4], [10, 138.6], [11, 146.2], [12, 152.0], [13, 153.8], [14, 155.7], [15, 158.4], [16, 157.0], [17, 158.5], [18, 158.4], [19, 158.1]], "10%": [[2, 84.0], [3, 91.9], [4, 99.2], [5, 105.2], [6, 112.7], [7, 118.0], [8, 123.3], [9, 130.2], [10, 135.0], [11, 141.1], [12, 148.3], [13, 150.0], [14, 150.7], [15, 154.3], [16, 153.6], [17, 155.6], [18, 154.7], [19, 153.1]], "mean": [[2, 90.2], [3, 98.3], [4, 105.2], [5, 112.2], [6, 119.0], [7, 125.8], [8, 131.3], [9, 138.6], [10, 144.2], [11, 151.3], [12, 156.7], [13, 158.6], [14, 160.5], [15, 162.1], [16, 162.9], [17, 162.2], [18, 163.0], [19, 163.1]], "75%": [[2, 93.2], [3, 101.5], [4, 107.9], [5, 116.6], [6, 122.8], [7, 129.3], [8, 135.2], [9, 143.7], [10, 148.7], [11, 156.9], [12, 160.8], [13, 163.0], [14, 165.0], [15, 165.8], [16, 168.7], [17, 166.2], [18, 167.6], [19, 168.0]], "85%": [[2, 94.5], [3, 102.8], [4, 110.4], [5, 119.0], [6, 125.7], [7, 131.5], [8, 137.9], [9, 146.0], [10, 151.3], [11, 159.9], [12, 164.0], [13, 166.5], [14, 167.5], [15, 168.5], [16, 171.5], [17, 168.0], [18, 169.8], [19, 170.3]], "50%": [[2, 90.2], [3, 98.1], [4, 105.2], [5, 111.7], [6, 118.2], [7, 125.6], [8, 130.5], [9, 138.3], [10, 143.7], [11, 151.4], [12, 156.7], [13, 157.7], [14, 161.0], [15, 162.0], [16, 162.8], [17, 162.2], [18, 162.8], [19, 163.3]]}; + + var data = [ + { label: "Female mean", data: females["mean"], lines: { show: true }, color: "#87318c" }, + { id: "f15%", data: females["15%"], lines: { show: true, lineWidth: 0, fill: false }, color: "#87318c" }, + { id: "f25%", data: females["25%"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: "#87318c", fillBetween: "f15%" }, + { id: "f50%", data: females["50%"], lines: { show: true, lineWidth: 0.5, fill: 0.4, shadowSize: 0 }, color: "#87318c", fillBetween: "f25%" }, + { id: "f75%", data: females["75%"], lines: { show: true, lineWidth: 0, fill: 0.4 }, color: "#87318c", fillBetween: "f50%" }, + { id: "f85%", data: females["85%"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: "#87318c", fillBetween: "f75%" }, + + { label: "Male mean", data: males["mean"], lines: { show: true }, color: "#01b6ad" }, + { id: "m15%", data: males["15%"], lines: { show: true, lineWidth: 0, fill: false }, color: "#01b6ad" }, + { id: "m25%", data: males["25%"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: "#01b6ad", fillBetween: "m15%" }, + { id: "m50%", data: males["50%"], lines: { show: true, lineWidth: 0.5, fill: 0.4, shadowSize: 0 }, color: "#01b6ad", fillBetween: "m25%" }, + { id: "m75%", data: males["75%"], lines: { show: true, lineWidth: 0, fill: 0.4 }, color: "#01b6ad", fillBetween: "m50%" }, + { id: "m85%", data: males["85%"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: "#01b6ad", fillBetween: "m75%" } + ]; + + $.plot($("#percentiles-chart"), data, { + grid: { + borderColor: "#fafafa", + borderWidth: 1, + hoverable: !0 + }, + xaxis: { + tickDecimals: 0 + }, + yaxis: { + tickFormatter: function (v) { + return v + " cm"; + } + }, + legend: { + position: "se" + } + }); + //END PERCENTILES CHART + +}); + diff --git a/src/main/webapp/static/script/charts-highchart-area.js b/src/main/webapp/static/script/charts-highchart-area.js new file mode 100644 index 0000000..d028045 --- /dev/null +++ b/src/main/webapp/static/script/charts-highchart-area.js @@ -0,0 +1,556 @@ +$(function () { + + /* Basic area */ + $('#basic-area').highcharts({ + chart: { + type: 'area' + }, + title: { + text: 'US and USSR nuclear stockpiles' + }, + subtitle: { + text: 'Source: '+ + 'thebulletin.metapress.com' + }, + xAxis: { + labels: { + formatter: function() { + return this.value; // clean, unformatted number for year + } + } + }, + yAxis: { + title: { + text: 'Nuclear weapon states' + }, + labels: { + formatter: function() { + return this.value / 1000 +'k'; + } + } + }, + tooltip: { + pointFormat: '{series.name} produced {point.y:,.0f}
warheads in {point.x}' + }, + plotOptions: { + area: { + pointStart: 1940, + marker: { + enabled: false, + symbol: 'circle', + radius: 2, + states: { + hover: { + enabled: true + } + } + } + } + }, + series: [{ + name: 'USA', + data: [null, null, null, null, null, 6 , 11, 32, 110, 235, 369, 640, + 1005, 1436, 2063, 3057, 4618, 6444, 9822, 15468, 20434, 24126, + 27387, 29459, 31056, 31982, 32040, 31233, 29224, 27342, 26662, + 26956, 27912, 28999, 28965, 27826, 25579, 25722, 24826, 24605, + 24304, 23464, 23708, 24099, 24357, 24237, 24401, 24344, 23586, + 22380, 21004, 17287, 14747, 13076, 12555, 12144, 11009, 10950, + 10871, 10824, 10577, 10527, 10475, 10421, 10358, 10295, 10104 ] + }, { + name: 'USSR/Russia', + data: [null, null, null, null, null, null, null , null , null ,null, + 5, 25, 50, 120, 150, 200, 426, 660, 869, 1060, 1605, 2471, 3322, + 4238, 5221, 6129, 7089, 8339, 9399, 10538, 11643, 13092, 14478, + 15915, 17385, 19055, 21205, 23044, 25393, 27935, 30062, 32049, + 33952, 35804, 37431, 39197, 45000, 43000, 41000, 39000, 37000, + 35000, 33000, 31000, 29000, 27000, 25000, 24000, 23000, 22000, + 21000, 20000, 19000, 18000, 18000, 17000, 16000] + }] + }); + + /* Area with negative values */ + $('#area-with-negative-values').highcharts({ + chart: { + type: 'area' + }, + title: { + text: 'Area chart with negative values' + }, + xAxis: { + categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas'] + }, + credits: { + enabled: false + }, + series: [{ + name: 'John', + data: [5, 3, 4, 7, 2] + }, { + name: 'Jane', + data: [2, -2, -3, 2, 1] + }, { + name: 'Joe', + data: [3, 4, 4, -2, 5] + }] + }); + + /* Stacked area */ + $('#stacked-area').highcharts({ + chart: { + type: 'area' + }, + title: { + text: 'Historic and Estimated Worldwide Population Growth by Region' + }, + subtitle: { + text: 'Source: Wikipedia.org' + }, + xAxis: { + categories: ['1750', '1800', '1850', '1900', '1950', '1999', '2050'], + tickmarkPlacement: 'on', + title: { + enabled: false + } + }, + yAxis: { + title: { + text: 'Billions' + }, + labels: { + formatter: function() { + return this.value / 1000; + } + } + }, + tooltip: { + shared: true, + valueSuffix: ' millions' + }, + plotOptions: { + area: { + stacking: 'normal', + lineColor: '#666666', + lineWidth: 1, + marker: { + lineWidth: 1, + lineColor: '#666666' + } + } + }, + series: [{ + name: 'Asia', + data: [502, 635, 809, 947, 1402, 3634, 5268] + }, { + name: 'Africa', + data: [106, 107, 111, 133, 221, 767, 1766] + }, { + name: 'Europe', + data: [163, 203, 276, 408, 547, 729, 628] + }, { + name: 'America', + data: [18, 31, 54, 156, 339, 818, 1201] + }, { + name: 'Oceania', + data: [2, 2, 2, 6, 13, 30, 46] + }] + }); + + /* Percentage area */ + $('#percentage-area').highcharts({ + chart: { + type: 'area' + }, + title: { + text: 'Historic and Estimated Worldwide Population Distribution by Region' + }, + subtitle: { + text: 'Source: Wikipedia.org' + }, + xAxis: { + categories: ['1750', '1800', '1850', '1900', '1950', '1999', '2050'], + tickmarkPlacement: 'on', + title: { + enabled: false + } + }, + yAxis: { + title: { + text: 'Percent' + } + }, + tooltip: { + pointFormat: '{series.name}: {point.percentage:.1f}% ({point.y:,.0f} millions)
', + shared: true + }, + plotOptions: { + area: { + stacking: 'percent', + lineColor: '#ffffff', + lineWidth: 1, + marker: { + lineWidth: 1, + lineColor: '#ffffff' + } + } + }, + series: [{ + name: 'Asia', + data: [502, 635, 809, 947, 1402, 3634, 5268] + }, { + name: 'Africa', + data: [106, 107, 111, 133, 221, 767, 1766] + }, { + name: 'Europe', + data: [163, 203, 276, 408, 547, 729, 628] + }, { + name: 'America', + data: [18, 31, 54, 156, 339, 818, 1201] + }, { + name: 'Oceania', + data: [2, 2, 2, 6, 13, 30, 46] + }] + }); + + /* Area with missing points */ + $('#area-with-missing-points').highcharts({ + chart: { + type: 'area', + spacingBottom: 30 + }, + title: { + text: 'Fruit consumption *' + }, + subtitle: { + text: '* Jane\'s banana consumption is unknown', + floating: true, + align: 'right', + verticalAlign: 'bottom', + y: 15 + }, + legend: { + layout: 'vertical', + align: 'left', + verticalAlign: 'top', + x: 150, + y: 100, + floating: true, + borderWidth: 1, + backgroundColor: '#FFFFFF' + }, + xAxis: { + categories: ['Apples', 'Pears', 'Oranges', 'Bananas', 'Grapes', 'Plums', 'Strawberries', 'Raspberries'] + }, + yAxis: { + title: { + text: 'Y-Axis' + }, + labels: { + formatter: function() { + return this.value; + } + } + }, + tooltip: { + formatter: function() { + return ''+ this.series.name +'
'+ + this.x +': '+ this.y; + } + }, + plotOptions: { + area: { + fillOpacity: 0.5 + } + }, + credits: { + enabled: false + }, + series: [{ + name: 'John', + data: [0, 1, 4, 4, 5, 2, 3, 7] + }, { + name: 'Jane', + data: [1, 0, 3, null, 3, 1, 2, 1] + }] + }); + + /* Inverted axes */ + $('#inverted-axes').highcharts({ + chart: { + type: 'area', + inverted: true + }, + title: { + text: 'Average fruit consumption during one week' + }, + subtitle: { + style: { + position: 'absolute', + right: '0px', + bottom: '10px' + } + }, + legend: { + layout: 'vertical', + align: 'right', + verticalAlign: 'top', + x: -150, + y: 100, + floating: true, + borderWidth: 1, + backgroundColor: '#FFFFFF' + }, + xAxis: { + categories: [ + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + 'Sunday' + ] + }, + yAxis: { + title: { + text: 'Number of units' + }, + labels: { + formatter: function() { + return this.value; + } + }, + min: 0 + }, + plotOptions: { + area: { + fillOpacity: 0.5 + } + }, + series: [{ + name: 'John', + data: [3, 4, 3, 5, 4, 10, 12] + }, { + name: 'Jane', + data: [1, 3, 4, 3, 3, 5, 4] + }] + }); + + /* Area-spline */ + $('#area-spline').highcharts({ + chart: { + type: 'areaspline' + }, + title: { + text: 'Average fruit consumption during one week' + }, + legend: { + layout: 'vertical', + align: 'left', + verticalAlign: 'top', + x: 150, + y: 100, + floating: true, + borderWidth: 1, + backgroundColor: '#FFFFFF' + }, + xAxis: { + categories: [ + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + 'Sunday' + ], + plotBands: [{ // visualize the weekend + from: 4.5, + to: 6.5, + color: 'rgba(68, 170, 213, .2)' + }] + }, + yAxis: { + title: { + text: 'Fruit units' + } + }, + tooltip: { + shared: true, + valueSuffix: ' units' + }, + credits: { + enabled: false + }, + plotOptions: { + areaspline: { + fillOpacity: 0.5 + } + }, + series: [{ + name: 'John', + data: [3, 4, 3, 5, 4, 10, 12] + }, { + name: 'Jane', + data: [1, 3, 4, 3, 3, 5, 4] + }] + }); + + /* Area range */ + $.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=range.json&callback=?', function(data) { + + $('#area-range').highcharts({ + + chart: { + type: 'arearange', + zoomType: 'x' + }, + + title: { + text: 'Temperature variation by day' + }, + + xAxis: { + type: 'datetime' + }, + + yAxis: { + title: { + text: null + } + }, + + tooltip: { + crosshairs: true, + shared: true, + valueSuffix: '°C' + }, + + legend: { + enabled: false + }, + + series: [{ + name: 'Temperatures', + data: data + }] + + }); + }); + + /* Area range and line */ + var ranges = [ + [1246406400000, 14.3, 27.7], + [1246492800000, 14.5, 27.8], + [1246579200000, 15.5, 29.6], + [1246665600000, 16.7, 30.7], + [1246752000000, 16.5, 25.0], + [1246838400000, 17.8, 25.7], + [1246924800000, 13.5, 24.8], + [1247011200000, 10.5, 21.4], + [1247097600000, 9.2, 23.8], + [1247184000000, 11.6, 21.8], + [1247270400000, 10.7, 23.7], + [1247356800000, 11.0, 23.3], + [1247443200000, 11.6, 23.7], + [1247529600000, 11.8, 20.7], + [1247616000000, 12.6, 22.4], + [1247702400000, 13.6, 19.6], + [1247788800000, 11.4, 22.6], + [1247875200000, 13.2, 25.0], + [1247961600000, 14.2, 21.6], + [1248048000000, 13.1, 17.1], + [1248134400000, 12.2, 15.5], + [1248220800000, 12.0, 20.8], + [1248307200000, 12.0, 17.1], + [1248393600000, 12.7, 18.3], + [1248480000000, 12.4, 19.4], + [1248566400000, 12.6, 19.9], + [1248652800000, 11.9, 20.2], + [1248739200000, 11.0, 19.3], + [1248825600000, 10.8, 17.8], + [1248912000000, 11.8, 18.5], + [1248998400000, 10.8, 16.1] + ], + averages = [ + [1246406400000, 21.5], + [1246492800000, 22.1], + [1246579200000, 23], + [1246665600000, 23.8], + [1246752000000, 21.4], + [1246838400000, 21.3], + [1246924800000, 18.3], + [1247011200000, 15.4], + [1247097600000, 16.4], + [1247184000000, 17.7], + [1247270400000, 17.5], + [1247356800000, 17.6], + [1247443200000, 17.7], + [1247529600000, 16.8], + [1247616000000, 17.7], + [1247702400000, 16.3], + [1247788800000, 17.8], + [1247875200000, 18.1], + [1247961600000, 17.2], + [1248048000000, 14.4], + [1248134400000, 13.7], + [1248220800000, 15.7], + [1248307200000, 14.6], + [1248393600000, 15.3], + [1248480000000, 15.3], + [1248566400000, 15.8], + [1248652800000, 15.2], + [1248739200000, 14.8], + [1248825600000, 14.4], + [1248912000000, 15], + [1248998400000, 13.6] + ]; + + + $('#area-range-and-line').highcharts({ + + title: { + text: 'July temperatures' + }, + + xAxis: { + type: 'datetime' + }, + + yAxis: { + title: { + text: null + } + }, + + tooltip: { + crosshairs: true, + shared: true, + valueSuffix: '°C' + }, + + legend: { + }, + + series: [{ + name: 'Temperature', + data: averages, + zIndex: 1, + marker: { + fillColor: 'white', + lineWidth: 2, + lineColor: Highcharts.getOptions().colors[0] + } + }, { + name: 'Range', + data: ranges, + type: 'arearange', + lineWidth: 0, + linkedTo: ':previous', + color: Highcharts.getOptions().colors[0], + fillOpacity: 0.3, + zIndex: 0 + }] + + }); + +}); diff --git a/src/main/webapp/static/script/charts-highchart-column-bar.js b/src/main/webapp/static/script/charts-highchart-column-bar.js new file mode 100644 index 0000000..793cc95 --- /dev/null +++ b/src/main/webapp/static/script/charts-highchart-column-bar.js @@ -0,0 +1,590 @@ +$(function () { + + /* Basic bar */ + $('#basic-bar').highcharts({ + chart: { + type: 'bar' + }, + title: { + text: 'Historic World Population by Region' + }, + subtitle: { + text: 'Source: Wikipedia.org' + }, + xAxis: { + categories: ['Africa', 'America', 'Asia', 'Europe', 'Oceania'], + title: { + text: null + } + }, + yAxis: { + min: 0, + title: { + text: 'Population (millions)', + align: 'high' + }, + labels: { + overflow: 'justify' + } + }, + tooltip: { + valueSuffix: ' millions' + }, + plotOptions: { + bar: { + dataLabels: { + enabled: true + } + } + }, + legend: { + layout: 'vertical', + align: 'right', + verticalAlign: 'top', + x: -40, + y: 100, + floating: true, + borderWidth: 1, + backgroundColor: '#FFFFFF', + shadow: true + }, + credits: { + enabled: false + }, + series: [{ + name: 'Year 1800', + data: [107, 31, 635, 203, 2] + }, { + name: 'Year 1900', + data: [133, 156, 947, 408, 6] + }, { + name: 'Year 2008', + data: [973, 914, 4054, 732, 34] + }] + }); + + /* Stacked bar */ + $('#stacked-bar').highcharts({ + chart: { + type: 'bar' + }, + title: { + text: 'Stacked bar chart' + }, + xAxis: { + categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas'] + }, + yAxis: { + min: 0, + title: { + text: 'Total fruit consumption' + } + }, + legend: { + backgroundColor: '#FFFFFF', + reversed: true + }, + plotOptions: { + series: { + stacking: 'normal' + } + }, + series: [{ + name: 'John', + data: [5, 3, 4, 7, 2] + }, { + name: 'Jane', + data: [2, 2, 3, 2, 1] + }, { + name: 'Joe', + data: [3, 4, 4, 2, 5] + }] + }); + + /* Bar with negative stack */ + var chart, + categories = ['0-4', '5-9', '10-14', '15-19', + '20-24', '25-29', '30-34', '35-39', '40-44', + '45-49', '50-54', '55-59', '60-64', '65-69', + '70-74', '75-79', '80-84', '85-89', '90-94', + '95-99', '100 +']; + $(document).ready(function() { + $('#bar-with-negative-stack').highcharts({ + chart: { + type: 'bar' + }, + title: { + text: 'Population pyramid for Germany, midyear 2010' + }, + subtitle: { + text: 'Source: www.census.gov' + }, + xAxis: [{ + categories: categories, + reversed: false, + labels: { + step: 1 + } + }, { // mirror axis on right side + opposite: true, + reversed: false, + categories: categories, + linkedTo: 0, + labels: { + step: 1 + } + }], + yAxis: { + title: { + text: null + }, + labels: { + formatter: function(){ + return (Math.abs(this.value) / 1000000) + 'M'; + } + }, + min: -4000000, + max: 4000000 + }, + + plotOptions: { + series: { + stacking: 'normal' + } + }, + + tooltip: { + formatter: function(){ + return ''+ this.series.name +', age '+ this.point.category +'
'+ + 'Population: '+ Highcharts.numberFormat(Math.abs(this.point.y), 0); + } + }, + + series: [{ + name: 'Male', + data: [-1746181, -1884428, -2089758, -2222362, -2537431, -2507081, -2443179, + -2664537, -3556505, -3680231, -3143062, -2721122, -2229181, -2227768, + -2176300, -1329968, -836804, -354784, -90569, -28367, -3878] + }, { + name: 'Female', + data: [1656154, 1787564, 1981671, 2108575, 2403438, 2366003, 2301402, 2519874, + 3360596, 3493473, 3050775, 2759560, 2304444, 2426504, 2568938, 1785638, + 1447162, 1005011, 330870, 130632, 21208] + }] + }); + }); + + /* Basic column */ + $('#basic-column').highcharts({ + chart: { + type: 'column' + }, + title: { + text: 'Monthly Average Rainfall' + }, + subtitle: { + text: 'Source: WorldClimate.com' + }, + xAxis: { + categories: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec' + ] + }, + yAxis: { + min: 0, + title: { + text: 'Rainfall (mm)' + } + }, + tooltip: { + headerFormat: '{point.key}', + pointFormat: '' + + '', + footerFormat: '
{series.name}: {point.y:.1f} mm
', + shared: true, + useHTML: true + }, + plotOptions: { + column: { + pointPadding: 0.2, + borderWidth: 0 + } + }, + series: [{ + name: 'Tokyo', + data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] + + }, { + name: 'New York', + data: [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3] + + }, { + name: 'London', + data: [48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2] + + }, { + name: 'Berlin', + data: [42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1] + + }] + }); + + /* Column with negative values */ + $('#column-with-negative-values').highcharts({ + chart: { + type: 'column' + }, + title: { + text: 'Column chart with negative values' + }, + xAxis: { + categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas'] + }, + credits: { + enabled: false + }, + series: [{ + name: 'John', + data: [5, 3, 4, 7, 2] + }, { + name: 'Jane', + data: [2, -2, -3, 2, 1] + }, { + name: 'Joe', + data: [3, 4, 4, -2, 5] + }] + }); + + /* Stacked column */ + $('#stacked-column').highcharts({ + chart: { + type: 'column' + }, + title: { + text: 'Stacked column chart' + }, + xAxis: { + categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas'] + }, + yAxis: { + min: 0, + title: { + text: 'Total fruit consumption' + }, + stackLabels: { + enabled: true, + style: { + fontWeight: 'bold', + color: (Highcharts.theme && Highcharts.theme.textColor) || 'gray' + } + } + }, + legend: { + align: 'right', + x: -70, + verticalAlign: 'top', + y: 20, + floating: true, + backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColorSolid) || 'white', + borderColor: '#CCC', + borderWidth: 1, + shadow: false + }, + tooltip: { + formatter: function() { + return ''+ this.x +'
'+ + this.series.name +': '+ this.y +'
'+ + 'Total: '+ this.point.stackTotal; + } + }, + plotOptions: { + column: { + stacking: 'normal', + dataLabels: { + enabled: true, + color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white' + } + } + }, + series: [{ + name: 'John', + data: [5, 3, 4, 7, 2] + }, { + name: 'Jane', + data: [2, 2, 3, 2, 1] + }, { + name: 'Joe', + data: [3, 4, 4, 2, 5] + }] + }); + + /* Stacked and grouped column */ + $('#stacked-and-grouped-column').highcharts({ + + chart: { + type: 'column' + }, + + title: { + text: 'Total fruit consumtion, grouped by gender' + }, + + xAxis: { + categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas'] + }, + + yAxis: { + allowDecimals: false, + min: 0, + title: { + text: 'Number of fruits' + } + }, + + tooltip: { + formatter: function() { + return ''+ this.x +'
'+ + this.series.name +': '+ this.y +'
'+ + 'Total: '+ this.point.stackTotal; + } + }, + + plotOptions: { + column: { + stacking: 'normal' + } + }, + + series: [{ + name: 'John', + data: [5, 3, 4, 7, 2], + stack: 'male' + }, { + name: 'Joe', + data: [3, 4, 4, 2, 5], + stack: 'male' + }, { + name: 'Jane', + data: [2, 5, 6, 2, 1], + stack: 'female' + }, { + name: 'Janet', + data: [3, 0, 4, 4, 3], + stack: 'female' + }] + }); + + /* Stacked percentage column */ + $('#stacked-percentage-column').highcharts({ + chart: { + type: 'column' + }, + title: { + text: 'Stacked column chart' + }, + xAxis: { + categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas'] + }, + yAxis: { + min: 0, + title: { + text: 'Total fruit consumption' + } + }, + tooltip: { + pointFormat: '{series.name}: {point.y} ({point.percentage:.0f}%)
', + shared: true + }, + plotOptions: { + column: { + stacking: 'percent' + } + }, + series: [{ + name: 'John', + data: [5, 3, 4, 7, 2] + }, { + name: 'Jane', + data: [2, 2, 3, 2, 1] + }, { + name: 'Joe', + data: [3, 4, 4, 2, 5] + }] + }); + + /* Column with rotated labels */ + $('#column-with-rotated-labels').highcharts({ + chart: { + type: 'column', + margin: [ 50, 50, 100, 80] + }, + title: { + text: 'World\'s largest cities per 2008' + }, + xAxis: { + categories: [ + 'Tokyo', + 'Jakarta', + 'New York', + 'Seoul', + 'Manila', + 'Mumbai', + 'Sao Paulo', + 'Mexico City', + 'Dehli', + 'Osaka', + 'Cairo', + 'Kolkata', + 'Los Angeles', + 'Shanghai', + 'Moscow', + 'Beijing', + 'Buenos Aires', + 'Guangzhou', + 'Shenzhen', + 'Istanbul' + ], + labels: { + rotation: -45, + align: 'right', + style: { + fontSize: '13px', + fontFamily: 'Verdana, sans-serif' + } + } + }, + yAxis: { + min: 0, + title: { + text: 'Population (millions)' + } + }, + legend: { + enabled: false + }, + tooltip: { + pointFormat: 'Population in 2008: {point.y:.1f} millions' + }, + series: [{ + name: 'Population', + data: [34.4, 21.8, 20.1, 20, 19.6, 19.5, 19.1, 18.4, 18, + 17.3, 16.8, 15, 14.7, 14.5, 13.3, 12.8, 12.4, 11.8, + 11.7, 11.2], + dataLabels: { + enabled: true, + rotation: -90, + color: '#FFFFFF', + align: 'right', + x: 4, + y: 10, + style: { + fontSize: '13px', + fontFamily: 'Verdana, sans-serif', + textShadow: '0 0 3px black' + } + } + }] + }); + + /* Data defined in a HTML table */ + $('#data-defined-in-a-HTML-table').highcharts({ + data: { + table: document.getElementById('datatable') + }, + chart: { + type: 'column' + }, + title: { + text: 'Data extracted from a HTML table in the page' + }, + yAxis: { + allowDecimals: false, + title: { + text: 'Units' + } + }, + tooltip: { + formatter: function() { + return ''+ this.series.name +'
'+ + this.y +' '+ this.x.toLowerCase(); + } + } + }); + + /* Column range */ + $('#column-range').highcharts({ + + chart: { + type: 'columnrange', + inverted: true + }, + + title: { + text: 'Temperature variation by month' + }, + + subtitle: { + text: 'Observed in Vik i Sogn, Norway, 2009' + }, + + xAxis: { + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + }, + + yAxis: { + title: { + text: 'Temperature ( °C )' + } + }, + + tooltip: { + valueSuffix: '°C' + }, + + plotOptions: { + columnrange: { + dataLabels: { + enabled: true, + formatter: function () { + return this.y + '°C'; + } + } + } + }, + + legend: { + enabled: false + }, + + series: [{ + name: 'Temperatures', + data: [ + [-9.7, 9.4], + [-8.7, 6.5], + [-3.5, 9.4], + [-1.4, 19.9], + [0.0, 22.6], + [2.9, 29.5], + [9.2, 30.7], + [7.3, 26.5], + [4.4, 18.0], + [-3.1, 11.4], + [-5.2, 10.4], + [-13.5, 9.8] + ] + }] + + }); + +}); diff --git a/src/main/webapp/static/script/charts-highchart-combinations.js b/src/main/webapp/static/script/charts-highchart-combinations.js new file mode 100644 index 0000000..7511245 --- /dev/null +++ b/src/main/webapp/static/script/charts-highchart-combinations.js @@ -0,0 +1,309 @@ +$(function () { + + /* Column, line and pie */ + $('#column-line-and-pie').highcharts({ + chart: { + }, + title: { + text: 'Combination chart' + }, + xAxis: { + categories: ['Apples', 'Oranges', 'Pears', 'Bananas', 'Plums'] + }, + tooltip: { + formatter: function() { + var s; + if (this.point.name) { // the pie chart + s = ''+ + this.point.name +': '+ this.y +' fruits'; + } else { + s = ''+ + this.x +': '+ this.y; + } + return s; + } + }, + labels: { + items: [{ + html: 'Total fruit consumption', + style: { + left: '40px', + top: '8px', + color: 'black' + } + }] + }, + series: [{ + type: 'column', + name: 'Jane', + data: [3, 2, 1, 3, 4] + }, { + type: 'column', + name: 'John', + data: [2, 3, 5, 7, 6] + }, { + type: 'column', + name: 'Joe', + data: [4, 3, 3, 9, 0] + }, { + type: 'spline', + name: 'Average', + data: [3, 2.67, 3, 6.33, 3.33], + marker: { + lineWidth: 2, + lineColor: Highcharts.getOptions().colors[3], + fillColor: 'white' + } + }, { + type: 'pie', + name: 'Total consumption', + data: [{ + name: 'Jane', + y: 13, + color: Highcharts.getOptions().colors[0] // Jane's color + }, { + name: 'John', + y: 23, + color: Highcharts.getOptions().colors[1] // John's color + }, { + name: 'Joe', + y: 19, + color: Highcharts.getOptions().colors[2] // Joe's color + }], + center: [100, 80], + size: 100, + showInLegend: false, + dataLabels: { + enabled: false + } + }] + }); + + /* Dual axes, line and column */ + $('#dual-axes-line-and-column').highcharts({ + chart: { + zoomType: 'xy' + }, + title: { + text: 'Average Monthly Temperature and Rainfall in Tokyo' + }, + subtitle: { + text: 'Source: WorldClimate.com' + }, + xAxis: [{ + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + }], + yAxis: [{ // Primary yAxis + labels: { + format: '{value}°C', + style: { + color: '#89A54E' + } + }, + title: { + text: 'Temperature', + style: { + color: '#89A54E' + } + } + }, { // Secondary yAxis + title: { + text: 'Rainfall', + style: { + color: '#4572A7' + } + }, + labels: { + format: '{value} mm', + style: { + color: '#4572A7' + } + }, + opposite: true + }], + tooltip: { + shared: true + }, + legend: { + layout: 'vertical', + align: 'left', + x: 120, + verticalAlign: 'top', + y: 100, + floating: true, + backgroundColor: '#FFFFFF' + }, + series: [{ + name: 'Rainfall', + color: '#4572A7', + type: 'column', + yAxis: 1, + data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4], + tooltip: { + valueSuffix: ' mm' + } + + }, { + name: 'Temperature', + color: '#89A54E', + type: 'spline', + data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6], + tooltip: { + valueSuffix: '°C' + } + }] + }); + + /* Multiple axes */ + $('#multiple-axes').highcharts({ + chart: { + zoomType: 'xy' + }, + title: { + text: 'Average Monthly Weather Data for Tokyo' + }, + subtitle: { + text: 'Source: WorldClimate.com' + }, + xAxis: [{ + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + }], + yAxis: [{ // Primary yAxis + labels: { + formatter: function() { + return this.value +'°C'; + }, + style: { + color: '#89A54E' + } + }, + title: { + text: 'Temperature', + style: { + color: '#89A54E' + } + }, + opposite: true + + }, { // Secondary yAxis + gridLineWidth: 0, + title: { + text: 'Rainfall', + style: { + color: '#4572A7' + } + }, + labels: { + formatter: function() { + return this.value +' mm'; + }, + style: { + color: '#4572A7' + } + } + + }, { // Tertiary yAxis + gridLineWidth: 0, + title: { + text: 'Sea-Level Pressure', + style: { + color: '#AA4643' + } + }, + labels: { + formatter: function() { + return this.value +' mb'; + }, + style: { + color: '#AA4643' + } + }, + opposite: true + }], + tooltip: { + shared: true + }, + legend: { + layout: 'vertical', + align: 'left', + x: 120, + verticalAlign: 'top', + y: 80, + floating: true, + backgroundColor: '#FFFFFF' + }, + series: [{ + name: 'Rainfall', + color: '#4572A7', + type: 'column', + yAxis: 1, + data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4], + tooltip: { + valueSuffix: ' mm' + } + + }, { + name: 'Sea-Level Pressure', + type: 'spline', + color: '#AA4643', + yAxis: 2, + data: [1016, 1016, 1015.9, 1015.5, 1012.3, 1009.5, 1009.6, 1010.2, 1013.1, 1016.9, 1018.2, 1016.7], + marker: { + enabled: false + }, + dashStyle: 'shortdot', + tooltip: { + valueSuffix: ' mb' + } + + }, { + name: 'Temperature', + color: '#89A54E', + type: 'spline', + data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6], + tooltip: { + valueSuffix: ' °C' + } + }] + }); + + /* Scatter with regression line */ + $('#scatter-with-regression-line').highcharts({ + chart: { + }, + xAxis: { + min: -0.5, + max: 5.5 + }, + yAxis: { + min: 0 + }, + title: { + text: 'Scatter plot with regression line' + }, + series: [{ + type: 'line', + name: 'Regression Line', + data: [[0, 1.11], [5, 4.51]], + marker: { + enabled: false + }, + states: { + hover: { + lineWidth: 0 + } + }, + enableMouseTracking: false + }, { + type: 'scatter', + name: 'Observations', + data: [1, 1.5, 2.8, 3.5, 3.9, 4.2], + marker: { + radius: 4 + } + }] + }); + +}); diff --git a/src/main/webapp/static/script/charts-highchart-dynamic.js b/src/main/webapp/static/script/charts-highchart-dynamic.js new file mode 100644 index 0000000..12d739c --- /dev/null +++ b/src/main/webapp/static/script/charts-highchart-dynamic.js @@ -0,0 +1,500 @@ +$(function () { + + /* Spline updating each second */ + $(document).ready(function() { + Highcharts.setOptions({ + global: { + useUTC: false + } + }); + + var chart; + $('#spline-updating-each-second').highcharts({ + chart: { + type: 'spline', + animation: Highcharts.svg, // don't animate in old IE + marginRight: 10, + events: { + load: function() { + + // set up the updating of the chart each second + var series = this.series[0]; + setInterval(function() { + var x = (new Date()).getTime(), // current time + y = Math.random(); + series.addPoint([x, y], true, true); + }, 1000); + } + } + }, + title: { + text: 'Live random data' + }, + xAxis: { + type: 'datetime', + tickPixelInterval: 150 + }, + yAxis: { + title: { + text: 'Value' + }, + plotLines: [{ + value: 0, + width: 1, + color: '#808080' + }] + }, + tooltip: { + formatter: function() { + return ''+ this.series.name +'
'+ + Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) +'
'+ + Highcharts.numberFormat(this.y, 2); + } + }, + legend: { + enabled: false + }, + exporting: { + enabled: false + }, + series: [{ + name: 'Random data', + data: (function() { + // generate an array of random data + var data = [], + time = (new Date()).getTime(), + i; + + for (i = -19; i <= 0; i++) { + data.push({ + x: time + i * 1000, + y: Math.random() + }); + } + return data; + })() + }] + }); + }); + + /* Click to add a point */ + $('#click-to-add-a-point').highcharts({ + chart: { + type: 'scatter', + margin: [70, 50, 60, 80], + events: { + click: function(e) { + // find the clicked values and the series + var x = e.xAxis[0].value, + y = e.yAxis[0].value, + series = this.series[0]; + + // Add it + series.addPoint([x, y]); + + } + } + }, + title: { + text: 'User supplied data' + }, + subtitle: { + text: 'Click the plot area to add a point. Click a point to remove it.' + }, + xAxis: { + minPadding: 0.2, + maxPadding: 0.2, + maxZoom: 60 + }, + yAxis: { + title: { + text: 'Value' + }, + minPadding: 0.2, + maxPadding: 0.2, + maxZoom: 60, + plotLines: [{ + value: 0, + width: 1, + color: '#808080' + }] + }, + legend: { + enabled: false + }, + exporting: { + enabled: false + }, + plotOptions: { + series: { + lineWidth: 1, + point: { + events: { + 'click': function() { + if (this.series.data.length > 1) this.remove(); + } + } + } + } + }, + series: [{ + data: [[20, 20], [80, 80]] + }] + }); + + /* Master-detail chart */ + var data = [ + 0.8446, 0.8445, 0.8444, 0.8451, 0.8418, 0.8264, 0.8258, 0.8232, 0.8233, 0.8258, + 0.8283, 0.8278, 0.8256, 0.8292, 0.8239, 0.8239, 0.8245, 0.8265, 0.8261, 0.8269, + 0.8273, 0.8244, 0.8244, 0.8172, 0.8139, 0.8146, 0.8164, 0.82, 0.8269, 0.8269, + 0.8269, 0.8258, 0.8247, 0.8286, 0.8289, 0.8316, 0.832, 0.8333, 0.8352, 0.8357, + 0.8355, 0.8354, 0.8403, 0.8403, 0.8406, 0.8403, 0.8396, 0.8418, 0.8409, 0.8384, + 0.8386, 0.8372, 0.839, 0.84, 0.8389, 0.84, 0.8423, 0.8423, 0.8435, 0.8422, + 0.838, 0.8373, 0.8316, 0.8303, 0.8303, 0.8302, 0.8369, 0.84, 0.8385, 0.84, + 0.8401, 0.8402, 0.8381, 0.8351, 0.8314, 0.8273, 0.8213, 0.8207, 0.8207, 0.8215, + 0.8242, 0.8273, 0.8301, 0.8346, 0.8312, 0.8312, 0.8312, 0.8306, 0.8327, 0.8282, + 0.824, 0.8255, 0.8256, 0.8273, 0.8209, 0.8151, 0.8149, 0.8213, 0.8273, 0.8273, + 0.8261, 0.8252, 0.824, 0.8262, 0.8258, 0.8261, 0.826, 0.8199, 0.8153, 0.8097, + 0.8101, 0.8119, 0.8107, 0.8105, 0.8084, 0.8069, 0.8047, 0.8023, 0.7965, 0.7919, + 0.7921, 0.7922, 0.7934, 0.7918, 0.7915, 0.787, 0.7861, 0.7861, 0.7853, 0.7867, + 0.7827, 0.7834, 0.7766, 0.7751, 0.7739, 0.7767, 0.7802, 0.7788, 0.7828, 0.7816, + 0.7829, 0.783, 0.7829, 0.7781, 0.7811, 0.7831, 0.7826, 0.7855, 0.7855, 0.7845, + 0.7798, 0.7777, 0.7822, 0.7785, 0.7744, 0.7743, 0.7726, 0.7766, 0.7806, 0.785, + 0.7907, 0.7912, 0.7913, 0.7931, 0.7952, 0.7951, 0.7928, 0.791, 0.7913, 0.7912, + 0.7941, 0.7953, 0.7921, 0.7919, 0.7968, 0.7999, 0.7999, 0.7974, 0.7942, 0.796, + 0.7969, 0.7862, 0.7821, 0.7821, 0.7821, 0.7811, 0.7833, 0.7849, 0.7819, 0.7809, + 0.7809, 0.7827, 0.7848, 0.785, 0.7873, 0.7894, 0.7907, 0.7909, 0.7947, 0.7987, + 0.799, 0.7927, 0.79, 0.7878, 0.7878, 0.7907, 0.7922, 0.7937, 0.786, 0.787, + 0.7838, 0.7838, 0.7837, 0.7836, 0.7806, 0.7825, 0.7798, 0.777, 0.777, 0.7772, + 0.7793, 0.7788, 0.7785, 0.7832, 0.7865, 0.7865, 0.7853, 0.7847, 0.7809, 0.778, + 0.7799, 0.78, 0.7801, 0.7765, 0.7785, 0.7811, 0.782, 0.7835, 0.7845, 0.7844, + 0.782, 0.7811, 0.7795, 0.7794, 0.7806, 0.7794, 0.7794, 0.7778, 0.7793, 0.7808, + 0.7824, 0.787, 0.7894, 0.7893, 0.7882, 0.7871, 0.7882, 0.7871, 0.7878, 0.79, + 0.7901, 0.7898, 0.7879, 0.7886, 0.7858, 0.7814, 0.7825, 0.7826, 0.7826, 0.786, + 0.7878, 0.7868, 0.7883, 0.7893, 0.7892, 0.7876, 0.785, 0.787, 0.7873, 0.7901, + 0.7936, 0.7939, 0.7938, 0.7956, 0.7975, 0.7978, 0.7972, 0.7995, 0.7995, 0.7994, + 0.7976, 0.7977, 0.796, 0.7922, 0.7928, 0.7929, 0.7948, 0.797, 0.7953, 0.7907, + 0.7872, 0.7852, 0.7852, 0.786, 0.7862, 0.7836, 0.7837, 0.784, 0.7867, 0.7867, + 0.7869, 0.7837, 0.7827, 0.7825, 0.7779, 0.7791, 0.779, 0.7787, 0.78, 0.7807, + 0.7803, 0.7817, 0.7799, 0.7799, 0.7795, 0.7801, 0.7765, 0.7725, 0.7683, 0.7641, + 0.7639, 0.7616, 0.7608, 0.759, 0.7582, 0.7539, 0.75, 0.75, 0.7507, 0.7505, + 0.7516, 0.7522, 0.7531, 0.7577, 0.7577, 0.7582, 0.755, 0.7542, 0.7576, 0.7616, + 0.7648, 0.7648, 0.7641, 0.7614, 0.757, 0.7587, 0.7588, 0.762, 0.762, 0.7617, + 0.7618, 0.7615, 0.7612, 0.7596, 0.758, 0.758, 0.758, 0.7547, 0.7549, 0.7613, + 0.7655, 0.7693, 0.7694, 0.7688, 0.7678, 0.7708, 0.7727, 0.7749, 0.7741, 0.7741, + 0.7732, 0.7727, 0.7737, 0.7724, 0.7712, 0.772, 0.7721, 0.7717, 0.7704, 0.769, + 0.7711, 0.774, 0.7745, 0.7745, 0.774, 0.7716, 0.7713, 0.7678, 0.7688, 0.7718, + 0.7718, 0.7728, 0.7729, 0.7698, 0.7685, 0.7681, 0.769, 0.769, 0.7698, 0.7699, + 0.7651, 0.7613, 0.7616, 0.7614, 0.7614, 0.7607, 0.7602, 0.7611, 0.7622, 0.7615, + 0.7598, 0.7598, 0.7592, 0.7573, 0.7566, 0.7567, 0.7591, 0.7582, 0.7585, 0.7613, + 0.7631, 0.7615, 0.76, 0.7613, 0.7627, 0.7627, 0.7608, 0.7583, 0.7575, 0.7562, + 0.752, 0.7512, 0.7512, 0.7517, 0.752, 0.7511, 0.748, 0.7509, 0.7531, 0.7531, + 0.7527, 0.7498, 0.7493, 0.7504, 0.75, 0.7491, 0.7491, 0.7485, 0.7484, 0.7492, + 0.7471, 0.7459, 0.7477, 0.7477, 0.7483, 0.7458, 0.7448, 0.743, 0.7399, 0.7395, + 0.7395, 0.7378, 0.7382, 0.7362, 0.7355, 0.7348, 0.7361, 0.7361, 0.7365, 0.7362, + 0.7331, 0.7339, 0.7344, 0.7327, 0.7327, 0.7336, 0.7333, 0.7359, 0.7359, 0.7372, + 0.736, 0.736, 0.735, 0.7365, 0.7384, 0.7395, 0.7413, 0.7397, 0.7396, 0.7385, + 0.7378, 0.7366, 0.74, 0.7411, 0.7406, 0.7405, 0.7414, 0.7431, 0.7431, 0.7438, + 0.7443, 0.7443, 0.7443, 0.7434, 0.7429, 0.7442, 0.744, 0.7439, 0.7437, 0.7437, + 0.7429, 0.7403, 0.7399, 0.7418, 0.7468, 0.748, 0.748, 0.749, 0.7494, 0.7522, + 0.7515, 0.7502, 0.7472, 0.7472, 0.7462, 0.7455, 0.7449, 0.7467, 0.7458, 0.7427, + 0.7427, 0.743, 0.7429, 0.744, 0.743, 0.7422, 0.7388, 0.7388, 0.7369, 0.7345, + 0.7345, 0.7345, 0.7352, 0.7341, 0.7341, 0.734, 0.7324, 0.7272, 0.7264, 0.7255, + 0.7258, 0.7258, 0.7256, 0.7257, 0.7247, 0.7243, 0.7244, 0.7235, 0.7235, 0.7235, + 0.7235, 0.7262, 0.7288, 0.7301, 0.7337, 0.7337, 0.7324, 0.7297, 0.7317, 0.7315, + 0.7288, 0.7263, 0.7263, 0.7242, 0.7253, 0.7264, 0.727, 0.7312, 0.7305, 0.7305, + 0.7318, 0.7358, 0.7409, 0.7454, 0.7437, 0.7424, 0.7424, 0.7415, 0.7419, 0.7414, + 0.7377, 0.7355, 0.7315, 0.7315, 0.732, 0.7332, 0.7346, 0.7328, 0.7323, 0.734, + 0.734, 0.7336, 0.7351, 0.7346, 0.7321, 0.7294, 0.7266, 0.7266, 0.7254, 0.7242, + 0.7213, 0.7197, 0.7209, 0.721, 0.721, 0.721, 0.7209, 0.7159, 0.7133, 0.7105, + 0.7099, 0.7099, 0.7093, 0.7093, 0.7076, 0.707, 0.7049, 0.7012, 0.7011, 0.7019, + 0.7046, 0.7063, 0.7089, 0.7077, 0.7077, 0.7077, 0.7091, 0.7118, 0.7079, 0.7053, + 0.705, 0.7055, 0.7055, 0.7045, 0.7051, 0.7051, 0.7017, 0.7, 0.6995, 0.6994, + 0.7014, 0.7036, 0.7021, 0.7002, 0.6967, 0.695, 0.695, 0.6939, 0.694, 0.6922, + 0.6919, 0.6914, 0.6894, 0.6891, 0.6904, 0.689, 0.6834, 0.6823, 0.6807, 0.6815, + 0.6815, 0.6847, 0.6859, 0.6822, 0.6827, 0.6837, 0.6823, 0.6822, 0.6822, 0.6792, + 0.6746, 0.6735, 0.6731, 0.6742, 0.6744, 0.6739, 0.6731, 0.6761, 0.6761, 0.6785, + 0.6818, 0.6836, 0.6823, 0.6805, 0.6793, 0.6849, 0.6833, 0.6825, 0.6825, 0.6816, + 0.6799, 0.6813, 0.6809, 0.6868, 0.6933, 0.6933, 0.6945, 0.6944, 0.6946, 0.6964, + 0.6965, 0.6956, 0.6956, 0.695, 0.6948, 0.6928, 0.6887, 0.6824, 0.6794, 0.6794, + 0.6803, 0.6855, 0.6824, 0.6791, 0.6783, 0.6785, 0.6785, 0.6797, 0.68, 0.6803, + 0.6805, 0.676, 0.677, 0.677, 0.6736, 0.6726, 0.6764, 0.6821, 0.6831, 0.6842, + 0.6842, 0.6887, 0.6903, 0.6848, 0.6824, 0.6788, 0.6814, 0.6814, 0.6797, 0.6769, + 0.6765, 0.6733, 0.6729, 0.6758, 0.6758, 0.675, 0.678, 0.6833, 0.6856, 0.6903, + 0.6896, 0.6896, 0.6882, 0.6879, 0.6862, 0.6852, 0.6823, 0.6813, 0.6813, 0.6822, + 0.6802, 0.6802, 0.6784, 0.6748, 0.6747, 0.6747, 0.6748, 0.6733, 0.665, 0.6611, + 0.6583, 0.659, 0.659, 0.6581, 0.6578, 0.6574, 0.6532, 0.6502, 0.6514, 0.6514, + 0.6507, 0.651, 0.6489, 0.6424, 0.6406, 0.6382, 0.6382, 0.6341, 0.6344, 0.6378, + 0.6439, 0.6478, 0.6481, 0.6481, 0.6494, 0.6438, 0.6377, 0.6329, 0.6336, 0.6333, + 0.6333, 0.633, 0.6371, 0.6403, 0.6396, 0.6364, 0.6356, 0.6356, 0.6368, 0.6357, + 0.6354, 0.632, 0.6332, 0.6328, 0.6331, 0.6342, 0.6321, 0.6302, 0.6278, 0.6308, + 0.6324, 0.6324, 0.6307, 0.6277, 0.6269, 0.6335, 0.6392, 0.64, 0.6401, 0.6396, + 0.6407, 0.6423, 0.6429, 0.6472, 0.6485, 0.6486, 0.6467, 0.6444, 0.6467, 0.6509, + 0.6478, 0.6461, 0.6461, 0.6468, 0.6449, 0.647, 0.6461, 0.6452, 0.6422, 0.6422, + 0.6425, 0.6414, 0.6366, 0.6346, 0.635, 0.6346, 0.6346, 0.6343, 0.6346, 0.6379, + 0.6416, 0.6442, 0.6431, 0.6431, 0.6435, 0.644, 0.6473, 0.6469, 0.6386, 0.6356, + 0.634, 0.6346, 0.643, 0.6452, 0.6467, 0.6506, 0.6504, 0.6503, 0.6481, 0.6451, + 0.645, 0.6441, 0.6414, 0.6409, 0.6409, 0.6428, 0.6431, 0.6418, 0.6371, 0.6349, + 0.6333, 0.6334, 0.6338, 0.6342, 0.632, 0.6318, 0.637, 0.6368, 0.6368, 0.6383, + 0.6371, 0.6371, 0.6355, 0.632, 0.6277, 0.6276, 0.6291, 0.6274, 0.6293, 0.6311, + 0.631, 0.6312, 0.6312, 0.6304, 0.6294, 0.6348, 0.6378, 0.6368, 0.6368, 0.6368, + 0.636, 0.637, 0.6418, 0.6411, 0.6435, 0.6427, 0.6427, 0.6419, 0.6446, 0.6468, + 0.6487, 0.6594, 0.6666, 0.6666, 0.6678, 0.6712, 0.6705, 0.6718, 0.6784, 0.6811, + 0.6811, 0.6794, 0.6804, 0.6781, 0.6756, 0.6735, 0.6763, 0.6762, 0.6777, 0.6815, + 0.6802, 0.678, 0.6796, 0.6817, 0.6817, 0.6832, 0.6877, 0.6912, 0.6914, 0.7009, + 0.7012, 0.701, 0.7005, 0.7076, 0.7087, 0.717, 0.7105, 0.7031, 0.7029, 0.7006, + 0.7035, 0.7045, 0.6956, 0.6988, 0.6915, 0.6914, 0.6859, 0.6778, 0.6815, 0.6815, + 0.6843, 0.6846, 0.6846, 0.6923, 0.6997, 0.7098, 0.7188, 0.7232, 0.7262, 0.7266, + 0.7359, 0.7368, 0.7337, 0.7317, 0.7387, 0.7467, 0.7461, 0.7366, 0.7319, 0.7361, + 0.7437, 0.7432, 0.7461, 0.7461, 0.7454, 0.7549, 0.7742, 0.7801, 0.7903, 0.7876, + 0.7928, 0.7991, 0.8007, 0.7823, 0.7661, 0.785, 0.7863, 0.7862, 0.7821, 0.7858, + 0.7731, 0.7779, 0.7844, 0.7866, 0.7864, 0.7788, 0.7875, 0.7971, 0.8004, 0.7857, + 0.7932, 0.7938, 0.7927, 0.7918, 0.7919, 0.7989, 0.7988, 0.7949, 0.7948, 0.7882, + 0.7745, 0.771, 0.775, 0.7791, 0.7882, 0.7882, 0.7899, 0.7905, 0.7889, 0.7879, + 0.7855, 0.7866, 0.7865, 0.7795, 0.7758, 0.7717, 0.761, 0.7497, 0.7471, 0.7473, + 0.7407, 0.7288, 0.7074, 0.6927, 0.7083, 0.7191, 0.719, 0.7153, 0.7156, 0.7158, + 0.714, 0.7119, 0.7129, 0.7129, 0.7049, 0.7095 + ]; + + var masterChart, + detailChart; + + $(document).ready(function() { + + + // create the master chart + function createMaster() { + masterChart = $('#master-container').highcharts({ + chart: { + reflow: false, + borderWidth: 0, + backgroundColor: null, + marginLeft: 50, + marginRight: 20, + zoomType: 'x', + events: { + + // listen to the selection event on the master chart to update the + // extremes of the detail chart + selection: function(event) { + var extremesObject = event.xAxis[0], + min = extremesObject.min, + max = extremesObject.max, + detailData = [], + xAxis = this.xAxis[0]; + + // reverse engineer the last part of the data + jQuery.each(this.series[0].data, function(i, point) { + if (point.x > min && point.x < max) { + detailData.push({ + x: point.x, + y: point.y + }); + } + }); + + // move the plot bands to reflect the new detail span + xAxis.removePlotBand('mask-before'); + xAxis.addPlotBand({ + id: 'mask-before', + from: Date.UTC(2006, 0, 1), + to: min, + color: 'rgba(0, 0, 0, 0.2)' + }); + + xAxis.removePlotBand('mask-after'); + xAxis.addPlotBand({ + id: 'mask-after', + from: max, + to: Date.UTC(2008, 11, 31), + color: 'rgba(0, 0, 0, 0.2)' + }); + + + detailChart.series[0].setData(detailData); + + return false; + } + } + }, + title: { + text: null + }, + xAxis: { + type: 'datetime', + showLastTickLabel: true, + maxZoom: 14 * 24 * 3600000, // fourteen days + plotBands: [{ + id: 'mask-before', + from: Date.UTC(2006, 0, 1), + to: Date.UTC(2008, 7, 1), + color: 'rgba(0, 0, 0, 0.2)' + }], + title: { + text: null + } + }, + yAxis: { + gridLineWidth: 0, + labels: { + enabled: false + }, + title: { + text: null + }, + min: 0.6, + showFirstLabel: false + }, + tooltip: { + formatter: function() { + return false; + } + }, + legend: { + enabled: false + }, + credits: { + enabled: false + }, + plotOptions: { + series: { + fillColor: { + linearGradient: [0, 0, 0, 70], + stops: [ + [0, '#4572A7'], + [1, 'rgba(0,0,0,0)'] + ] + }, + lineWidth: 1, + marker: { + enabled: false + }, + shadow: false, + states: { + hover: { + lineWidth: 1 + } + }, + enableMouseTracking: false + } + }, + + series: [{ + type: 'area', + name: 'USD to EUR', + pointInterval: 24 * 3600 * 1000, + pointStart: Date.UTC(2006, 0, 01), + data: data + }], + + exporting: { + enabled: false + } + + }, function(masterChart) { + createDetail(masterChart) + }) + .highcharts(); // return chart instance + } + + // create the detail chart + function createDetail(masterChart) { + + // prepare the detail chart + var detailData = [], + detailStart = Date.UTC(2008, 7, 1); + + jQuery.each(masterChart.series[0].data, function(i, point) { + if (point.x >= detailStart) { + detailData.push(point.y); + } + }); + + // create a detail chart referenced by a global variable + detailChart = $('#detail-container').highcharts({ + chart: { + marginBottom: 120, + reflow: false, + marginLeft: 50, + marginRight: 20, + style: { + position: 'absolute' + } + }, + credits: { + enabled: false + }, + title: { + text: 'Historical USD to EUR Exchange Rate' + }, + subtitle: { + text: 'Select an area by dragging across the lower chart' + }, + xAxis: { + type: 'datetime' + }, + yAxis: { + title: { + text: null + }, + maxZoom: 0.1 + }, + tooltip: { + formatter: function() { + var point = this.points[0]; + return ''+ point.series.name +'
'+ + Highcharts.dateFormat('%A %B %e %Y', this.x) + ':
'+ + '1 USD = '+ Highcharts.numberFormat(point.y, 2) +' EUR'; + }, + shared: true + }, + legend: { + enabled: false + }, + plotOptions: { + series: { + marker: { + enabled: false, + states: { + hover: { + enabled: true, + radius: 3 + } + } + } + } + }, + series: [{ + name: 'USD to EUR', + pointStart: detailStart, + pointInterval: 24 * 3600 * 1000, + data: detailData + }], + + exporting: { + enabled: false + } + + }).highcharts(); // return chart + } + + // make the container smaller and add a second container for the master chart + var $container = $('#master-detail-chart') + .css('position', 'relative'); + + var $detailContainer = $('
') + .appendTo($container); + + var $masterContainer = $('
') + .css({ position: 'absolute', top: 300, height: 80, width: '100%' }) + .appendTo($container); + + // create master and in its callback, create the detail chart + createMaster(); + }); + + // !IMPORTANT -- FIX ERROR SIDEBAR MENU IN CHARTS-DYNAMIC PAGE + $(".page-content").height("1000px"); + $("#master-detail-chart").parent().height("400px"); +}); + \ No newline at end of file diff --git a/src/main/webapp/static/script/charts-highchart-line.js b/src/main/webapp/static/script/charts-highchart-line.js new file mode 100644 index 0000000..d0b26b3 --- /dev/null +++ b/src/main/webapp/static/script/charts-highchart-line.js @@ -0,0 +1,669 @@ +$(function () { + + /* Ajax loaded data, clickable points */ + $('#ajax-loaded-data').highcharts({ + title: { + text: 'Monthly Average Temperature', + x: -20 //center + }, + subtitle: { + text: 'Source: WorldClimate.com', + x: -20 + }, + xAxis: { + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + }, + yAxis: { + title: { + text: 'Temperature (°C)' + }, + plotLines: [{ + value: 0, + width: 1, + color: '#808080' + }] + }, + tooltip: { + valueSuffix: '°C' + }, + legend: { + layout: 'vertical', + align: 'right', + verticalAlign: 'middle', + borderWidth: 0 + }, + series: [{ + name: 'Tokyo', + data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] + }, { + name: 'New York', + data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5] + }, { + name: 'Berlin', + data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0] + }, { + name: 'London', + data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8] + }] + }); + + /* With data labels */ + $('#with-data-labels').highcharts({ + chart: { + type: 'line' + }, + title: { + text: 'Monthly Average Temperature' + }, + subtitle: { + text: 'Source: WorldClimate.com' + }, + xAxis: { + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + }, + yAxis: { + title: { + text: 'Temperature (°C)' + } + }, + tooltip: { + enabled: false, + formatter: function() { + return ''+ this.series.name +'
'+ + this.x +': '+ this.y +'°C'; + } + }, + plotOptions: { + line: { + dataLabels: { + enabled: true + }, + enableMouseTracking: false + } + }, + series: [{ + name: 'Tokyo', + data: [7.0, 6.9, 9.5, 14.5, 18.4, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] + }, { + name: 'London', + data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8] + }] + }); + + /* Time series, zoomable */ + $('#time-series-zoomable').highcharts({ + chart: { + zoomType: 'x', + spacingRight: 20 + }, + title: { + text: 'USD to EUR exchange rate from 2006 through 2008' + }, + subtitle: { + text: document.ontouchstart === undefined ? + 'Click and drag in the plot area to zoom in' : + 'Pinch the chart to zoom in' + }, + xAxis: { + type: 'datetime', + maxZoom: 14 * 24 * 3600000, // fourteen days + title: { + text: null + } + }, + yAxis: { + title: { + text: 'Exchange rate' + } + }, + tooltip: { + shared: true + }, + legend: { + enabled: false + }, + plotOptions: { + area: { + fillColor: { + linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1}, + stops: [ + [0, Highcharts.getOptions().colors[0]], + [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')] + ] + }, + lineWidth: 1, + marker: { + enabled: false + }, + shadow: false, + states: { + hover: { + lineWidth: 1 + } + }, + threshold: null + } + }, + + series: [{ + type: 'area', + name: 'USD to EUR', + pointInterval: 24 * 3600 * 1000, + pointStart: Date.UTC(2006, 0, 01), + data: [ + 0.8446, 0.8445, 0.8444, 0.8451, 0.8418, 0.8264, 0.8258, 0.8232, 0.8233, 0.8258, + 0.8283, 0.8278, 0.8256, 0.8292, 0.8239, 0.8239, 0.8245, 0.8265, 0.8261, 0.8269, + 0.8273, 0.8244, 0.8244, 0.8172, 0.8139, 0.8146, 0.8164, 0.82, 0.8269, 0.8269, + 0.8269, 0.8258, 0.8247, 0.8286, 0.8289, 0.8316, 0.832, 0.8333, 0.8352, 0.8357, + 0.8355, 0.8354, 0.8403, 0.8403, 0.8406, 0.8403, 0.8396, 0.8418, 0.8409, 0.8384, + 0.8386, 0.8372, 0.839, 0.84, 0.8389, 0.84, 0.8423, 0.8423, 0.8435, 0.8422, + 0.838, 0.8373, 0.8316, 0.8303, 0.8303, 0.8302, 0.8369, 0.84, 0.8385, 0.84, + 0.8401, 0.8402, 0.8381, 0.8351, 0.8314, 0.8273, 0.8213, 0.8207, 0.8207, 0.8215, + 0.8242, 0.8273, 0.8301, 0.8346, 0.8312, 0.8312, 0.8312, 0.8306, 0.8327, 0.8282, + 0.824, 0.8255, 0.8256, 0.8273, 0.8209, 0.8151, 0.8149, 0.8213, 0.8273, 0.8273, + 0.8261, 0.8252, 0.824, 0.8262, 0.8258, 0.8261, 0.826, 0.8199, 0.8153, 0.8097, + 0.8101, 0.8119, 0.8107, 0.8105, 0.8084, 0.8069, 0.8047, 0.8023, 0.7965, 0.7919, + 0.7921, 0.7922, 0.7934, 0.7918, 0.7915, 0.787, 0.7861, 0.7861, 0.7853, 0.7867, + 0.7827, 0.7834, 0.7766, 0.7751, 0.7739, 0.7767, 0.7802, 0.7788, 0.7828, 0.7816, + 0.7829, 0.783, 0.7829, 0.7781, 0.7811, 0.7831, 0.7826, 0.7855, 0.7855, 0.7845, + 0.7798, 0.7777, 0.7822, 0.7785, 0.7744, 0.7743, 0.7726, 0.7766, 0.7806, 0.785, + 0.7907, 0.7912, 0.7913, 0.7931, 0.7952, 0.7951, 0.7928, 0.791, 0.7913, 0.7912, + 0.7941, 0.7953, 0.7921, 0.7919, 0.7968, 0.7999, 0.7999, 0.7974, 0.7942, 0.796, + 0.7969, 0.7862, 0.7821, 0.7821, 0.7821, 0.7811, 0.7833, 0.7849, 0.7819, 0.7809, + 0.7809, 0.7827, 0.7848, 0.785, 0.7873, 0.7894, 0.7907, 0.7909, 0.7947, 0.7987, + 0.799, 0.7927, 0.79, 0.7878, 0.7878, 0.7907, 0.7922, 0.7937, 0.786, 0.787, + 0.7838, 0.7838, 0.7837, 0.7836, 0.7806, 0.7825, 0.7798, 0.777, 0.777, 0.7772, + 0.7793, 0.7788, 0.7785, 0.7832, 0.7865, 0.7865, 0.7853, 0.7847, 0.7809, 0.778, + 0.7799, 0.78, 0.7801, 0.7765, 0.7785, 0.7811, 0.782, 0.7835, 0.7845, 0.7844, + 0.782, 0.7811, 0.7795, 0.7794, 0.7806, 0.7794, 0.7794, 0.7778, 0.7793, 0.7808, + 0.7824, 0.787, 0.7894, 0.7893, 0.7882, 0.7871, 0.7882, 0.7871, 0.7878, 0.79, + 0.7901, 0.7898, 0.7879, 0.7886, 0.7858, 0.7814, 0.7825, 0.7826, 0.7826, 0.786, + 0.7878, 0.7868, 0.7883, 0.7893, 0.7892, 0.7876, 0.785, 0.787, 0.7873, 0.7901, + 0.7936, 0.7939, 0.7938, 0.7956, 0.7975, 0.7978, 0.7972, 0.7995, 0.7995, 0.7994, + 0.7976, 0.7977, 0.796, 0.7922, 0.7928, 0.7929, 0.7948, 0.797, 0.7953, 0.7907, + 0.7872, 0.7852, 0.7852, 0.786, 0.7862, 0.7836, 0.7837, 0.784, 0.7867, 0.7867, + 0.7869, 0.7837, 0.7827, 0.7825, 0.7779, 0.7791, 0.779, 0.7787, 0.78, 0.7807, + 0.7803, 0.7817, 0.7799, 0.7799, 0.7795, 0.7801, 0.7765, 0.7725, 0.7683, 0.7641, + 0.7639, 0.7616, 0.7608, 0.759, 0.7582, 0.7539, 0.75, 0.75, 0.7507, 0.7505, + 0.7516, 0.7522, 0.7531, 0.7577, 0.7577, 0.7582, 0.755, 0.7542, 0.7576, 0.7616, + 0.7648, 0.7648, 0.7641, 0.7614, 0.757, 0.7587, 0.7588, 0.762, 0.762, 0.7617, + 0.7618, 0.7615, 0.7612, 0.7596, 0.758, 0.758, 0.758, 0.7547, 0.7549, 0.7613, + 0.7655, 0.7693, 0.7694, 0.7688, 0.7678, 0.7708, 0.7727, 0.7749, 0.7741, 0.7741, + 0.7732, 0.7727, 0.7737, 0.7724, 0.7712, 0.772, 0.7721, 0.7717, 0.7704, 0.769, + 0.7711, 0.774, 0.7745, 0.7745, 0.774, 0.7716, 0.7713, 0.7678, 0.7688, 0.7718, + 0.7718, 0.7728, 0.7729, 0.7698, 0.7685, 0.7681, 0.769, 0.769, 0.7698, 0.7699, + 0.7651, 0.7613, 0.7616, 0.7614, 0.7614, 0.7607, 0.7602, 0.7611, 0.7622, 0.7615, + 0.7598, 0.7598, 0.7592, 0.7573, 0.7566, 0.7567, 0.7591, 0.7582, 0.7585, 0.7613, + 0.7631, 0.7615, 0.76, 0.7613, 0.7627, 0.7627, 0.7608, 0.7583, 0.7575, 0.7562, + 0.752, 0.7512, 0.7512, 0.7517, 0.752, 0.7511, 0.748, 0.7509, 0.7531, 0.7531, + 0.7527, 0.7498, 0.7493, 0.7504, 0.75, 0.7491, 0.7491, 0.7485, 0.7484, 0.7492, + 0.7471, 0.7459, 0.7477, 0.7477, 0.7483, 0.7458, 0.7448, 0.743, 0.7399, 0.7395, + 0.7395, 0.7378, 0.7382, 0.7362, 0.7355, 0.7348, 0.7361, 0.7361, 0.7365, 0.7362, + 0.7331, 0.7339, 0.7344, 0.7327, 0.7327, 0.7336, 0.7333, 0.7359, 0.7359, 0.7372, + 0.736, 0.736, 0.735, 0.7365, 0.7384, 0.7395, 0.7413, 0.7397, 0.7396, 0.7385, + 0.7378, 0.7366, 0.74, 0.7411, 0.7406, 0.7405, 0.7414, 0.7431, 0.7431, 0.7438, + 0.7443, 0.7443, 0.7443, 0.7434, 0.7429, 0.7442, 0.744, 0.7439, 0.7437, 0.7437, + 0.7429, 0.7403, 0.7399, 0.7418, 0.7468, 0.748, 0.748, 0.749, 0.7494, 0.7522, + 0.7515, 0.7502, 0.7472, 0.7472, 0.7462, 0.7455, 0.7449, 0.7467, 0.7458, 0.7427, + 0.7427, 0.743, 0.7429, 0.744, 0.743, 0.7422, 0.7388, 0.7388, 0.7369, 0.7345, + 0.7345, 0.7345, 0.7352, 0.7341, 0.7341, 0.734, 0.7324, 0.7272, 0.7264, 0.7255, + 0.7258, 0.7258, 0.7256, 0.7257, 0.7247, 0.7243, 0.7244, 0.7235, 0.7235, 0.7235, + 0.7235, 0.7262, 0.7288, 0.7301, 0.7337, 0.7337, 0.7324, 0.7297, 0.7317, 0.7315, + 0.7288, 0.7263, 0.7263, 0.7242, 0.7253, 0.7264, 0.727, 0.7312, 0.7305, 0.7305, + 0.7318, 0.7358, 0.7409, 0.7454, 0.7437, 0.7424, 0.7424, 0.7415, 0.7419, 0.7414, + 0.7377, 0.7355, 0.7315, 0.7315, 0.732, 0.7332, 0.7346, 0.7328, 0.7323, 0.734, + 0.734, 0.7336, 0.7351, 0.7346, 0.7321, 0.7294, 0.7266, 0.7266, 0.7254, 0.7242, + 0.7213, 0.7197, 0.7209, 0.721, 0.721, 0.721, 0.7209, 0.7159, 0.7133, 0.7105, + 0.7099, 0.7099, 0.7093, 0.7093, 0.7076, 0.707, 0.7049, 0.7012, 0.7011, 0.7019, + 0.7046, 0.7063, 0.7089, 0.7077, 0.7077, 0.7077, 0.7091, 0.7118, 0.7079, 0.7053, + 0.705, 0.7055, 0.7055, 0.7045, 0.7051, 0.7051, 0.7017, 0.7, 0.6995, 0.6994, + 0.7014, 0.7036, 0.7021, 0.7002, 0.6967, 0.695, 0.695, 0.6939, 0.694, 0.6922, + 0.6919, 0.6914, 0.6894, 0.6891, 0.6904, 0.689, 0.6834, 0.6823, 0.6807, 0.6815, + 0.6815, 0.6847, 0.6859, 0.6822, 0.6827, 0.6837, 0.6823, 0.6822, 0.6822, 0.6792, + 0.6746, 0.6735, 0.6731, 0.6742, 0.6744, 0.6739, 0.6731, 0.6761, 0.6761, 0.6785, + 0.6818, 0.6836, 0.6823, 0.6805, 0.6793, 0.6849, 0.6833, 0.6825, 0.6825, 0.6816, + 0.6799, 0.6813, 0.6809, 0.6868, 0.6933, 0.6933, 0.6945, 0.6944, 0.6946, 0.6964, + 0.6965, 0.6956, 0.6956, 0.695, 0.6948, 0.6928, 0.6887, 0.6824, 0.6794, 0.6794, + 0.6803, 0.6855, 0.6824, 0.6791, 0.6783, 0.6785, 0.6785, 0.6797, 0.68, 0.6803, + 0.6805, 0.676, 0.677, 0.677, 0.6736, 0.6726, 0.6764, 0.6821, 0.6831, 0.6842, + 0.6842, 0.6887, 0.6903, 0.6848, 0.6824, 0.6788, 0.6814, 0.6814, 0.6797, 0.6769, + 0.6765, 0.6733, 0.6729, 0.6758, 0.6758, 0.675, 0.678, 0.6833, 0.6856, 0.6903, + 0.6896, 0.6896, 0.6882, 0.6879, 0.6862, 0.6852, 0.6823, 0.6813, 0.6813, 0.6822, + 0.6802, 0.6802, 0.6784, 0.6748, 0.6747, 0.6747, 0.6748, 0.6733, 0.665, 0.6611, + 0.6583, 0.659, 0.659, 0.6581, 0.6578, 0.6574, 0.6532, 0.6502, 0.6514, 0.6514, + 0.6507, 0.651, 0.6489, 0.6424, 0.6406, 0.6382, 0.6382, 0.6341, 0.6344, 0.6378, + 0.6439, 0.6478, 0.6481, 0.6481, 0.6494, 0.6438, 0.6377, 0.6329, 0.6336, 0.6333, + 0.6333, 0.633, 0.6371, 0.6403, 0.6396, 0.6364, 0.6356, 0.6356, 0.6368, 0.6357, + 0.6354, 0.632, 0.6332, 0.6328, 0.6331, 0.6342, 0.6321, 0.6302, 0.6278, 0.6308, + 0.6324, 0.6324, 0.6307, 0.6277, 0.6269, 0.6335, 0.6392, 0.64, 0.6401, 0.6396, + 0.6407, 0.6423, 0.6429, 0.6472, 0.6485, 0.6486, 0.6467, 0.6444, 0.6467, 0.6509, + 0.6478, 0.6461, 0.6461, 0.6468, 0.6449, 0.647, 0.6461, 0.6452, 0.6422, 0.6422, + 0.6425, 0.6414, 0.6366, 0.6346, 0.635, 0.6346, 0.6346, 0.6343, 0.6346, 0.6379, + 0.6416, 0.6442, 0.6431, 0.6431, 0.6435, 0.644, 0.6473, 0.6469, 0.6386, 0.6356, + 0.634, 0.6346, 0.643, 0.6452, 0.6467, 0.6506, 0.6504, 0.6503, 0.6481, 0.6451, + 0.645, 0.6441, 0.6414, 0.6409, 0.6409, 0.6428, 0.6431, 0.6418, 0.6371, 0.6349, + 0.6333, 0.6334, 0.6338, 0.6342, 0.632, 0.6318, 0.637, 0.6368, 0.6368, 0.6383, + 0.6371, 0.6371, 0.6355, 0.632, 0.6277, 0.6276, 0.6291, 0.6274, 0.6293, 0.6311, + 0.631, 0.6312, 0.6312, 0.6304, 0.6294, 0.6348, 0.6378, 0.6368, 0.6368, 0.6368, + 0.636, 0.637, 0.6418, 0.6411, 0.6435, 0.6427, 0.6427, 0.6419, 0.6446, 0.6468, + 0.6487, 0.6594, 0.6666, 0.6666, 0.6678, 0.6712, 0.6705, 0.6718, 0.6784, 0.6811, + 0.6811, 0.6794, 0.6804, 0.6781, 0.6756, 0.6735, 0.6763, 0.6762, 0.6777, 0.6815, + 0.6802, 0.678, 0.6796, 0.6817, 0.6817, 0.6832, 0.6877, 0.6912, 0.6914, 0.7009, + 0.7012, 0.701, 0.7005, 0.7076, 0.7087, 0.717, 0.7105, 0.7031, 0.7029, 0.7006, + 0.7035, 0.7045, 0.6956, 0.6988, 0.6915, 0.6914, 0.6859, 0.6778, 0.6815, 0.6815, + 0.6843, 0.6846, 0.6846, 0.6923, 0.6997, 0.7098, 0.7188, 0.7232, 0.7262, 0.7266, + 0.7359, 0.7368, 0.7337, 0.7317, 0.7387, 0.7467, 0.7461, 0.7366, 0.7319, 0.7361, + 0.7437, 0.7432, 0.7461, 0.7461, 0.7454, 0.7549, 0.7742, 0.7801, 0.7903, 0.7876, + 0.7928, 0.7991, 0.8007, 0.7823, 0.7661, 0.785, 0.7863, 0.7862, 0.7821, 0.7858, + 0.7731, 0.7779, 0.7844, 0.7866, 0.7864, 0.7788, 0.7875, 0.7971, 0.8004, 0.7857, + 0.7932, 0.7938, 0.7927, 0.7918, 0.7919, 0.7989, 0.7988, 0.7949, 0.7948, 0.7882, + 0.7745, 0.771, 0.775, 0.7791, 0.7882, 0.7882, 0.7899, 0.7905, 0.7889, 0.7879, + 0.7855, 0.7866, 0.7865, 0.7795, 0.7758, 0.7717, 0.761, 0.7497, 0.7471, 0.7473, + 0.7407, 0.7288, 0.7074, 0.6927, 0.7083, 0.7191, 0.719, 0.7153, 0.7156, 0.7158, + 0.714, 0.7119, 0.7129, 0.7129, 0.7049, 0.7095 + ] + }] + }); + + /* Spline with inverted axes */ + $('#spline-with-inverted-axes').highcharts({ + chart: { + type: 'spline', + inverted: true + }, + title: { + text: 'Atmosphere Temperature by Altitude' + }, + subtitle: { + text: 'According to the Standard Atmosphere Model' + }, + xAxis: { + reversed: false, + title: { + enabled: true, + text: 'Altitude' + }, + labels: { + formatter: function() { + return this.value +'km'; + } + }, + maxPadding: 0.05, + showLastLabel: true + }, + yAxis: { + title: { + text: 'Temperature' + }, + labels: { + formatter: function() { + return this.value + '°'; + } + }, + lineWidth: 2 + }, + legend: { + enabled: false + }, + tooltip: { + headerFormat: '{series.name}
', + pointFormat: '{point.x} km: {point.y}°C' + }, + plotOptions: { + spline: { + marker: { + enable: false + } + } + }, + series: [{ + name: 'Temperature', + data: [[0, 15], [10, -50], [20, -56.5], [30, -46.5], [40, -22.1], + [50, -2.5], [60, -27.7], [70, -55.7], [80, -76.5]] + }] + }); + + /* Spline with symbols */ + $('#spline-with-symbols').highcharts({ + chart: { + type: 'spline' + }, + title: { + text: 'Monthly Average Temperature' + }, + subtitle: { + text: 'Source: WorldClimate.com' + }, + xAxis: { + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + }, + yAxis: { + title: { + text: 'Temperature' + }, + labels: { + formatter: function() { + return this.value +'°' + } + } + }, + tooltip: { + crosshairs: true, + shared: true + }, + plotOptions: { + spline: { + marker: { + radius: 4, + lineColor: '#666666', + lineWidth: 1 + } + } + }, + series: [{ + name: 'Tokyo', + marker: { + symbol: 'square' + }, + data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, { + y: 26.5, + marker: { + symbol: 'url(http://www.highcharts.com/demo/gfx/sun.png)' + } + }, 23.3, 18.3, 13.9, 9.6] + + }, { + name: 'London', + marker: { + symbol: 'diamond' + }, + data: [{ + y: 3.9, + marker: { + symbol: 'url(http://www.highcharts.com/demo/gfx/snow.png)' + } + }, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8] + }] + }); + + /* Spline with plot bands */ + $('#spline-with-plot-bands').highcharts({ + chart: { + type: 'spline' + }, + title: { + text: 'Wind speed during two days' + }, + subtitle: { + text: 'October 6th and 7th 2009 at two locations in Vik i Sogn, Norway' + }, + xAxis: { + type: 'datetime', + labels: { + overflow: 'justify' + } + }, + yAxis: { + title: { + text: 'Wind speed (m/s)' + }, + min: 0, + minorGridLineWidth: 0, + gridLineWidth: 0, + alternateGridColor: null, + plotBands: [{ // Light air + from: 0.3, + to: 1.5, + color: 'rgba(68, 170, 213, 0.1)', + label: { + text: 'Light air', + style: { + color: '#606060' + } + } + }, { // Light breeze + from: 1.5, + to: 3.3, + color: 'rgba(0, 0, 0, 0)', + label: { + text: 'Light breeze', + style: { + color: '#606060' + } + } + }, { // Gentle breeze + from: 3.3, + to: 5.5, + color: 'rgba(68, 170, 213, 0.1)', + label: { + text: 'Gentle breeze', + style: { + color: '#606060' + } + } + }, { // Moderate breeze + from: 5.5, + to: 8, + color: 'rgba(0, 0, 0, 0)', + label: { + text: 'Moderate breeze', + style: { + color: '#606060' + } + } + }, { // Fresh breeze + from: 8, + to: 11, + color: 'rgba(68, 170, 213, 0.1)', + label: { + text: 'Fresh breeze', + style: { + color: '#606060' + } + } + }, { // Strong breeze + from: 11, + to: 14, + color: 'rgba(0, 0, 0, 0)', + label: { + text: 'Strong breeze', + style: { + color: '#606060' + } + } + }, { // High wind + from: 14, + to: 15, + color: 'rgba(68, 170, 213, 0.1)', + label: { + text: 'High wind', + style: { + color: '#606060' + } + } + }] + }, + tooltip: { + valueSuffix: ' m/s' + }, + plotOptions: { + spline: { + lineWidth: 4, + states: { + hover: { + lineWidth: 5 + } + }, + marker: { + enabled: false + }, + pointInterval: 3600000, // one hour + pointStart: Date.UTC(2009, 9, 6, 0, 0, 0) + } + }, + series: [{ + name: 'Hestavollane', + data: [4.3, 5.1, 4.3, 5.2, 5.4, 4.7, 3.5, 4.1, 5.6, 7.4, 6.9, 7.1, + 7.9, 7.9, 7.5, 6.7, 7.7, 7.7, 7.4, 7.0, 7.1, 5.8, 5.9, 7.4, + 8.2, 8.5, 9.4, 8.1, 10.9, 10.4, 10.9, 12.4, 12.1, 9.5, 7.5, + 7.1, 7.5, 8.1, 6.8, 3.4, 2.1, 1.9, 2.8, 2.9, 1.3, 4.4, 4.2, + 3.0, 3.0] + + }, { + name: 'Voll', + data: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.3, 0.0, + 0.0, 0.4, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.6, 1.2, 1.7, 0.7, 2.9, 4.1, 2.6, 3.7, 3.9, 1.7, 2.3, + 3.0, 3.3, 4.8, 5.0, 4.8, 5.0, 3.2, 2.0, 0.9, 0.4, 0.3, 0.5, 0.4] + }] + , + navigation: { + menuItemStyle: { + fontSize: '10px' + } + } + }); + + /* Time data with irregular intervals */ + $('#time-data-with-irregular-intervals').highcharts({ + chart: { + type: 'spline' + }, + title: { + text: 'Snow depth at Vikjafjellet, Norway' + }, + subtitle: { + text: 'Irregular time data in Highcharts JS' + }, + xAxis: { + type: 'datetime', + dateTimeLabelFormats: { // don't display the dummy year + month: '%e. %b', + year: '%b' + } + }, + yAxis: { + title: { + text: 'Snow depth (m)' + }, + min: 0 + }, + tooltip: { + formatter: function() { + return ''+ this.series.name +'
'+ + Highcharts.dateFormat('%e. %b', this.x) +': '+ this.y +' m'; + } + }, + + series: [{ + name: 'Winter 2007-2008', + // Define the data points. All series have a dummy year + // of 1970/71 in order to be compared on the same x axis. Note + // that in JavaScript, months start at 0 for January, 1 for February etc. + data: [ + [Date.UTC(1970, 9, 27), 0 ], + [Date.UTC(1970, 10, 10), 0.6 ], + [Date.UTC(1970, 10, 18), 0.7 ], + [Date.UTC(1970, 11, 2), 0.8 ], + [Date.UTC(1970, 11, 9), 0.6 ], + [Date.UTC(1970, 11, 16), 0.6 ], + [Date.UTC(1970, 11, 28), 0.67], + [Date.UTC(1971, 0, 1), 0.81], + [Date.UTC(1971, 0, 8), 0.78], + [Date.UTC(1971, 0, 12), 0.98], + [Date.UTC(1971, 0, 27), 1.84], + [Date.UTC(1971, 1, 10), 1.80], + [Date.UTC(1971, 1, 18), 1.80], + [Date.UTC(1971, 1, 24), 1.92], + [Date.UTC(1971, 2, 4), 2.49], + [Date.UTC(1971, 2, 11), 2.79], + [Date.UTC(1971, 2, 15), 2.73], + [Date.UTC(1971, 2, 25), 2.61], + [Date.UTC(1971, 3, 2), 2.76], + [Date.UTC(1971, 3, 6), 2.82], + [Date.UTC(1971, 3, 13), 2.8 ], + [Date.UTC(1971, 4, 3), 2.1 ], + [Date.UTC(1971, 4, 26), 1.1 ], + [Date.UTC(1971, 5, 9), 0.25], + [Date.UTC(1971, 5, 12), 0 ] + ] + }, { + name: 'Winter 2008-2009', + data: [ + [Date.UTC(1970, 9, 18), 0 ], + [Date.UTC(1970, 9, 26), 0.2 ], + [Date.UTC(1970, 11, 1), 0.47], + [Date.UTC(1970, 11, 11), 0.55], + [Date.UTC(1970, 11, 25), 1.38], + [Date.UTC(1971, 0, 8), 1.38], + [Date.UTC(1971, 0, 15), 1.38], + [Date.UTC(1971, 1, 1), 1.38], + [Date.UTC(1971, 1, 8), 1.48], + [Date.UTC(1971, 1, 21), 1.5 ], + [Date.UTC(1971, 2, 12), 1.89], + [Date.UTC(1971, 2, 25), 2.0 ], + [Date.UTC(1971, 3, 4), 1.94], + [Date.UTC(1971, 3, 9), 1.91], + [Date.UTC(1971, 3, 13), 1.75], + [Date.UTC(1971, 3, 19), 1.6 ], + [Date.UTC(1971, 4, 25), 0.6 ], + [Date.UTC(1971, 4, 31), 0.35], + [Date.UTC(1971, 5, 7), 0 ] + ] + }, { + name: 'Winter 2009-2010', + data: [ + [Date.UTC(1970, 9, 9), 0 ], + [Date.UTC(1970, 9, 14), 0.15], + [Date.UTC(1970, 10, 28), 0.35], + [Date.UTC(1970, 11, 12), 0.46], + [Date.UTC(1971, 0, 1), 0.59], + [Date.UTC(1971, 0, 24), 0.58], + [Date.UTC(1971, 1, 1), 0.62], + [Date.UTC(1971, 1, 7), 0.65], + [Date.UTC(1971, 1, 23), 0.77], + [Date.UTC(1971, 2, 8), 0.77], + [Date.UTC(1971, 2, 14), 0.79], + [Date.UTC(1971, 2, 24), 0.86], + [Date.UTC(1971, 3, 4), 0.8 ], + [Date.UTC(1971, 3, 18), 0.94], + [Date.UTC(1971, 3, 24), 0.9 ], + [Date.UTC(1971, 4, 16), 0.39], + [Date.UTC(1971, 4, 21), 0 ] + ] + }] + }); + + /* Logarithmic axis */ + $('#logarithmic-axis').highcharts({ + + chart: { + }, + + title: { + text: 'Logarithmic axis demo' + }, + + xAxis: { + tickInterval: 1 + }, + + yAxis: { + type: 'logarithmic', + minorTickInterval: 0.1 + }, + + tooltip: { + headerFormat: '{series.name}
', + pointFormat: 'x = {point.x}, y = {point.y}' + }, + + series: [{ + data: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512], + pointStart: 1 + }] + }); + +}); diff --git a/src/main/webapp/static/script/charts-highchart-more.js b/src/main/webapp/static/script/charts-highchart-more.js new file mode 100644 index 0000000..f45ec78 --- /dev/null +++ b/src/main/webapp/static/script/charts-highchart-more.js @@ -0,0 +1,1212 @@ +$(function () { + + /* Angular gauge */ + $('#angular-gauge').highcharts({ + + chart: { + type: 'gauge', + plotBackgroundColor: null, + plotBackgroundImage: null, + plotBorderWidth: 0, + plotShadow: false + }, + + title: { + text: 'Speedometer' + }, + + pane: { + startAngle: -150, + endAngle: 150, + background: [{ + backgroundColor: { + linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, + stops: [ + [0, '#FFF'], + [1, '#333'] + ] + }, + borderWidth: 0, + outerRadius: '109%' + }, { + backgroundColor: { + linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, + stops: [ + [0, '#333'], + [1, '#FFF'] + ] + }, + borderWidth: 1, + outerRadius: '107%' + }, { + // default background + }, { + backgroundColor: '#DDD', + borderWidth: 0, + outerRadius: '105%', + innerRadius: '103%' + }] + }, + + // the value axis + yAxis: { + min: 0, + max: 200, + + minorTickInterval: 'auto', + minorTickWidth: 1, + minorTickLength: 10, + minorTickPosition: 'inside', + minorTickColor: '#666', + + tickPixelInterval: 30, + tickWidth: 2, + tickPosition: 'inside', + tickLength: 10, + tickColor: '#666', + labels: { + step: 2, + rotation: 'auto' + }, + title: { + text: 'km/h' + }, + plotBands: [{ + from: 0, + to: 120, + color: '#55BF3B' // green + }, { + from: 120, + to: 160, + color: '#DDDF0D' // yellow + }, { + from: 160, + to: 200, + color: '#DF5353' // red + }] + }, + + series: [{ + name: 'Speed', + data: [80], + tooltip: { + valueSuffix: ' km/h' + } + }] + + }, + // Add some life + function (chart) { + if (!chart.renderer.forExport) { + setInterval(function () { + var point = chart.series[0].points[0], + newVal, + inc = Math.round((Math.random() - 0.5) * 20); + + newVal = point.y + inc; + if (newVal < 0 || newVal > 200) { + newVal = point.y - inc; + } + + point.update(newVal); + + }, 3000); + } + }); + + /* Clock */ + $(function () { + /** + * Get the current time + */ + function getNow () { + var now = new Date(); + + return { + hours: now.getHours() + now.getMinutes() / 60, + minutes: now.getMinutes() * 12 / 60 + now.getSeconds() * 12 / 3600, + seconds: now.getSeconds() * 12 / 60 + }; + }; + + /** + * Pad numbers + */ + function pad(number, length) { + // Create an array of the remaining length +1 and join it with 0's + return new Array((length || 2) + 1 - String(number).length).join(0) + number; + } + + var now = getNow(); + + // Create the chart + $('#clock').highcharts({ + + chart: { + type: 'gauge', + plotBackgroundColor: null, + plotBackgroundImage: null, + plotBorderWidth: 0, + plotShadow: false, + height: 200 + }, + + credits: { + enabled: false + }, + + title: { + text: 'The Highcharts clock' + }, + + pane: { + background: [{ + // default background + }, { + // reflex for supported browsers + backgroundColor: Highcharts.svg ? { + radialGradient: { + cx: 0.5, + cy: -0.4, + r: 1.9 + }, + stops: [ + [0.5, 'rgba(255, 255, 255, 0.2)'], + [0.5, 'rgba(200, 200, 200, 0.2)'] + ] + } : null + }] + }, + + yAxis: { + labels: { + distance: -20 + }, + min: 0, + max: 12, + lineWidth: 0, + showFirstLabel: false, + + minorTickInterval: 'auto', + minorTickWidth: 1, + minorTickLength: 5, + minorTickPosition: 'inside', + minorGridLineWidth: 0, + minorTickColor: '#666', + + tickInterval: 1, + tickWidth: 2, + tickPosition: 'inside', + tickLength: 10, + tickColor: '#666', + title: { + text: 'Powered by
Highcharts', + style: { + color: '#BBB', + fontWeight: 'normal', + fontSize: '8px', + lineHeight: '10px' + }, + y: 10 + } + }, + + tooltip: { + formatter: function () { + return this.series.chart.tooltipText; + } + }, + + series: [{ + data: [{ + id: 'hour', + y: now.hours, + dial: { + radius: '60%', + baseWidth: 4, + baseLength: '95%', + rearLength: 0 + } + }, { + id: 'minute', + y: now.minutes, + dial: { + baseLength: '95%', + rearLength: 0 + } + }, { + id: 'second', + y: now.seconds, + dial: { + radius: '100%', + baseWidth: 1, + rearLength: '20%' + } + }], + animation: false, + dataLabels: { + enabled: false + } + }] + }, + + // Move + function (chart) { + setInterval(function () { + var hour = chart.get('hour'), + minute = chart.get('minute'), + second = chart.get('second'), + now = getNow(), + // run animation unless we're wrapping around from 59 to 0 + animation = now.seconds == 0 ? + false : + { + easing: 'easeOutElastic' + }; + + // Cache the tooltip text + chart.tooltipText = + pad(Math.floor(now.hours), 2) + ':' + + pad(Math.floor(now.minutes * 5), 2) + ':' + + pad(now.seconds * 5, 2); + + hour.update(now.hours, true, animation); + minute.update(now.minutes, true, animation); + second.update(now.seconds, true, animation); + + }, 1000); + + }); + }); + + // Extend jQuery with some easing (copied from jQuery UI) + $.extend($.easing, { + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + } + }); + + /* Gauge with dual axes */ + $('#gauge-with-dual-axes').highcharts({ + chart: { + type: 'gauge', + alignTicks: false, + plotBackgroundColor: null, + plotBackgroundImage: null, + plotBorderWidth: 0, + plotShadow: false + }, + + title: { + text: 'Speedometer with dual axes' + }, + + pane: { + startAngle: -150, + endAngle: 150 + }, + + yAxis: [{ + min: 0, + max: 200, + lineColor: '#339', + tickColor: '#339', + minorTickColor: '#339', + offset: -25, + lineWidth: 2, + labels: { + distance: -20, + rotation: 'auto' + }, + tickLength: 5, + minorTickLength: 5, + endOnTick: false + }, { + min: 0, + max: 124, + tickPosition: 'outside', + lineColor: '#933', + lineWidth: 2, + minorTickPosition: 'outside', + tickColor: '#933', + minorTickColor: '#933', + tickLength: 5, + minorTickLength: 5, + labels: { + distance: 12, + rotation: 'auto' + }, + offset: -20, + endOnTick: false + }], + + series: [{ + name: 'Speed', + data: [80], + dataLabels: { + formatter: function () { + var kmh = this.y, + mph = Math.round(kmh * 0.621); + return ''+ kmh + ' km/h
' + + '' + mph + ' mph'; + }, + backgroundColor: { + linearGradient: { + x1: 0, + y1: 0, + x2: 0, + y2: 1 + }, + stops: [ + [0, '#DDD'], + [1, '#FFF'] + ] + } + }, + tooltip: { + valueSuffix: ' km/h' + } + }] + + }, + // Add some life + function(chart) { + setInterval(function() { + var point = chart.series[0].points[0], + newVal, inc = Math.round((Math.random() - 0.5) * 20); + + newVal = point.y + inc; + if (newVal < 0 || newVal > 200) { + newVal = point.y - inc; + } + + point.update(newVal); + + }, 3000); + + }); + + /* VU meter */ + $('#VU-meter').highcharts({ + chart: { + type: 'gauge', + plotBorderWidth: 1, + plotBackgroundColor: { + linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, + stops: [ + [0, '#FFF4C6'], + [0.3, '#FFFFFF'], + [1, '#FFF4C6'] + ] + }, + plotBackgroundImage: null, + height: 200 + }, + + title: { + text: 'VU meter' + }, + + pane: [{ + startAngle: -45, + endAngle: 45, + background: null, + center: ['25%', '145%'], + size: 300 + }, { + startAngle: -45, + endAngle: 45, + background: null, + center: ['75%', '145%'], + size: 300 + }], + + yAxis: [{ + min: -20, + max: 6, + minorTickPosition: 'outside', + tickPosition: 'outside', + labels: { + rotation: 'auto', + distance: 20 + }, + plotBands: [{ + from: 0, + to: 6, + color: '#C02316', + innerRadius: '100%', + outerRadius: '105%' + }], + pane: 0, + title: { + text: 'VU
Channel A', + y: -40 + } + }, { + min: -20, + max: 6, + minorTickPosition: 'outside', + tickPosition: 'outside', + labels: { + rotation: 'auto', + distance: 20 + }, + plotBands: [{ + from: 0, + to: 6, + color: '#C02316', + innerRadius: '100%', + outerRadius: '105%' + }], + pane: 1, + title: { + text: 'VU
Channel B', + y: -40 + } + }], + + plotOptions: { + gauge: { + dataLabels: { + enabled: false + }, + dial: { + radius: '100%' + } + } + }, + + + series: [{ + data: [-20], + yAxis: 0 + }, { + data: [-20], + yAxis: 1 + }] + + }, + + // Let the music play + function(chart) { + setInterval(function() { + var left = chart.series[0].points[0], + right = chart.series[1].points[0], + leftVal, + inc = (Math.random() - 0.5) * 3; + + leftVal = left.y + inc; + rightVal = leftVal + inc / 3; + if (leftVal < -20 || leftVal > 6) { + leftVal = left.y - inc; + } + if (rightVal < -20 || rightVal > 6) { + rightVal = leftVal; + } + + left.update(leftVal, false); + right.update(rightVal, false); + chart.redraw(); + + }, 500); + + }); + + /* Polar chart */ + $('#polar-chart').highcharts({ + + chart: { + polar: true + }, + + title: { + text: 'Highcharts Polar Chart' + }, + + pane: { + startAngle: 0, + endAngle: 360 + }, + + xAxis: { + tickInterval: 45, + min: 0, + max: 360, + labels: { + formatter: function () { + return this.value + '°'; + } + } + }, + + yAxis: { + min: 0 + }, + + plotOptions: { + series: { + pointStart: 0, + pointInterval: 45 + }, + column: { + pointPadding: 0, + groupPadding: 0 + } + }, + + series: [{ + type: 'column', + name: 'Column', + data: [8, 7, 6, 5, 4, 3, 2, 1], + pointPlacement: 'between' + }, { + type: 'line', + name: 'Line', + data: [1, 2, 3, 4, 5, 6, 7, 8] + }, { + type: 'area', + name: 'Area', + data: [1, 8, 2, 7, 3, 6, 4, 5] + }] + }); + + /* Spiderweb */ + $('#spiderweb').highcharts({ + + chart: { + polar: true, + type: 'line' + }, + + title: { + text: 'Budget vs spending', + x: -80 + }, + + pane: { + size: '80%' + }, + + xAxis: { + categories: ['Sales', 'Marketing', 'Development', 'Customer Support', + 'Information Technology', 'Administration'], + tickmarkPlacement: 'on', + lineWidth: 0 + }, + + yAxis: { + gridLineInterpolation: 'polygon', + lineWidth: 0, + min: 0 + }, + + tooltip: { + shared: true, + pointFormat: '{series.name}: ${point.y:,.0f}
' + }, + + legend: { + align: 'right', + verticalAlign: 'top', + y: 70, + layout: 'vertical' + }, + + series: [{ + name: 'Allocated Budget', + data: [43000, 19000, 60000, 35000, 17000, 10000], + pointPlacement: 'on' + }, { + name: 'Actual Spending', + data: [50000, 39000, 42000, 31000, 26000, 14000], + pointPlacement: 'on' + }] + + }); + + /* Wind rose */ + $('#wind-rose').highcharts({ + data: { + table: 'freq', + startRow: 1, + endRow: 17, + endColumn: 7 + }, + + chart: { + polar: true, + type: 'column' + }, + + title: { + text: 'Wind rose for South Shore Met Station, Oregon' + }, + + subtitle: { + text: 'Source: or.water.usgs.gov' + }, + + pane: { + size: '85%' + }, + + legend: { + reversed: true, + align: 'right', + verticalAlign: 'top', + y: 100, + layout: 'vertical' + }, + + xAxis: { + tickmarkPlacement: 'on' + }, + + yAxis: { + min: 0, + endOnTick: false, + showLastLabel: true, + title: { + text: 'Frequency (%)' + }, + labels: { + formatter: function () { + return this.value + '%'; + } + } + }, + + tooltip: { + valueSuffix: '%', + followPointer: true + }, + + plotOptions: { + series: { + stacking: 'normal', + shadow: false, + groupPadding: 0, + pointPlacement: 'on' + } + } + }); + + /* Box plot */ + $('#box-plot').highcharts({ + + chart: { + type: 'boxplot' + }, + + title: { + text: 'Highcharts Box Plot Example' + }, + + legend: { + enabled: false + }, + + xAxis: { + categories: ['1', '2', '3', '4', '5'], + title: { + text: 'Experiment No.' + } + }, + + yAxis: { + title: { + text: 'Observations' + }, + plotLines: [{ + value: 932, + color: 'red', + width: 1, + label: { + text: 'Theoretical mean: 932', + align: 'center', + style: { + color: 'gray' + } + } + }] + }, + + series: [{ + name: 'Observations', + data: [ + [760, 801, 848, 895, 965], + [733, 853, 939, 980, 1080], + [714, 762, 817, 870, 918], + [724, 802, 806, 871, 950], + [834, 836, 864, 882, 910] + ], + tooltip: { + headerFormat: 'Experiment No {point.key}
' + } + }, { + name: 'Outlier', + color: Highcharts.getOptions().colors[0], + type: 'scatter', + data: [ // x, y positions where 0 is the first category + [0, 644], + [4, 718], + [4, 951], + [4, 969] + ], + marker: { + fillColor: 'white', + lineWidth: 1, + lineColor: Highcharts.getOptions().colors[0] + }, + tooltip: { + pointFormat: 'Observation: {point.y}' + } + }] + + }); + + /* Error bar */ + $('#error-bar').highcharts({ + chart: { + zoomType: 'xy' + }, + title: { + text: 'Temperature vs Rainfall' + }, + xAxis: [{ + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + }], + yAxis: [{ // Primary yAxis + labels: { + formatter: function() { + return this.value + '°C'; + }, + style: { + color: '#89A54E' + } + }, + title: { + text: 'Temperature', + style: { + color: '#89A54E' + } + } + }, { // Secondary yAxis + title: { + text: 'Rainfall', + style: { + color: '#4572A7' + } + }, + labels: { + formatter: function() { + return this.value + ' mm'; + }, + style: { + color: '#4572A7' + } + }, + opposite: true + }], + + tooltip: { + shared: true + }, + + series: [{ + name: 'Rainfall', + color: '#4572A7', + type: 'column', + yAxis: 1, + data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4], + tooltip: { + pointFormat: '{series.name}: {point.y:.1f} mm ' + } + }, { + name: 'Rainfall error', + type: 'errorbar', + yAxis: 1, + data: [[48, 51], [68, 73], [92, 110], [128, 136], [140, 150], [171, 179], [135, 143], [142, 149], [204, 220], [189, 199], [95, 110], [52, 56]], + tooltip: { + pointFormat: '(error range: {point.low}-{point.high} mm)
' + } + }, { + name: 'Temperature', + color: '#89A54E', + type: 'spline', + data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6], + tooltip: { + pointFormat: '{series.name}: {point.y:.1f}°C ' + } + }, { + name: 'Temperature error', + type: 'errorbar', + data: [[6, 8], [5.9, 7.6], [9.4, 10.4], [14.1, 15.9], [18.0, 20.1], [21.0, 24.0], [23.2, 25.3], [26.1, 27.8], [23.2, 23.9], [18.0, 21.1], [12.9, 14.0], [7.6, 10.0]], + tooltip: { + pointFormat: '(error range: {point.low}-{point.high}°C)
' + } + }] + }); + + /* Waterfall */ + $('#waterfall').highcharts({ + chart: { + type: 'waterfall' + }, + + title: { + text: 'Highcharts Waterfall' + }, + + xAxis: { + type: 'category' + }, + + yAxis: { + title: { + text: 'USD' + } + }, + + legend: { + enabled: false + }, + + tooltip: { + pointFormat: '${point.y:,.2f} USD' + }, + + series: [{ + upColor: Highcharts.getOptions().colors[2], + color: Highcharts.getOptions().colors[3], + data: [{ + name: 'Start', + y: 120000 + }, { + name: 'Product Revenue', + y: 569000 + }, { + name: 'Service Revenue', + y: 231000 + }, { + name: 'Positive Balance', + isIntermediateSum: true, + color: Highcharts.getOptions().colors[1] + }, { + name: 'Fixed Costs', + y: -342000 + }, { + name: 'Variable Costs', + y: -233000 + }, { + name: 'Balance', + isSum: true, + color: Highcharts.getOptions().colors[1] + }], + dataLabels: { + enabled: true, + formatter: function () { + return Highcharts.numberFormat(this.y / 1000, 0, ',') + 'k'; + }, + style: { + color: '#FFFFFF', + fontWeight: 'bold', + textShadow: '0px 0px 3px black' + } + }, + pointPadding: 0 + }] + }); + + /* Funnel chart */ + $('#funnel-chart').highcharts({ + chart: { + type: 'funnel', + marginRight: 100 + }, + title: { + text: 'Sales funnel', + x: -50 + }, + plotOptions: { + series: { + dataLabels: { + enabled: true, + format: '{point.name} ({point.y:,.0f})', + color: 'black', + softConnector: true + }, + neckWidth: '30%', + neckHeight: '25%' + + //-- Other available options + // height: pixels or percent + // width: pixels or percent + } + }, + legend: { + enabled: false + }, + series: [{ + name: 'Unique users', + data: [ + ['Website visits', 15654], + ['Downloads', 4064], + ['Requested price list', 1987], + ['Invoice sent', 976], + ['Finalized', 846] + ] + }] + }); + + /* General drawing */ + $(function () { + var chart = new Highcharts.Chart({ + chart: { + renderTo: 'general-drawing', + events: { + load: function () { + + // Draw the flow chart + var ren = this.renderer, + colors = Highcharts.getOptions().colors, + rightArrow = ['M', 0, 0, 'L', 100, 0, 'L', 95, 5, 'M', 100, 0, 'L', 95, -5], + leftArrow = ['M', 100, 0, 'L', 0, 0, 'L', 5, 5, 'M', 0, 0, 'L', 5, -5]; + + + + // Separator, client from service + ren.path(['M', 120, 40, 'L', 120, 330]) + .attr({ + 'stroke-width': 2, + stroke: 'silver', + dashstyle: 'dash' + }) + .add(); + + // Separator, CLI from service + ren.path(['M', 420, 40, 'L', 420, 330]) + .attr({ + 'stroke-width': 2, + stroke: 'silver', + dashstyle: 'dash' + }) + .add(); + + // Headers + ren.label('Web client', 20, 40) + .css({ + fontWeight: 'bold' + }) + .add(); + ren.label('Web service / CLI', 220, 40) + .css({ + fontWeight: 'bold' + }) + .add(); + ren.label('Command line client', 440, 40) + .css({ + fontWeight: 'bold' + }) + .add(); + + // SaaS client label + ren.label('SaaS client
(browser or
script)', 10, 82) + .attr({ + fill: colors[0], + stroke: 'white', + 'stroke-width': 2, + padding: 5, + r: 5 + }) + .css({ + color: 'white' + }) + .add() + .shadow(true); + + // Arrow from SaaS client to Phantom JS + ren.path(rightArrow) + .attr({ + 'stroke-width': 2, + stroke: colors[3] + }) + .translate(95, 95) + .add(); + + ren.label('POST options in JSON', 90, 75) + .css({ + fontSize: '10px', + color: colors[3] + }) + .add(); + + ren.label('PhantomJS', 210, 82) + .attr({ + r: 5, + width: 100, + fill: colors[1] + }) + .css({ + color: 'white', + fontWeight: 'bold' + }) + .add(); + + // Arrow from Phantom JS to Batik + ren.path(['M', 250, 110, 'L', 250, 185, 'L', 245, 180, 'M', 250, 185, 'L', 255, 180]) + .attr({ + 'stroke-width': 2, + stroke: colors[3] + }) + .add(); + + ren.label('SVG', 255, 120) + .css({ + color: colors[3], + fontSize: '10px' + }) + .add(); + + ren.label('Batik', 210, 200) + .attr({ + r: 5, + width: 100, + fill: colors[1] + }) + .css({ + color: 'white', + fontWeight: 'bold' + }) + .add(); + + // Arrow from Batik to SaaS client + ren.path(['M', 235, 185, 'L', 235, 155, 'C', 235, 130, 235, 130, 215, 130, + 'L', 95, 130, 'L', 100, 125, 'M', 95, 130, 'L', 100, 135]) + .attr({ + 'stroke-width': 2, + stroke: colors[3] + }) + .add(); + + ren.label('Rasterized image', 100, 110) + .css({ + color: colors[3], + fontSize: '10px' + }) + .add(); + + // Browser label + ren.label('Browser
running
Highcharts', 10, 180) + .attr({ + fill: colors[0], + stroke: 'white', + 'stroke-width': 2, + padding: 5, + r: 5 + }) + .css({ + color: 'white', + width: '100px' + }) + .add() + .shadow(true); + + + + // Arrow from Browser to Batik + ren.path(rightArrow) + .attr({ + 'stroke-width': 2, + stroke: colors[1] + }) + .translate(95, 205) + .add(); + + ren.label('POST SVG', 110, 185) + .css({ + color: colors[1], + fontSize: '10px' + }) + .add(); + + // Arrow from Batik to Browser + ren.path(leftArrow) + .attr({ + 'stroke-width': 2, + stroke: colors[1] + }) + .translate(95, 215) + .add(); + + ren.label('Rasterized image', 100, 215) + .css({ + color: colors[1], + fontSize: '10px' + }) + .add(); + + // Script label + ren.label('Script', 450, 82) + .attr({ + fill: colors[2], + stroke: 'white', + 'stroke-width': 2, + padding: 5, + r: 5 + }) + .css({ + color: 'white', + width: '100px' + }) + .add() + .shadow(true); + + // Arrow from Script to PhantomJS + ren.path(leftArrow) + .attr({ + 'stroke-width': 2, + stroke: colors[2] + }) + .translate(330, 90) + .add(); + + ren.label('Command', 340, 70) + .css({ + color: colors[2], + fontSize: '10px' + }) + .add(); + + // Arrow from PhantomJS to Script + ren.path(rightArrow) + .attr({ + 'stroke-width': 2, + stroke: colors[2] + }) + .translate(330, 100) + .add(); + + ren.label('Rasterized image', 330, 100) + .css({ + color: colors[2], + fontSize: '10px' + }) + .add(); + + + } + } + }, + title: { + text: 'Highcharts export server overview' + } + + }); + }); + +}); diff --git a/src/main/webapp/static/script/charts-highchart-pie.js b/src/main/webapp/static/script/charts-highchart-pie.js new file mode 100644 index 0000000..9ea3da7 --- /dev/null +++ b/src/main/webapp/static/script/charts-highchart-pie.js @@ -0,0 +1,320 @@ +$(function () { + + /* Pie Chart */ + $('#pie-chart').highcharts({ + chart: { + plotBackgroundColor: null, + plotBorderWidth: null, + plotShadow: false + }, + title: { + text: 'Browser market shares at a specific website, 2010' + }, + tooltip: { + pointFormat: '{series.name}: {point.percentage:.1f}%' + }, + plotOptions: { + pie: { + allowPointSelect: true, + cursor: 'pointer', + dataLabels: { + enabled: true, + color: '#000000', + connectorColor: '#000000', + format: '{point.name}: {point.percentage:.1f} %' + } + } + }, + series: [{ + type: 'pie', + name: 'Browser share', + data: [ + ['Firefox', 45.0], + ['IE', 26.8], + { + name: 'Chrome', + y: 12.8, + sliced: true, + selected: true + }, + ['Safari', 8.5], + ['Opera', 6.2], + ['Others', 0.7] + ] + }] + }); + + /* Pie with gradient fill */ + // Radialize the colors + Highcharts.getOptions().colors = Highcharts.map(Highcharts.getOptions().colors, function(color) { + return { + radialGradient: { cx: 0.5, cy: 0.3, r: 0.7 }, + stops: [ + [0, color], + [1, Highcharts.Color(color).brighten(-0.3).get('rgb')] // darken + ] + }; + }); + + // Build the chart + $('#pie-with-gradient-fill').highcharts({ + chart: { + plotBackgroundColor: null, + plotBorderWidth: null, + plotShadow: false + }, + title: { + text: 'Browser market shares at a specific website, 2010' + }, + tooltip: { + pointFormat: '{series.name}: {point.percentage:.1f}%' + }, + plotOptions: { + pie: { + allowPointSelect: true, + cursor: 'pointer', + dataLabels: { + enabled: true, + color: '#000000', + connectorColor: '#000000', + formatter: function() { + return ''+ this.point.name +': '+ this.percentage +' %'; + } + } + } + }, + series: [{ + type: 'pie', + name: 'Browser share', + data: [ + ['Firefox', 45.0], + ['IE', 26.8], + { + name: 'Chrome', + y: 12.8, + sliced: true, + selected: true + }, + ['Safari', 8.5], + ['Opera', 6.2], + ['Others', 0.7] + ] + }] + }); + + /* Pie with legend */ + $('#pie-with-legend').highcharts({ + chart: { + plotBackgroundColor: null, + plotBorderWidth: null, + plotShadow: false + }, + title: { + text: 'Browser market shares at a specific website, 2010' + }, + tooltip: { + pointFormat: '{series.name}: {point.percentage:.1f}%' + }, + plotOptions: { + pie: { + allowPointSelect: true, + cursor: 'pointer', + dataLabels: { + enabled: false + }, + showInLegend: true + } + }, + series: [{ + type: 'pie', + name: 'Browser share', + data: [ + ['Firefox', 45.0], + ['IE', 26.8], + { + name: 'Chrome', + y: 12.8, + sliced: true, + selected: true + }, + ['Safari', 8.5], + ['Opera', 6.2], + ['Others', 0.7] + ] + }] + }); + + /* Donut chart */ + var colors = Highcharts.getOptions().colors, + categories = ['MSIE', 'Firefox', 'Chrome', 'Safari', 'Opera'], + name = 'Browser brands', + data = [{ + y: 55.11, + color: colors[0], + drilldown: { + name: 'MSIE versions', + categories: ['MSIE 6.0', 'MSIE 7.0', 'MSIE 8.0', 'MSIE 9.0'], + data: [10.85, 7.35, 33.06, 2.81], + color: colors[0] + } + }, { + y: 21.63, + color: colors[1], + drilldown: { + name: 'Firefox versions', + categories: ['Firefox 2.0', 'Firefox 3.0', 'Firefox 3.5', 'Firefox 3.6', 'Firefox 4.0'], + data: [0.20, 0.83, 1.58, 13.12, 5.43], + color: colors[1] + } + }, { + y: 11.94, + color: colors[2], + drilldown: { + name: 'Chrome versions', + categories: ['Chrome 5.0', 'Chrome 6.0', 'Chrome 7.0', 'Chrome 8.0', 'Chrome 9.0', + 'Chrome 10.0', 'Chrome 11.0', 'Chrome 12.0'], + data: [0.12, 0.19, 0.12, 0.36, 0.32, 9.91, 0.50, 0.22], + color: colors[2] + } + }, { + y: 7.15, + color: colors[3], + drilldown: { + name: 'Safari versions', + categories: ['Safari 5.0', 'Safari 4.0', 'Safari Win 5.0', 'Safari 4.1', 'Safari/Maxthon', + 'Safari 3.1', 'Safari 4.1'], + data: [4.55, 1.42, 0.23, 0.21, 0.20, 0.19, 0.14], + color: colors[3] + } + }, { + y: 2.14, + color: colors[4], + drilldown: { + name: 'Opera versions', + categories: ['Opera 9.x', 'Opera 10.x', 'Opera 11.x'], + data: [ 0.12, 0.37, 1.65], + color: colors[4] + } + }]; + + + // Build the data arrays + var browserData = []; + var versionsData = []; + for (var i = 0; i < data.length; i++) { + + // add browser data + browserData.push({ + name: categories[i], + y: data[i].y, + color: data[i].color + }); + + // add version data + for (var j = 0; j < data[i].drilldown.data.length; j++) { + var brightness = 0.2 - (j / data[i].drilldown.data.length) / 5 ; + versionsData.push({ + name: data[i].drilldown.categories[j], + y: data[i].drilldown.data[j], + color: Highcharts.Color(data[i].color).brighten(brightness).get() + }); + } + } + + // Create the chart + $('#donut-chart').highcharts({ + chart: { + type: 'pie' + }, + title: { + text: 'Browser market share, April, 2011' + }, + yAxis: { + title: { + text: 'Total percent market share' + } + }, + plotOptions: { + pie: { + shadow: false, + center: ['50%', '50%'] + } + }, + tooltip: { + valueSuffix: '%' + }, + series: [{ + name: 'Browsers', + data: browserData, + size: '60%', + dataLabels: { + formatter: function() { + return this.y > 5 ? this.point.name : null; + }, + color: 'white', + distance: -30 + } + }, { + name: 'Versions', + data: versionsData, + size: '80%', + innerSize: '60%', + dataLabels: { + formatter: function() { + // display only if larger than 1 + return this.y > 1 ? ''+ this.point.name +': '+ this.y +'%' : null; + } + } + }] + }); + + /* Semi circle donut */ + $('#semi-circle-donut').highcharts({ + chart: { + plotBackgroundColor: null, + plotBorderWidth: 0, + plotShadow: false + }, + title: { + text: 'Browser
shares', + align: 'center', + verticalAlign: 'middle', + y: 50 + }, + tooltip: { + pointFormat: '{series.name}: {point.percentage:.1f}%' + }, + plotOptions: { + pie: { + dataLabels: { + enabled: true, + distance: -50, + style: { + fontWeight: 'bold', + color: 'white', + textShadow: '0px 1px 2px black' + } + }, + startAngle: -90, + endAngle: 90, + center: ['50%', '75%'] + } + }, + series: [{ + type: 'pie', + name: 'Browser share', + innerSize: '50%', + data: [ + ['Firefox', 45.0], + ['IE', 26.8], + ['Chrome', 12.8], + ['Safari', 8.5], + ['Opera', 6.2], + ['Others', 0.7] + ] + }] + }); + + +}); + diff --git a/src/main/webapp/static/script/charts-highchart-scatter-bubble.js b/src/main/webapp/static/script/charts-highchart-scatter-bubble.js new file mode 100644 index 0000000..b32dee7 --- /dev/null +++ b/src/main/webapp/static/script/charts-highchart-scatter-bubble.js @@ -0,0 +1,277 @@ +$(function () { + + /* Scatter plot */ + $('#scatter-plot').highcharts({ + chart: { + type: 'scatter', + zoomType: 'xy' + }, + title: { + text: 'Height Versus Weight of 507 Individuals by Gender' + }, + subtitle: { + text: 'Source: Heinz 2003' + }, + xAxis: { + title: { + enabled: true, + text: 'Height (cm)' + }, + startOnTick: true, + endOnTick: true, + showLastLabel: true + }, + yAxis: { + title: { + text: 'Weight (kg)' + } + }, + legend: { + layout: 'vertical', + align: 'left', + verticalAlign: 'top', + x: 100, + y: 70, + floating: true, + backgroundColor: '#FFFFFF', + borderWidth: 1 + }, + plotOptions: { + scatter: { + marker: { + radius: 5, + states: { + hover: { + enabled: true, + lineColor: 'rgb(100,100,100)' + } + } + }, + states: { + hover: { + marker: { + enabled: false + } + } + }, + tooltip: { + headerFormat: '{series.name}
', + pointFormat: '{point.x} cm, {point.y} kg' + } + } + }, + series: [{ + name: 'Female', + color: 'rgba(223, 83, 83, .5)', + data: [[161.2, 51.6], [167.5, 59.0], [159.5, 49.2], [157.0, 63.0], [155.8, 53.6], + [170.0, 59.0], [159.1, 47.6], [166.0, 69.8], [176.2, 66.8], [160.2, 75.2], + [172.5, 55.2], [170.9, 54.2], [172.9, 62.5], [153.4, 42.0], [160.0, 50.0], + [147.2, 49.8], [168.2, 49.2], [175.0, 73.2], [157.0, 47.8], [167.6, 68.8], + [159.5, 50.6], [175.0, 82.5], [166.8, 57.2], [176.5, 87.8], [170.2, 72.8], + [174.0, 54.5], [173.0, 59.8], [179.9, 67.3], [170.5, 67.8], [160.0, 47.0], + [154.4, 46.2], [162.0, 55.0], [176.5, 83.0], [160.0, 54.4], [152.0, 45.8], + [162.1, 53.6], [170.0, 73.2], [160.2, 52.1], [161.3, 67.9], [166.4, 56.6], + [168.9, 62.3], [163.8, 58.5], [167.6, 54.5], [160.0, 50.2], [161.3, 60.3], + [167.6, 58.3], [165.1, 56.2], [160.0, 50.2], [170.0, 72.9], [157.5, 59.8], + [167.6, 61.0], [160.7, 69.1], [163.2, 55.9], [152.4, 46.5], [157.5, 54.3], + [168.3, 54.8], [180.3, 60.7], [165.5, 60.0], [165.0, 62.0], [164.5, 60.3], + [156.0, 52.7], [160.0, 74.3], [163.0, 62.0], [165.7, 73.1], [161.0, 80.0], + [162.0, 54.7], [166.0, 53.2], [174.0, 75.7], [172.7, 61.1], [167.6, 55.7], + [151.1, 48.7], [164.5, 52.3], [163.5, 50.0], [152.0, 59.3], [169.0, 62.5], + [164.0, 55.7], [161.2, 54.8], [155.0, 45.9], [170.0, 70.6], [176.2, 67.2], + [170.0, 69.4], [162.5, 58.2], [170.3, 64.8], [164.1, 71.6], [169.5, 52.8], + [163.2, 59.8], [154.5, 49.0], [159.8, 50.0], [173.2, 69.2], [170.0, 55.9], + [161.4, 63.4], [169.0, 58.2], [166.2, 58.6], [159.4, 45.7], [162.5, 52.2], + [159.0, 48.6], [162.8, 57.8], [159.0, 55.6], [179.8, 66.8], [162.9, 59.4], + [161.0, 53.6], [151.1, 73.2], [168.2, 53.4], [168.9, 69.0], [173.2, 58.4], + [171.8, 56.2], [178.0, 70.6], [164.3, 59.8], [163.0, 72.0], [168.5, 65.2], + [166.8, 56.6], [172.7, 105.2], [163.5, 51.8], [169.4, 63.4], [167.8, 59.0], + [159.5, 47.6], [167.6, 63.0], [161.2, 55.2], [160.0, 45.0], [163.2, 54.0], + [162.2, 50.2], [161.3, 60.2], [149.5, 44.8], [157.5, 58.8], [163.2, 56.4], + [172.7, 62.0], [155.0, 49.2], [156.5, 67.2], [164.0, 53.8], [160.9, 54.4], + [162.8, 58.0], [167.0, 59.8], [160.0, 54.8], [160.0, 43.2], [168.9, 60.5], + [158.2, 46.4], [156.0, 64.4], [160.0, 48.8], [167.1, 62.2], [158.0, 55.5], + [167.6, 57.8], [156.0, 54.6], [162.1, 59.2], [173.4, 52.7], [159.8, 53.2], + [170.5, 64.5], [159.2, 51.8], [157.5, 56.0], [161.3, 63.6], [162.6, 63.2], + [160.0, 59.5], [168.9, 56.8], [165.1, 64.1], [162.6, 50.0], [165.1, 72.3], + [166.4, 55.0], [160.0, 55.9], [152.4, 60.4], [170.2, 69.1], [162.6, 84.5], + [170.2, 55.9], [158.8, 55.5], [172.7, 69.5], [167.6, 76.4], [162.6, 61.4], + [167.6, 65.9], [156.2, 58.6], [175.2, 66.8], [172.1, 56.6], [162.6, 58.6], + [160.0, 55.9], [165.1, 59.1], [182.9, 81.8], [166.4, 70.7], [165.1, 56.8], + [177.8, 60.0], [165.1, 58.2], [175.3, 72.7], [154.9, 54.1], [158.8, 49.1], + [172.7, 75.9], [168.9, 55.0], [161.3, 57.3], [167.6, 55.0], [165.1, 65.5], + [175.3, 65.5], [157.5, 48.6], [163.8, 58.6], [167.6, 63.6], [165.1, 55.2], + [165.1, 62.7], [168.9, 56.6], [162.6, 53.9], [164.5, 63.2], [176.5, 73.6], + [168.9, 62.0], [175.3, 63.6], [159.4, 53.2], [160.0, 53.4], [170.2, 55.0], + [162.6, 70.5], [167.6, 54.5], [162.6, 54.5], [160.7, 55.9], [160.0, 59.0], + [157.5, 63.6], [162.6, 54.5], [152.4, 47.3], [170.2, 67.7], [165.1, 80.9], + [172.7, 70.5], [165.1, 60.9], [170.2, 63.6], [170.2, 54.5], [170.2, 59.1], + [161.3, 70.5], [167.6, 52.7], [167.6, 62.7], [165.1, 86.3], [162.6, 66.4], + [152.4, 67.3], [168.9, 63.0], [170.2, 73.6], [175.2, 62.3], [175.2, 57.7], + [160.0, 55.4], [165.1, 104.1], [174.0, 55.5], [170.2, 77.3], [160.0, 80.5], + [167.6, 64.5], [167.6, 72.3], [167.6, 61.4], [154.9, 58.2], [162.6, 81.8], + [175.3, 63.6], [171.4, 53.4], [157.5, 54.5], [165.1, 53.6], [160.0, 60.0], + [174.0, 73.6], [162.6, 61.4], [174.0, 55.5], [162.6, 63.6], [161.3, 60.9], + [156.2, 60.0], [149.9, 46.8], [169.5, 57.3], [160.0, 64.1], [175.3, 63.6], + [169.5, 67.3], [160.0, 75.5], [172.7, 68.2], [162.6, 61.4], [157.5, 76.8], + [176.5, 71.8], [164.4, 55.5], [160.7, 48.6], [174.0, 66.4], [163.8, 67.3]] + + }, { + name: 'Male', + color: 'rgba(119, 152, 191, .5)', + data: [[174.0, 65.6], [175.3, 71.8], [193.5, 80.7], [186.5, 72.6], [187.2, 78.8], + [181.5, 74.8], [184.0, 86.4], [184.5, 78.4], [175.0, 62.0], [184.0, 81.6], + [180.0, 76.6], [177.8, 83.6], [192.0, 90.0], [176.0, 74.6], [174.0, 71.0], + [184.0, 79.6], [192.7, 93.8], [171.5, 70.0], [173.0, 72.4], [176.0, 85.9], + [176.0, 78.8], [180.5, 77.8], [172.7, 66.2], [176.0, 86.4], [173.5, 81.8], + [178.0, 89.6], [180.3, 82.8], [180.3, 76.4], [164.5, 63.2], [173.0, 60.9], + [183.5, 74.8], [175.5, 70.0], [188.0, 72.4], [189.2, 84.1], [172.8, 69.1], + [170.0, 59.5], [182.0, 67.2], [170.0, 61.3], [177.8, 68.6], [184.2, 80.1], + [186.7, 87.8], [171.4, 84.7], [172.7, 73.4], [175.3, 72.1], [180.3, 82.6], + [182.9, 88.7], [188.0, 84.1], [177.2, 94.1], [172.1, 74.9], [167.0, 59.1], + [169.5, 75.6], [174.0, 86.2], [172.7, 75.3], [182.2, 87.1], [164.1, 55.2], + [163.0, 57.0], [171.5, 61.4], [184.2, 76.8], [174.0, 86.8], [174.0, 72.2], + [177.0, 71.6], [186.0, 84.8], [167.0, 68.2], [171.8, 66.1], [182.0, 72.0], + [167.0, 64.6], [177.8, 74.8], [164.5, 70.0], [192.0, 101.6], [175.5, 63.2], + [171.2, 79.1], [181.6, 78.9], [167.4, 67.7], [181.1, 66.0], [177.0, 68.2], + [174.5, 63.9], [177.5, 72.0], [170.5, 56.8], [182.4, 74.5], [197.1, 90.9], + [180.1, 93.0], [175.5, 80.9], [180.6, 72.7], [184.4, 68.0], [175.5, 70.9], + [180.6, 72.5], [177.0, 72.5], [177.1, 83.4], [181.6, 75.5], [176.5, 73.0], + [175.0, 70.2], [174.0, 73.4], [165.1, 70.5], [177.0, 68.9], [192.0, 102.3], + [176.5, 68.4], [169.4, 65.9], [182.1, 75.7], [179.8, 84.5], [175.3, 87.7], + [184.9, 86.4], [177.3, 73.2], [167.4, 53.9], [178.1, 72.0], [168.9, 55.5], + [157.2, 58.4], [180.3, 83.2], [170.2, 72.7], [177.8, 64.1], [172.7, 72.3], + [165.1, 65.0], [186.7, 86.4], [165.1, 65.0], [174.0, 88.6], [175.3, 84.1], + [185.4, 66.8], [177.8, 75.5], [180.3, 93.2], [180.3, 82.7], [177.8, 58.0], + [177.8, 79.5], [177.8, 78.6], [177.8, 71.8], [177.8, 116.4], [163.8, 72.2], + [188.0, 83.6], [198.1, 85.5], [175.3, 90.9], [166.4, 85.9], [190.5, 89.1], + [166.4, 75.0], [177.8, 77.7], [179.7, 86.4], [172.7, 90.9], [190.5, 73.6], + [185.4, 76.4], [168.9, 69.1], [167.6, 84.5], [175.3, 64.5], [170.2, 69.1], + [190.5, 108.6], [177.8, 86.4], [190.5, 80.9], [177.8, 87.7], [184.2, 94.5], + [176.5, 80.2], [177.8, 72.0], [180.3, 71.4], [171.4, 72.7], [172.7, 84.1], + [172.7, 76.8], [177.8, 63.6], [177.8, 80.9], [182.9, 80.9], [170.2, 85.5], + [167.6, 68.6], [175.3, 67.7], [165.1, 66.4], [185.4, 102.3], [181.6, 70.5], + [172.7, 95.9], [190.5, 84.1], [179.1, 87.3], [175.3, 71.8], [170.2, 65.9], + [193.0, 95.9], [171.4, 91.4], [177.8, 81.8], [177.8, 96.8], [167.6, 69.1], + [167.6, 82.7], [180.3, 75.5], [182.9, 79.5], [176.5, 73.6], [186.7, 91.8], + [188.0, 84.1], [188.0, 85.9], [177.8, 81.8], [174.0, 82.5], [177.8, 80.5], + [171.4, 70.0], [185.4, 81.8], [185.4, 84.1], [188.0, 90.5], [188.0, 91.4], + [182.9, 89.1], [176.5, 85.0], [175.3, 69.1], [175.3, 73.6], [188.0, 80.5], + [188.0, 82.7], [175.3, 86.4], [170.5, 67.7], [179.1, 92.7], [177.8, 93.6], + [175.3, 70.9], [182.9, 75.0], [170.8, 93.2], [188.0, 93.2], [180.3, 77.7], + [177.8, 61.4], [185.4, 94.1], [168.9, 75.0], [185.4, 83.6], [180.3, 85.5], + [174.0, 73.9], [167.6, 66.8], [182.9, 87.3], [160.0, 72.3], [180.3, 88.6], + [167.6, 75.5], [186.7, 101.4], [175.3, 91.1], [175.3, 67.3], [175.9, 77.7], + [175.3, 81.8], [179.1, 75.5], [181.6, 84.5], [177.8, 76.6], [182.9, 85.0], + [177.8, 102.5], [184.2, 77.3], [179.1, 71.8], [176.5, 87.9], [188.0, 94.3], + [174.0, 70.9], [167.6, 64.5], [170.2, 77.3], [167.6, 72.3], [188.0, 87.3], + [174.0, 80.0], [176.5, 82.3], [180.3, 73.6], [167.6, 74.1], [188.0, 85.9], + [180.3, 73.2], [167.6, 76.3], [183.0, 65.9], [183.0, 90.9], [179.1, 89.1], + [170.2, 62.3], [177.8, 82.7], [179.1, 79.1], [190.5, 98.2], [177.8, 84.1], + [180.3, 83.2], [180.3, 83.2]] + }] + }); + + /* Bubble chart */ + $('#bubble-chart').highcharts({ + + chart: { + type: 'bubble', + zoomType: 'xy' + }, + + title: { + text: 'Highcharts Bubbles' + }, + + series: [{ + data: [[97,36,79],[94,74,60],[68,76,58],[64,87,56],[68,27,73],[74,99,42],[7,93,87],[51,69,40],[38,23,33],[57,86,31]] + }, { + data: [[25,10,87],[2,75,59],[11,54,8],[86,55,93],[5,3,58],[90,63,44],[91,33,17],[97,3,56],[15,67,48],[54,25,81]] + }, { + data: [[47,47,21],[20,12,4],[6,76,91],[38,30,60],[57,98,64],[61,17,80],[83,60,13],[67,78,75],[64,12,10],[30,77,82]] + }] + + }); + + /* 3D bubbles */ + $('#threeD-bubbles').highcharts({ + + chart: { + type: 'bubble', + plotBorderWidth: 1, + zoomType: 'xy' + }, + + title: { + text: 'Highcharts bubbles with radial gradient fill' + }, + + xAxis: { + gridLineWidth: 1 + }, + + yAxis: { + startOnTick: false, + endOnTick: false + }, + + series: [{ + data: [ + [9, 81, 63], + [98, 5, 89], + [51, 50, 73], + [41, 22, 14], + [58, 24, 20], + [78, 37, 34], + [55, 56, 53], + [18, 45, 70], + [42, 44, 28], + [3, 52, 59], + [31, 18, 97], + [79, 91, 63], + [93, 23, 23], + [44, 83, 22] + ], + marker: { + fillColor: { + radialGradient: { cx: 0.4, cy: 0.3, r: 0.7 }, + stops: [ + [0, 'rgba(255,255,255,0.5)'], + [1, 'rgba(69,114,167,0.5)'] + ] + } + } + }, { + data: [ + [42, 38, 20], + [6, 18, 1], + [1, 93, 55], + [57, 2, 90], + [80, 76, 22], + [11, 74, 96], + [88, 56, 10], + [30, 47, 49], + [57, 62, 98], + [4, 16, 16], + [46, 10, 11], + [22, 87, 89], + [57, 91, 82], + [45, 15, 98] + ], + marker: { + fillColor: { + radialGradient: { cx: 0.4, cy: 0.3, r: 0.7 }, + stops: [ + [0, 'rgba(255,255,255,0.5)'], + [1, 'rgba(170,70,67,0.5)'] + ] + } + } + }] + + }); + + + +}); diff --git a/src/main/webapp/static/script/custom.min.js b/src/main/webapp/static/script/custom.min.js new file mode 100644 index 0000000..cd9ab21 --- /dev/null +++ b/src/main/webapp/static/script/custom.min.js @@ -0,0 +1,5 @@ +$(document).ready(function(){var h=window.location.hash.replace("#","");if(h&&$("."+h).length){var k=$("."+h).offset().top-40;window.Zepto?window.scrollTo(0,k):$(window).scrollTop($("."+h).offset().top-40)}$(".skin dt").click(function(){$(this).siblings().removeClass("selected").end().prev("dd").andSelf().addClass("selected")});$(".arrows .top, .arrows .bottom, .features .self, .skins-info .self, .usage .self").click(function(b){var a=$(this).data("to"),d=$("."+a).offset().top;b.preventDefault(); +window.location.hash=a;window.Zepto?window.scrollTo(0,d-40):$("html, body").stop().animate({scrollTop:d-40},600)});$(".colors li").click(function(){var b=$(this);if(!b.hasClass("active")){b.siblings().removeClass("active");var a=b.closest(".skin"),d=b.attr("class")?"-"+b.attr("class"):"",c=a.data("icheckbox"),g=a.data("iradio"),e="icheckbox_minimal",f="iradio_minimal";a.hasClass("skin-square")&&(e="icheckbox_square",f="iradio_square",void 0==c&&(c="icheckbox_square-green",g="iradio_square-green")); +a.hasClass("skin-flat")&&(e="icheckbox_flat",f="iradio_flat",void 0==c&&(c="icheckbox_flat-red",g="iradio_flat-red"));a.hasClass("skin-line")&&(e="icheckbox_line",f="iradio_line",void 0==c&&(c="icheckbox_line-blue",g="iradio_line-blue"));void 0==c&&(c=e,g=f);a.find("input, .skin-states .state").each(function(){var a=$(this).hasClass("state")?$(this):$(this).parent(),b=a.attr("class").replace(c,e+d).replace(g,f+d);a.attr("class",b)});a.data("icheckbox",e+d);a.data("iradio",f+d);b.addClass("active")}}); +$(".demo-methods dt .self").click(function(){var b=$(this);switch(b.attr("class").replace("self ","")){case "do-check":$("#input-1, #input-3").iCheck("check");break;case "do-uncheck":$("#input-1, #input-3").iCheck("uncheck");break;case "do-disable":$("#input-2, #input-4").iCheck("disable");break;case "do-enable":$("#input-2, #input-4").iCheck("enable");break;case "do-destroy":$(".demo-list input").iCheck("destroy");break;default:var a=b.hasClass("active")?"show code":"hide code";b.toggleClass("active").text(a); +window.Zepto?$(this).closest("dt").next().toggle():$(this).closest("dt").next().slideToggle(200)}})}); \ No newline at end of file diff --git a/src/main/webapp/static/script/data.js b/src/main/webapp/static/script/data.js new file mode 100644 index 0000000..31b2a8d --- /dev/null +++ b/src/main/webapp/static/script/data.js @@ -0,0 +1,16 @@ +/* + Data plugin for Highcharts + + (c) 2012-2014 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(j){var m=j.each,o=function(b,a){this.init(b,a)};j.extend(o.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=b&&b.chart&&b.chart.type,c=[];m(b&&b.series||[],function(b){c.push((j.seriesTypes[b.type||a||"line"].prototype.pointArrayMap||[0]).length)});this.valueCount= +{global:(j.seriesTypes[a||"line"].prototype.pointArrayMap||[0]).length,individual:c}},dataFound:function(){this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var b=this,a=this.options,c=a.csv,d=this.columns,f=a.startRow||0,h=a.endRow||Number.MAX_VALUE,i=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,k,j=0;c&&(k=c.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(a.lineDelimiter||"\n"),g=a.itemDelimiter||(c.indexOf("\t")!==-1?"\t":","),m(k,function(a,c){var k= +b.trim(a),n=k.indexOf("#")===0;c>=f&&c<=h&&!n&&k!==""&&(k=a.split(g),m(k,function(b,a){a>=i&&a<=e&&(d[a-i]||(d[a-i]=[]),d[a-i][j]=b)}),j+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,c=this.columns,d=b.startRow||0,f=b.endRow||Number.MAX_VALUE,h=b.startColumn||0,i=b.endColumn||Number.MAX_VALUE,e;a&&(typeof a==="string"&&(a=document.getElementById(a)),m(a.getElementsByTagName("tr"),function(a,b){e=0;b>=d&&b<=f&&m(a.childNodes,function(a){if((a.tagName==="TD"||a.tagName=== +"TH")&&e>=h&&e<=i)c[e]||(c[e]=[]),c[e][b-d]=a.innerHTML,e+=1})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this,a=this.options,c=a.googleSpreadsheetKey,d=this.columns,f=a.startRow||0,h=a.endRow||Number.MAX_VALUE,i=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,k;c&&jQuery.getJSON("https://spreadsheets.google.com/feeds/cells/"+c+"/"+(a.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?",function(a){var a=a.feed.entry,c,j=a.length,m=0,n=0,l;for(l=0;l< +j;l++)c=a[l],m=Math.max(m,c.gs$cell.col),n=Math.max(n,c.gs$cell.row);for(l=0;l=i&&l<=e)d[l-i]=[],d[l-i].length=Math.min(n,h-f);for(l=0;l=i&&k<=e&&g>=f&&g<=h)d[k-i][g-f]=c.content.$t;b.dataFound()})},findHeaderRow:function(){m(this.columns,function(){});this.headerRow=0},trim:function(b){return typeof b==="string"?b.replace(/^\s+|\s+$/g,""):b},parseTypes:function(){for(var b=this.columns,a=b.length,c,d,f,h;a--;)for(c=b[a].length;c--;)d= +b[a][c],f=parseFloat(d),h=this.trim(d),h==f?(b[a][c]=f,f>31536E6?b[a].isDatetime=!0:b[a].isNumeric=!0):(d=this.parseDate(d),a===0&&typeof d==="number"&&!isNaN(d)?(b[a][c]=d,b[a].isDatetime=!0):b[a][c]=h===""?null:h)},dateFormats:{"YYYY-mm-dd":{regex:"^([0-9]{4})-([0-9]{2})-([0-9]{2})$",parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}}},parseDate:function(b){var a=this.options.parseDate,c,d,f;a&&(c=a(b));if(typeof b==="string")for(d in this.dateFormats)a=this.dateFormats[d],(f=b.match(a.regex))&& +(c=a.parser(f));return c},rowsToColumns:function(b){var a,c,d,f,h;if(b){h=[];c=b.length;for(a=0;a1&&(a=b.shift(),this.headerRow===0&&a.shift(),a.isDatetime?c="datetime":a.isNumeric||(c="category"));for(e=0;e1&&i[g].push(b[e+1][g]!==void 0?b[e+1][g]:null),f>2&&i[g].push(b[e+2][g]!==void 0?b[e+2][g]:null),f>3&&i[g].push(b[e+3][g]!==void 0?b[e+3][g]:null),f>4&&i[g].push(b[e+4][g]!==void 0?b[e+4][g]:null);h[k]={name:b[e].name,data:i};e+=f}d.complete({xAxis:{type:c},series:h})}}});j.Data=o;j.data=function(b,a){return new o(b, +a)};j.wrap(j.Chart.prototype,"init",function(b,a,c){var d=this;a&&a.data?j.data(j.extend(a.data,{complete:function(f){a.series&&m(a.series,function(b,c){a.series[c]=j.merge(b,f.series[c])});a=j.merge(f,a);b.call(d,a,c)}}),a):b.call(d,a,c)})})(Highcharts); diff --git a/src/main/webapp/static/script/drilldown.js b/src/main/webapp/static/script/drilldown.js new file mode 100644 index 0000000..261a760 --- /dev/null +++ b/src/main/webapp/static/script/drilldown.js @@ -0,0 +1,11 @@ +(function(e){function q(b,a,c){return"rgba("+[Math.round(b[0]+(a[0]-b[0])*c),Math.round(b[1]+(a[1]-b[1])*c),Math.round(b[2]+(a[2]-b[2])*c),b[3]+(a[3]-b[3])*c].join(",")+")"}var m=function(){},j=e.getOptions(),g=e.each,n=e.extend,o=e.wrap,h=e.Chart,i=e.seriesTypes,k=i.pie,l=i.column,r=HighchartsAdapter.fireEvent,t=HighchartsAdapter.inArray;n(j.lang,{drillUpText:"◁ Back to {series.name}"});j.drilldown={activeAxisLabelStyle:{cursor:"pointer",color:"#0d233a",fontWeight:"bold",textDecoration:"underline"}, +activeDataLabelStyle:{cursor:"pointer",color:"#0d233a",fontWeight:"bold",textDecoration:"underline"},animation:{duration:500},drillUpButton:{position:{align:"right",x:-10,y:10}}};e.SVGRenderer.prototype.Element.prototype.fadeIn=function(b){this.attr({opacity:0.1,visibility:"visible"}).animate({opacity:1},b||{duration:250})};h.prototype.drilldownLevels=[];h.prototype.addSeriesAsDrilldown=function(b,a){var c=b.series,d=c.xAxis,f=c.yAxis,e;e=b.color||c.color;var g,a=n({color:e},a);g=t(b,c.points);this.drilldownLevels.push({seriesOptions:c.userOptions, +shapeArgs:b.shapeArgs,bBox:b.graphic.getBBox(),color:e,newSeries:a,pointOptions:c.options.data[g],pointIndex:g,oldExtremes:{xMin:d&&d.userMin,xMax:d&&d.userMax,yMin:f&&f.userMin,yMax:f&&f.userMax}});e=this.addSeries(a,!1);if(d)d.oldPos=d.pos,d.userMin=d.userMax=null,f.userMin=f.userMax=null;if(c.type===e.type)e.animate=e.animateDrilldown||m,e.options.animation=!0;c.remove(!1);this.redraw();this.showDrillUpButton()};h.prototype.getDrilldownBackText=function(){return this.options.lang.drillUpText.replace("{series.name}", +this.drilldownLevels[this.drilldownLevels.length-1].seriesOptions.name)};h.prototype.showDrillUpButton=function(){var b=this,a=this.getDrilldownBackText(),c=b.options.drilldown.drillUpButton;this.drillUpButton?this.drillUpButton.attr({text:a}).align():this.drillUpButton=this.renderer.button(a,null,null,function(){b.drillUp()}).attr(n({align:c.position.align,zIndex:9},c.theme)).add().align(c.position,!1,c.relativeTo||"plotBox")};h.prototype.drillUp=function(){var b=this.drilldownLevels.pop(),a=this.series[0], +c=b.oldExtremes,d=this.addSeries(b.seriesOptions,!1);r(this,"drillup",{seriesOptions:b.seriesOptions});if(d.type===a.type)d.drilldownLevel=b,d.animate=d.animateDrillupTo||m,d.options.animation=!0,a.animateDrillupFrom&&a.animateDrillupFrom(b);a.remove(!1);d.xAxis&&(d.xAxis.setExtremes(c.xMin,c.xMax,!1),d.yAxis.setExtremes(c.yMin,c.yMax,!1));this.redraw();this.drilldownLevels.length===0?this.drillUpButton=this.drillUpButton.destroy():this.drillUpButton.attr({text:this.getDrilldownBackText()}).align()}; +k.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=this.chart.options.drilldown.animation,d=a.shapeArgs,f=d.start,s=(d.end-f)/this.points.length,h=e.Color(a.color).rgba;b||g(this.points,function(a,b){var g=e.Color(a.color).rgba;a.graphic.attr(e.merge(d,{start:f+b*s,end:f+(b+1)*s})).animate(a.shapeArgs,e.merge(c,{step:function(a,d){d.prop==="start"&&this.attr({fill:q(h,g,d.pos)})}}))})};k.prototype.animateDrillupTo=l.prototype.animateDrillupTo= +function(b){if(!b){var a=this,c=a.drilldownLevel;g(this.points,function(a){a.graphic.hide();a.dataLabel&&a.dataLabel.hide();a.connector&&a.connector.hide()});setTimeout(function(){g(a.points,function(a,b){var e=b===c.pointIndex?"show":"fadeIn";a.graphic[e]();if(a.dataLabel)a.dataLabel[e]();if(a.connector)a.connector[e]()})},Math.max(this.chart.options.drilldown.animation.duration-50,0));this.animate=m}};l.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length- +1].shapeArgs,c=this.chart.options.drilldown.animation;b||(a.x+=this.xAxis.oldPos-this.xAxis.pos,g(this.points,function(b){b.graphic.attr(a).animate(b.shapeArgs,c);b.dataLabel&&b.dataLabel.fadeIn(c)}))};l.prototype.animateDrillupFrom=k.prototype.animateDrillupFrom=function(b){var a=this.chart.options.drilldown.animation,c=this.group;delete this.group;g(this.points,function(d){var f=d.graphic,g=e.Color(d.color).rgba;delete d.graphic;f.animate(b.shapeArgs,e.merge(a,{step:function(a,c){c.prop==="start"&& +this.attr({fill:q(g,e.Color(b.color).rgba,c.pos)})},complete:function(){f.destroy();c&&(c=c.destroy())}}))})};e.Point.prototype.doDrilldown=function(){for(var b=this.series.chart,a=b.options.drilldown,c=a.series.length,d;c--&&!d;)a.series[c].id===this.drilldown&&(d=a.series[c]);r(b,"drilldown",{point:this,seriesOptions:d});d&&b.addSeriesAsDrilldown(this,d)};o(e.Point.prototype,"init",function(b,a,c,d){var f=b.call(this,a,c,d),b=a.chart,a=(a=a.xAxis&&a.xAxis.ticks[d])&&a.label;if(f.drilldown){if(e.addEvent(f, +"click",function(){f.doDrilldown()}),a){if(!a._basicStyle)a._basicStyle=a.element.getAttribute("style");a.addClass("highcharts-drilldown-axis-label").css(b.options.drilldown.activeAxisLabelStyle).on("click",function(){f.doDrilldown&&f.doDrilldown()})}}else a&&a._basicStyle&&a.element.setAttribute("style",a._basicStyle);return f});o(e.Series.prototype,"drawDataLabels",function(b){var a=this.chart.options.drilldown.activeDataLabelStyle;b.call(this);g(this.points,function(b){if(b.drilldown&&b.dataLabel)b.dataLabel.attr({"class":"highcharts-drilldown-data-label"}).css(a).on("click", +function(){b.doDrilldown()})})});l.prototype.supportsDrilldown=!0;k.prototype.supportsDrilldown=!0;var p,j=function(b){b.call(this);g(this.points,function(a){a.drilldown&&a.graphic&&a.graphic.attr({"class":"highcharts-drilldown-point"}).css({cursor:"pointer"})})};for(p in i)i[p].prototype.supportsDrilldown&&o(i[p].prototype,"drawTracker",j)})(Highcharts); diff --git a/src/main/webapp/static/script/exporting.js b/src/main/webapp/static/script/exporting.js new file mode 100644 index 0000000..0432b28 --- /dev/null +++ b/src/main/webapp/static/script/exporting.js @@ -0,0 +1,22 @@ +/* + Highcharts JS v3.0.8 (2014-01-09) + Exporting module + + (c) 2010-2014 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(f){var A=f.Chart,t=f.addEvent,B=f.removeEvent,l=f.createElement,o=f.discardElement,v=f.css,k=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,C=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,s=f.getOptions(),y;p(s.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});s.navigation={menuStyle:{border:"1px solid #A0A0A0", +background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:E?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}};s.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{menuClassName:"highcharts-contextmenu", +symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};f.post=function(b,a,d){var c,b=l("form",k({method:"post", +action:b,enctype:"multipart/form-data"},d),{display:"none"},j.body);for(c in a)l("input",{type:"hidden",name:c,value:a[c]},null,b);b.submit();o(b)};p(A.prototype,{getSVG:function(b){var a=this,d,c,z,h,g=k(a.options,b);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};b=l("div",null,{position:"absolute",top:"-9999em",width:a.chartWidth+"px",height:a.chartHeight+"px"},j.body);c=a.renderTo.style.width;h=a.renderTo.style.height;c=g.exporting.sourceWidth||g.chart.width|| +/px$/.test(c)&&parseInt(c,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:b,forExport:!0,width:c,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=k(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r(["xAxis","yAxis"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&& +g.setExtremes(h,f,!0,!1)})});c=d.container.innerHTML;g=null;d.destroy();o(b);c=c.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/.*?$/,"").replace(/ /g," ").replace(/­/g,"­").replace(//g,'xlink:href="$1"/>').replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g," ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});return c=c.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'")},exportChart:function(b,a){var b=b||{},d=this.options.exporting,d=this.getSVG(k({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:b.sourceWidth|| +d.sourceWidth,sourceHeight:b.sourceHeight||d.sourceHeight}})),b=k(this.options.exporting,b);f.post(b.url,{filename:b.filename||"chart",type:b.type,width:b.width||0,scale:b.scale||2,svg:d},b.formAttributes)},print:function(){var b=this,a=b.container,d=[],c=a.parentNode,f=j.body,h=f.childNodes;if(!b.isPrinting)b.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display="none"}),f.appendChild(a),C.focus(),C.print(),setTimeout(function(){c.appendChild(a);r(h,function(a,b){if(a.nodeType=== +1)a.style.display=d[b]});b.isPrinting=!1},1E3)},contextMenu:function(b,a,d,c,f,h,g){var e=this,k=e.options.navigation,q=k.menuItemStyle,m=e.chartWidth,n=e.chartHeight,j="cache-"+b,i=e[j],u=D(f,h),w,x,o,s=function(a){e.pointer.inClass(a.target,b)||x()};if(!i)e[j]=i=l("div",{className:b},{position:"absolute",zIndex:1E3,padding:u+"px"},e.container),w=l("div",null,p({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},k.menuStyle),i),x=function(){v(i,{display:"none"}); +g&&g.setState(0);e.openMenu=!1},t(i,"mouseleave",function(){o=setTimeout(x,500)}),t(i,"mouseenter",function(){clearTimeout(o)}),t(document,"mouseup",s),t(e,"destroy",function(){B(document,"mouseup",s)}),r(a,function(a){if(a){var b=a.separator?l("hr",null,null,w):l("div",{onmouseover:function(){v(this,k.menuItemHoverStyle)},onmouseout:function(){v(this,q)},onclick:function(){x();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:"pointer"},q),w);e.exportDivElements.push(b)}}), +e.exportDivElements.push(w,i),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:"block"};d+e.exportMenuWidth>m?a.right=m-d-f-u+"px":a.left=d-u+"px";c+h+e.exportMenuHeight>n&&g.alignOptions.verticalAlign!=="top"?a.bottom=n-c-u+"px":a.top=c+h-u+"px";v(i,a);e.openMenu=!0},addButton:function(b){var a=this,d=a.renderer,c=k(a.options.navigation.buttonOptions,b),j=c.onclick,h=c.menuItems,g,e,l={stroke:c.symbolStroke,fill:c.symbolFill},q=c.symbolSize||12;if(!a.btnCount)a.btnCount= +0;if(!a.exportDivElements)a.exportDivElements=[],a.exportSVGElements=[];if(c.enabled!==!1){var m=c.theme,n=m.states,o=n&&n.hover,n=n&&n.select,i;delete m.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});c.text&&c.symbol?m.paddingLeft=f.pick(m.paddingLeft,25):c.text||p(m,{width:c.width,height:c.height,padding:0});e=d.button(c.text,0,0,i,m,o,n).attr({title:a.options.lang[c._titleKey],"stroke-linecap":"round"}); +e.menuClassName=b.menuClassName||"highcharts-menu-"+a.btnCount++;c.symbol&&(g=d.symbol(c.symbol,c.symbolX-q/2,c.symbolY-q/2,q,q).attr(p(l,{"stroke-width":c.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(c,{width:e.width,x:f.pick(c.x,y)}),!0,"spacingBox");y+=(e.width+c.buttonSpacing)*(c.align==="right"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(b){var b=b.target,a,d;for(a=0;aj-s||j===s?r:r+(p-r)*((j-s-k)/(j-s))};this.getX=function(k,a){return b+(a?-1:1)*(q(k)/2+c.dataLabels.distance)};this.center=[b,d,j];this.centerX=b;A(a,function(a){g+=a.y});A(a,function(a){o=null;x=g?a.y/g:0;m=d-j/2+h*j;l=m+x*j;i=q(m);y=b-i/2;B=y+ +i;i=q(l);n=b-i/2;t=n+i;m>v?(y=n=b-r/2,B=t=b+r/2):l>v&&(o=l,i=q(v),n=b-i/2,t=n+i,l=v);w=["M",y,m,"L",B,m,t,l];o&&w.push(t,o,n,o);w.push(n,l,"Z");a.shapeType="path";a.shapeArgs={d:w};a.percentage=x*100;a.plotX=b;a.plotY=(m+(o||l))/2;a.tooltipPos=[b,a.plotY];a.slice=z;a.half=u;h+=x});this.setTooltipPoints()},drawPoints:function(){var a=this,g=a.options,e=a.chart.renderer;A(a.data,function(f){var h=f.graphic,c=f.shapeArgs;h?h.animate(c):f.graphic=e.path(c).attr({fill:f.color,stroke:g.borderColor,"stroke-width":g.borderWidth}).add(a.group)})}, +sortByAngle:z,drawDataLabels:function(){var a=this.data,g=this.options.dataLabels.distance,e,f,h,c=a.length,d,b;for(this.center[2]-=2*g;c--;)h=a[c],f=(e=h.half)?1:-1,b=h.plotY,d=this.getX(b,e),h.labelPos=[0,b,d+(g-5)*f,b,d+g*f,b,e?"right":"left",0];p.pie.prototype.drawDataLabels.call(this)}})})(Highcharts); diff --git a/src/main/webapp/static/script/highchart.js b/src/main/webapp/static/script/highchart.js new file mode 100644 index 0000000..9ac56d9 --- /dev/null +++ b/src/main/webapp/static/script/highchart.js @@ -0,0 +1,294 @@ +/* + Highcharts JS v3.0.8 (2014-01-09) + + (c) 2009-2014 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(){function r(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function x(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!=="object"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c==="object"&&Object.prototype.toString.call(c)!=="[object Array]"&&typeof c.nodeType!=="number"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+M(a-c).toFixed(f).slice(2):"")}function Fa(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Ua(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this, +a)}}function Ga(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h-1?h.thousandsSep:"")):e=$a(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function lb(a){return P.pow(10,N(P.log(a)/P.LN10))}function mb(a,b,c,d){var e,c=o(c, +1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;dc&&(c= +a[b]);return c}function Na(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Oa(a){ab||(ab=T(Ha));a&&ab.appendChild(a);ab.innerHTML=""}function la(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else C.console&&console.log(c)}function ha(a){return parseFloat(a.toPrecision(14))}function Pa(a,b){pa=o(a,b.animation)}function Bb(){var a=G.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";Qa=(a&&G.global.timezoneOffset||0)*6E4;bb=a? +Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,o(c,1),o(g,0),o(h,0),o(i,0))).getTime()};ob=b+"Minutes";pb=b+"Hours";qb=b+"Day";Va=b+"Date";cb=b+"Month";db=b+"FullYear";Cb=c+"Minutes";Db=c+"Hours";rb=c+"Date";Eb=c+"Month";Fb=c+"FullYear"}function qa(){}function Ra(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function ra(){this.init.apply(this,arguments)}function Gb(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d; +this.total=null;this.points={};this.stack=e;this.percent=f==="percent";this.alignOptions={align:b.align||(g?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(g?"middle":c?"bottom":"top"),y:o(b.y,g?4:c?14:-6),x:o(b.x,g?c?-6:6:0)};this.textAlign=b.textAlign||(g?c?"right":"left":"center")}function sb(){this.init.apply(this,arguments)}function eb(){this.init.apply(this,arguments)}var u,v=document,C=window,P=Math,w=P.round,N=P.floor,Ia=P.ceil,t=P.max,I=P.min,M=P.abs,U=P.cos,$=P.sin,Ba=P.PI,Ca= +Ba*2/360,sa=navigator.userAgent,Hb=C.opera,za=/msie/i.test(sa)&&!Hb,fb=v.documentMode===8,gb=/AppleWebKit/.test(sa),Wa=/Firefox/.test(sa),Ib=/(Mobile|Android|Windows Phone)/.test(sa),Da="http://www.w3.org/2000/svg",V=!!v.createElementNS&&!!v.createElementNS(Da,"svg").createSVGRect,Nb=Wa&&parseInt(sa.split("Firefox/")[1],10)<4,ba=!V&&!za&&!!v.createElement("canvas").getContext,Xa,hb=v.documentElement.ontouchstart!==u,Jb={},tb=0,ab,G,$a,pa,ub,E,ma=function(){},Ja=[],Ha="div",Q="none",Ob=/^[0-9]+$/, +Kb="rgba(192,192,192,"+(V?1.0E-4:0.002)+")",Lb="stroke-width",bb,Qa,ob,pb,qb,Va,cb,db,Cb,Db,rb,Eb,Fb,L={};C.Highcharts=C.Highcharts?la(16,!0):{};$a=function(a,b,c){if(!s(b)||isNaN(b))return"Invalid date";var a=o(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b-Qa),e,f=d[pb](),g=d[qb](),h=d[Va](),i=d[cb](),j=d[db](),k=G.lang,l=k.weekdays,d=r({a:l[g].substr(0,3),A:l[g],d:Fa(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Fa(i+1),y:j.toString().substr(2,2),Y:j,H:Fa(f),I:Fa(f%12||12),l:f%12||12,M:Fa(d[ob]()),p:f<12?"AM": +"PM",P:f<12?"am":"pm",S:Fa(d.getSeconds()),L:Fa(w(b%1E3),3)},Highcharts.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]==="function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Ab.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};E=function(){for(var a=0,b=arguments,c=b.length,d={};a-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length{point.key}

',pointFormat:'{series.name}: {point.y}
',shadow:!0,snap:Ib?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var Y=G.plotOptions,W=Y.line;Bb(); +var Sb=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,Tb=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Ub=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,ua=function(a){var b=[],c,d;(function(a){a&&a.stops?d=Sa(a.stops,function(a){return ua(a[1])}):(c=Sb.exec(a))?b=[z(c[1]),z(c[2]),z(c[3]),parseFloat(c[4],10)]:(c=Tb.exec(a))?b=[z(c[1],16),z(c[2],16),z(c[3],16),1]:(c=Ub.exec(a))&&(b=[z(c[1]),z(c[2]),z(c[3]),1])})(a);return{get:function(c){var f; +d?(f=x(a),f.stops=[].concat(f.stops),n(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)n(d,function(b){b.brighten(a)});else if(xa(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=z(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};qa.prototype={init:function(a,b){this.element=b==="span"?T(b):v.createElementNS(Da, +b);this.renderer=a;this.attrSetters={}},opacity:1,animate:function(a,b,c){b=o(b,pa,!0);Ya(this);if(b){b=x(b);if(c)b.complete=c;jb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName.toLowerCase(),i=this.renderer,j,k=this.attrSetters,l=this.shadows,m,p,q=this;da(a)&&s(b)&&(c=a,a={},a[c]=b);if(da(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),q=y(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&c!=="fill"&&(q=parseFloat(q));else{for(c in a)if(j= +!1,d=a[c],e=k[c]&&k[c].call(this,d,c),e!==!1){e!==u&&(d=e);if(c==="d")d&&d.join&&(d=d.join(" ")),/(NaN| {2}|^$)/.test(d)&&(d="M 0 0");else if(c==="x"&&h==="text")for(e=0;e1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted= +!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(this.x||0)+" "+(this.y||0)+")");(s(c)||s(d))&&a.push("scale("+o(c,1)+" "+o(d,1)+")");a.length&&y(this.element,"transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a); +return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||da(c))this.alignTo=d=c||"renderer",fa(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=o(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=w(f);if(e==="bottom"||e==="middle")g+=(c.height- +(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=w(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ca;d=this.textStr;var h;if(d===""||Ob.test(d))h=d.length+"|"+f.fontSize+"|"+f.fontFamily,a=b.cache[h];if(!a){if(c.namespaceURI===Da||b.forExport){try{a=c.getBBox?r({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a|| +a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){c=a.width;d=a.height;if(za&&f&&f.fontSize==="11px"&&d.toPrecision(3)==="22.7")a.height=d=14;if(e)a.width=M(d*$(g))+M(c*U(g)),a.height=M(d*U(g))+M(c*$(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(){return this.attr({visibility:"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b= +this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=y(f,"zIndex"),h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=z(g);if(c.handleZ)for(c=0;cg||!s(g)&&s(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;A(this,"add");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element|| +{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;Ya(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f/g,'').replace(/<(i|em)>/g,'').replace(//g,"").split(//g),f=b.childNodes, +g=/style="([^"]+)"/,h=/href="(http[^"]+)"/,i=y(b,"x"),j=a.styles,k=a.textWidth,l=j&&j.lineHeight,m=f.length;m--;)b.removeChild(f[m]);k&&!a.added&&this.box.appendChild(b);e[e.length-1]===""&&e.pop();n(e,function(e,f){var m,o=0,e=e.replace(//g,"|||");m=e.split("|||");n(m,function(e){if(e!==""||m.length===1){var p={},n=v.createElementNS(Da,"tspan"),s;g.test(e)&&(s=e.match(g)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),y(n,"style",s));h.test(e)&&!d&&(y(n,"onclick", +'location.href="'+e.match(h)[1]+'"'),D(n,{cursor:"pointer"}));e=(e.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");if(e!==" "&&(n.appendChild(v.createTextNode(e)),o?p.dx=0:p.x=i,y(n,p),!o&&f&&(!V&&d&&D(n,{display:"block"}),y(n,"dy",l||c.fontMetrics(/px$/.test(n.style.fontSize)?n.style.fontSize:j.fontSize).h,gb&&n.offsetHeight)),b.appendChild(n),o++,k))for(var e=e.replace(/([^\^])-/g,"$1- ").split(" "),p=e.length>1&&j.whiteSpace!=="nowrap",t,w,u=a._clipHeight,r=[],B=z(l|| +16),x=1;p&&(e.length||r.length);)delete a.bBox,t=a.getBBox(),w=t.width,!V&&c.forExport&&(w=c.measureSpanWidth(n.firstChild.data,a.styles)),t=w>k,!t||e.length===1?(e=r,r=[],e.length&&(x++,u&&x*B>u?(e=["..."],a.attr("title",a.textStr)):(n=v.createElementNS(Da,"tspan"),y(n,{dy:B,x:i}),s&&y(n,"style",s),b.appendChild(n),w>k&&(k=w)))):(n.removeChild(n.firstChild),r.unshift(e.pop())),e.length&&n.appendChild(v.createTextNode(e.join(" ").replace(/- /g,"-")))}})})},button:function(a,b,c,d,e,f,g,h,i){var j= +this.label(a,b,c,i,null,null,null,null,"button"),k=0,l,m,p,q,n,o,a={x1:0,y1:0,x2:0,y2:1},e=x({"stroke-width":1,stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);p=e.style;delete e.style;f=x(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);q=f.style;delete f.style;g=x(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);n=g.style;delete g.style;h=x(e,{style:{color:"#CCC"}},h);o=h.style; +delete h.style;F(j.element,za?"mouseover":"mouseenter",function(){k!==3&&j.attr(f).css(q)});F(j.element,za?"mouseout":"mouseleave",function(){k!==3&&(l=[e,f,g][k],m=[p,q,n][k],j.attr(l).css(m))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(n):a===3&&j.attr(h).css(o):j.attr(e).css(p)};return j.on("click",function(){k!==3&&d.call(j)}).attr(e).css(r({cursor:"default"},p))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=w(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=w(a[2])+b%2/2);return a},path:function(a){var b= +{fill:Q};La(a)?b.d=a:S(a)&&r(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=S(a)?a:{x:a,y:b,r:c};return this.createElement("circle").attr(a)},arc:function(a,b,c,d,e,f){if(S(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){e=S(a)?a.r:e;e=this.createElement("rect").attr({rx:e,ry:e,fill:Q});return e.attr(S(a)?a:e.crisp(f,a,b,t(c,0),t(d,0)))},setSize:function(a, +b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[o(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return s(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:Q};arguments.length>1&&r(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href", +a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(w(b),w(c),d,e,f),i=/^url\((.*?)\)$/,j,k;if(h)g=this.path(h),r(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&r(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),a.alignByTranslate||a.translate(w((d-b[0])/2),w((e-b[1])/2)))},j=a.match(i)[1],a=Jb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),T("img",{onload:function(){k(g,Jb[j]=[this.width,this.height])},src:j})); +return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001, +d=e.innerR,h=e.open,i=U(f),j=$(f),k=U(g),g=$(g),e=e.end-fl&&/[ \-]/.test(b.textContent||b.innerText))D(b,{width:l+"px",display:"block",whiteSpace:"normal"}),i=l;this.getSpanCorrection(i,k,h,j,g)}D(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(gb)k=b.offsetHeight;this.cTT=m}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d= +{},e=za?"-ms-transform":gb?"-webkit-transform":Wa?"MozTransform":Hb?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Wa?"Origin":"-origin")]=b*100+"% "+c+"px";D(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});r(va.prototype,{html:function(a,b,c){var d=G.chart.style,e=this.createElement("span"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){a!==g.innerHTML&&delete this.bBox;g.innerHTML=a;return!1};f.x=f.y=f.align=f.rotation=function(a,b){b=== +"align"&&(b="textAlign");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:w(b),y:w(c)}).css({position:"absolute",whiteSpace:"nowrap",fontFamily:d.fontFamily,fontSize:d.fontSize});e.css=e.htmlCss;if(h.isSVG)e.add=function(a){var b,c=h.box.parentNode,d=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)d.push(a),a=a.parentGroup;n(d.reverse(),function(a){var d;b=a.div=a.div||T(Ha,{className:y(a.element,"class")},{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c); +d=b.style;r(a.attrSetters,{translateX:function(a){d.left=a+"px"},translateY:function(a){d.top=a+"px"},visibility:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(g);e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform();return e};return e}});var R;if(!V&&!ba){Highcharts.VMLElement=R={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute",";"],e=b===Ha;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="', +d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=T(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();A(this,"add");return this},updateTransform:qa.prototype.htmlUpdateTransform,setSpanRotation:function(){var a=this.rotation,b=U(a*Ca),c=$(a*Ca);D(this.element,{filter:a? +["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):Q})},getSpanCorrection:function(a,b,c,d,e){var f=d?U(d*Ca):1,g=d?$(d*Ca):0,h=o(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=h*c*(g<0?-1:1)),D(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length, +c=[];b--;)if(xa(a[b]))c[b]=w(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,j=this.symbolName,k,l=this.shadows,m,p=this.attrSetters,q=this;da(a)&&s(b)&&(c=a,a={},a[c]=b);if(da(a))c=a,q=c==="strokeWidth"||c==="stroke-width"?this.strokeweight:this[c];else for(c in a)if(d= +a[c],m=!1,e=p[c]&&p[c].call(this,d,c),e!==!1&&d!==null){e!==u&&(d=e);if(j&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))k||(this.symbolAttr(a),k=!0),m=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");f.path=d=this.pathToVML(d);if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d,l[e].cutOff):d;m=!0}else if(c==="visibility"){if(l)for(e=l.length;e--;)l[e].style[c]=d;h==="DIV"&&(d=d==="hidden"?"-999em":0,fb||(g[c]=d?"visible":"hidden"),c="top");g[c]=d;m=!0}else if(c==="zIndex")d&& +(g[c]=d),m=!0;else if(ta(c,["x","y","width","height"])!==-1)this[c]=d,c==="x"||c==="y"?c={x:"left",y:"top"}[c]:d=t(0,d),this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,m=!0;else if(c==="class"&&h==="DIV")f.className=d;else if(c==="stroke")d=i.color(d,f,c),c="strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]=d,xa(d)&&(d+="px");else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]||T(i.prepVML([""]),null,null,f))[c]=d|| +"solid",this.dashstyle=d,m=!0;else if(c==="fill")if(h==="SPAN")g.color=d;else{if(h!=="IMG")f.filled=d!==Q?!0:!1,d=i.color(d,f,c,this),c="fillcolor"}else if(c==="opacity")m=!0;else if(h==="shape"&&c==="rotation")this[c]=f.style[c]=d,f.style.left=-w($(d*Ca)+1)+"px",f.style.top=w(U(d*Ca))+"px";else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.updateTransform(),m=!0;m||(fb?f[c]=d:y(f,c,d))}return q},clip:function(a){var b=this,c;a?(c=a.members,fa(c,b),c.push(b),b.destroyClip=function(){fa(c, +b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:fb?"inherit":"rect(auto)"});return b.css(a)},css:qa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Oa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return qa.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=C.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=z(a[c-2])-10*b;return a.join(" ")}, +shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,l,m,p,q;k&&typeof k.value!=="string"&&(k="x");m=k;if(a){p=o(a.width,3);q=(a.opacity||0.15)/p;for(e=1;e<=3;e++){l=p*2+1-2*e;c&&(m=this.cutOffPath(k.value,l+0.5));j=[''];h=T(g.prepVML(j),null,{left:z(i.left)+o(a.offsetX,1),top:z(i.top)+o(a.offsetY,1)});if(c)h.cutOff=l+1;j=[''];T(g.prepVML(j),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this}};R=ga(qa,R);var xb={Element:R,isIE8:sa.indexOf("MSIE 8.0")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(Ha);e=d.element;e.style.position="relative";a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!v.namespaces.hcv){v.namespaces.add("hcv","urn:schemas-microsoft-com:vml"); +try{v.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){v.styleSheets[0].cssText+="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=S(a);return r(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b= +a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+w(a?e:d)+"px,"+w(a?f:b)+"px,"+w(a?b:f)+"px,"+w(a?d:e)+"px)"};!a&&fb&&c==="DIV"&&r(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){n(e.members,function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=Q;a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var k,l,m=a.linearGradient||a.radialGradient, +p,q,o,H,t,s="",a=a.stops,w,r=[],u=function(){h=[''];T(e.prepVML(h),null,null,b)};p=a[0];w=a[a.length-1];p[0]>0&&a.unshift([0,p[1]]);w[0]<1&&a.push([1,w[1]]);n(a,function(a,b){g.test(a[1])?(f=ua(a[1]),k=f.get("rgb"),l=f.get("a")):(k=a[1],l=1);r.push(a[0]*100+"% "+k);b?(o=l,H=k):(q=l,t=k)});if(c==="fill")if(i==="gradient")c=m.x1||m[0]||0,a=m.y1||m[1]||0,p=m.x2||m[2]||0,m=m.y2||m[3]||0,s='angle="'+ +(90-P.atan((m-a)/(p-c))*180/Ba)+'"',u();else{var j=m.r,x=j*2,Z=j*2,y=m.cx,B=m.cy,v=b.radialReference,ja,j=function(){v&&(ja=d.getBBox(),y+=(v[0]-ja.x)/ja.width-0.5,B+=(v[1]-ja.y)/ja.height-0.5,x*=v[2]/ja.width,Z*=v[2]/ja.height);s='src="'+G.global.VMLRadialGradientURL+'" size="'+x+","+Z+'" origin="0.5,0.5" position="'+y+","+B+'" color2="'+t+'" ';u()};d.added?j():F(d,"add",j);j=H}else j=k}else if(g.test(a)&&b.tagName!=="IMG")f=ua(a),h=["<",c,' opacity="',f.get("a"),'"/>'],T(this.prepVML(h),null,null, +b),j=f.get("rgb");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type="solid";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","1&&f.attr({x:b,y:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){var g=this.symbol("rect");g.r= +S(a)?a.r:e;return g.attr(S(a)?a:g.crisp(f,a,b,t(c,0),t(d,0)))},invertChild:function(a,b){var c=b.style;D(a,{flip:"x",left:z(c.width)-1,top:z(c.height)-1,rotation:-90})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=U(f),i=$(f),j=U(g),k=$(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r); +e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,"e"]},rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!s(e)||!e.r?f=va.prototype.symbols.square.apply(0,arguments):(h=I(e.r,c,d),f=["M",a+h,b,"L",f-h,b,"wa",f-2*h,b,f,b+2*h,f-h,b,f,b+h,"L",f,g-h,"wa",f-2*h,g-2*h,f,g,f,g-h,f-h,g,"L",a+h,g,"wa",a,g-2*h,a+2*h,g,a+h,g,a,g-h,"L",a,b+h,"wa",a,b,a+2*h,b+2*h,a,b+h,a+h,b,"x","e"]);return f}}};Highcharts.VMLRenderer=R=function(){this.init.apply(this,arguments)};R.prototype=x(va.prototype, +xb);Xa=R}va.prototype.measureSpanWidth=function(a,b){var c=v.createElement("span"),d;d=v.createTextNode(a);c.appendChild(d);D(c,b);this.box.appendChild(c);d=c.offsetWidth;Oa(c);return d};var Mb;if(ba)Highcharts.CanVGRenderer=R=function(){Da="http://www.w3.org/1999/xhtml"},R.prototype.symbols={},Mb=function(){function a(){var a=b.length,d;for(d=0;dq[p]?q[p]=g+j:o||(c=!1);if(o)B=(d=d.ticks[i[a+(e?1:-1)]])&&d.label.xy&&d.label.xy.x+d.getLabelSides()[e?0:1],i=B,e&&!h||f&&h?g+ki&&(c=!1)):g+j>m&&(g= +m-j,d&&g+k0&&b.height>0){f=x({align:c&&k&& +"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g)a.label=g=u.text(f.text,0,0,f.useHTML).attr({align:f.textAlign||f.align,rotation:f.rotation,zIndex:w}).css(f.style).add();b=[q[1],q[4],o(q[6],q[1])];q=[q[2],q[5],o(q[7],q[2])];c=Ma(b);k=Ma(q);g.align(f,!1,{x:c,y:k,width:Aa(b)-c,height:Aa(q)-k});g.show()}else g&&g.hide();return a},destroy:function(){fa(this.axis.plotLinesAndBands,this);delete this.axis;Na(this)}};ra.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L", +second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:J,lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#4d759e", +fontWeight:"bold"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return Ea(this.total,-1)},style:J.style}},defaultLeftAxisOptions:{labels:{x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:8,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0, +y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-5},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?"xAxis":"yAxis";this.opposite=b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!== +!1;this.categories=d.categories||e==="category";this.names=[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=s(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement==="between"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stackExtremes={};this.min= +this.max=null;this.crosshair=o(d.crosshair,ka(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;ta(this,a.axes)===-1&&(a.axes.push(this),a[this.coll].push(this));this.series=this.series||[];if(a.inverted&&c&&this.reversed===u)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)F(this,f,d[f]);if(this.isLog)this.val2lin=ya,this.lin2val=ea},setOptions:function(a){this.options=x(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions, +this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],x(G[this.coll],a))},defaultLabelFormatter:function(){var a=this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=G.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ga(h,this);else if(c)g=b;else if(d)g=$a(d,b);else if(f&&a>=1E3)for(;f--&&g===u;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Ea(b/c,-1)+e[f]);g===u&&(g=b>=1E4?Ea(b,0):Ea(b,-1,u,"")); +return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.stackExtremes={};a.buildStacks();n(a.series,function(c){if(c.visible||!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=I(o(a.dataMin,d[0]),Ma(d)),a.dataMax=t(o(a.dataMax,d[0]),Aa(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(s(c)&&s(e))a.dataMin=I(o(a.dataMin,c),c),a.dataMax= +t(o(a.dataMax,e),e);if(s(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMaxg+this.width)m=!0}else if(a=g,c=l-this.right,ih+this.height)m=!0;return m&&!d?null:f.renderer.crispLine(["M",a,i,"L",c,j],b||1)},getLinearTickPositions:function(a,b,c){for(var d,b=ha(N(b/a)*a),c=ha(Ia(c/a)*a),e=[];b<=c;){e.push(b);b=ha(b+a);if(b===d)break;d=b}return e},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===u&&!this.isLog)s(a.min)||s(a.max)?this.minRange=null:(n(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length- +1;g>0;g--)if(h=i[g]-i[g-1],f===u||hb&&(g=0);c=t(c,g);e=t(e,da(i)?0:g/2);f=t(f,i==="on"?0:g);!a.noSharedTooltip&&s(m)&&(d=s(d)?I(d,m):m)}),g=this.ordinalSlope&&d?this.ordinalSlope/d:1,this.minPointOffset=e*=g,this.pointRangePadding=f*=g,this.pointRange=I(c,b),this.closestPointRange=d;if(a)this.oldTransA=i;this.translationSlope=this.transA=i=this.len/(b+f||1);this.transB=this.horiz?this.left:this.bottom;this.minPixelPadding=i*e},setTickPositions:function(a){var b= +this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,k=d.minPadding,l=d.tickInterval,m=d.minTickInterval,p=d.tickPixelInterval,q,na=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=o(c.min,c.dataMin),b.max=o(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&la(11,1)):(b.min=o(b.userMin,d.min,b.dataMin),b.max=o(b.userMax,d.max,b.dataMax));if(e)!a&&I(b.min,o(b.dataMin,b.min))<=0&&la(10, +1),b.min=ha(ya(b.min)),b.max=ha(ya(b.max));if(b.range&&s(b.max))b.userMin=b.min=t(b.min,b.max-b.range),b.userMax=b.max,b.range=null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!na&&!b.usePercentage&&!h&&s(b.min)&&s(b.max)&&(c=b.max-b.min)){if(!s(d.min)&&!s(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!s(d.max)&&!s(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&p===b.linkedParent.options.tickPixelInterval? +b.tickInterval=b.linkedParent.tickInterval:(b.tickInterval=o(l,na?1:(b.max-b.min)*p/t(b.len,p)),!s(l)&&b.lent(2*b.len,200)&&la(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange, +!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),q&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h(b[d]||0)&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==u){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e=this.dataMax&&(b=u));this.displayBtn=a!==u||b!==u;this.setExtremes(a,b,!1,u,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0,e=this.horiz,f,g;this.left=g=o(b.left,a.plotLeft+c);this.top=f=o(b.top,a.plotTop);this.width=c=o(b.width,a.plotWidth-c+d);this.height=b=o(b.height,a.plotHeight);this.bottom=a.chartHeight-b-f;this.right=a.chartWidth-c-g;this.len=t(e?c:b,0);this.pos=e?g:f},getExtremes:function(){var a= +this.isLog;return{min:a?ha(ea(this.min)):this.min,max:a?ha(ea(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ea(this.min):this.min,b=b?ea(this.max):this.max;c>a||a===null?a=c:b15&&a<165?"right":a>195&&a<345?"left":"center"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options, +e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,m=0,p=d.title,q=d.labels,na=0,H=b.axisOffset,w=b.clipOffset,r=[-1,1,1,-1][h],v,x=1,y=o(q.maxStaggerLines,5),z,Z,K,B;a.hasData=j=a.hasVisibleSeries||s(a.min)&&s(a.max)&&!!e;a.showAxis=b=j||o(d.showEmpty,!0);a.staggerLines=a.horiz&&q.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g("axis-labels").attr({zIndex:q.zIndex|| +7}).add();if(j||a.isLinked){a.labelAlign=o(q.align||a.autoLabelAlign(q.rotation));n(e,function(b){f[b]?f[b].addLabel():f[b]=new Ra(a,b)});if(a.horiz&&!a.staggerLines&&y&&!q.rotation){for(v=a.reversed?[].concat(e).reverse():e;x1)a.staggerLines=x}n(e,function(b){if(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign)na= +t(f[b].getLabelSize(),na)});if(a.staggerLines)na*=a.staggerLines,a.labelOffset=na}else for(v in f)f[v].destroy(),delete f[v];if(p&&p.text&&p.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(p.text,0,0,p.useHTML).attr({zIndex:7,rotation:p.rotation||0,align:p.textAlign||{low:"left",middle:"center",high:"right"}[p.align]}).css(p.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?"height":"width"],m=o(p.margin,g?5:10),l=p.offset;a.axisTitle[b?"show":"hide"]()}a.offset=r*o(d.offset, +H[h]);a.axisTitleMargin=o(l,na+m+(h!==2&&na&&r*d.labels[g?"y":"x"]));H[h]=t(H[h],a.axisTitleMargin+k+r*a.offset);w[i]=t(w[i],N(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left, +c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=z(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked,i=a.tickPositions,j,k=a.axisTitle,l=a.stacks,m=a.ticks,p=a.minorTicks, +q=a.alternateBands,o=f.stackLabels,H=f.alternateGridColor,t=a.tickmarkOffset,w=f.lineWidth,r=d.hasRendered&&s(a.oldMin)&&!isNaN(a.oldMin),v=a.hasData,x=a.showAxis,y,z=a.justifyLabels=!a.staggerLines&&b&&f.labels.overflow==="justify",K;a.labelEdge.length=0;n([m,p,q],function(a){for(var b in a)a[b].isActive=!1});if(v||h)if(a.minorTickInterval&&!a.categories&&n(a.getMinorTickPositions(),function(b){p[b]||(p[b]=new Ra(a,b,"minor"));r&&p[b].isNew&&p[b].render(null,!0);p[b].render(null,!1,1)}),i.length&& +(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),z&&(j=j.slice(1).concat([j[0]])),n(j,function(b,c){z&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<=a.max)m[b]||(m[b]=new Ra(a,b)),r&&m[b].isNew&&m[b].render(c,!0,0.1),m[b].render(c,!1,1)}),t&&a.min===0&&(m[-1]||(m[-1]=new Ra(a,-1,null,!0)),m[-1].render(-1))),H&&n(i,function(b,c){if(c%2===0&&b=0.5)a=w(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=N(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];fb&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ea(b),c=ea(c),a=e[d?"minorTickInterval":"tickInterval"],a=o(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)|| +1)),a=mb(a,null,lb(a)),g=Sa(this.getLinearTickPositions(a,b,c),ya),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g};ra.prototype.getTimeTicks=function(a,b,c,d){var e=[],f={},g=G.global.useUTC,h,i=new Date(b-Qa),j=a.unitRange,k=a.count;if(s(b)){j>=E.second&&(i.setMilliseconds(0),i.setSeconds(j>=E.minute?0:k*N(i.getSeconds()/k)));if(j>=E.minute)i[Cb](j>=E.hour?0:k*N(i[ob]()/k));if(j>=E.hour)i[Db](j>=E.day?0:k*N(i[pb]()/k));if(j>=E.day)i[rb](j>=E.month?1:k*N(i[Va]()/k));j>=E.month&& +(i[Eb](j>=E.year?0:k*N(i[cb]()/k)),h=i[db]());j>=E.year&&(h-=h%k,i[Fb](h));if(j===E.week)i[rb](i[Va]()-i[qb]()+o(d,1));b=1;Qa&&(i=new Date(i.getTime()+Qa));h=i[db]();for(var d=i.getTime(),l=i[cb](),m=i[Va](),p=g?Qa:(864E5+i.getTimezoneOffset()*6E4)%864E5;d1||M(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a=this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},o(this.options.hideDelay,500)),b&&n(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted, +f=d.plotTop,g=0,h=0,i,a=ka(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===u&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(n(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Sa(c,w)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth,h=d.plotHeight,i=o(this.options.distance, +12),j=c.plotX,c=c.plotY,d=j+e+(d.inverted?i:-a-i),k=c-b+f+15,l;d<7&&(d=e+t(j,0)+i);d+a>e+g&&(d-=d+a-(e+g),k=c-b+f-i,l=!0);k=k&&c<=k+b&&(k=c+f+i));k+b>f+h&&(k=t(f,f+h-b-i));return{x:d,y:k}},defaultFormatter:function(a){var b=this.points||ka(this),c=b[0].series,d;d=[c.tooltipHeaderFormatter(b[0])];n(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});d.push(a.options.footerFormat||"");return d.join("")}, +refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=ka(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&n(h,function(a){a.setState()}),n(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),h={x:a[0].category,y:a[0].y},h.points=j,a=a[0]):h=a.getLabelConfig(); +i=i.call(h,this);h=a.series;i===!1?this.hide():(this.isHidden&&(Ya(d),d.attr("opacity",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||"#606060",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g}),this.isHidden=!1);A(c,"tooltipRefresh",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(w(c.x),w(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)}}; +var Za=Highcharts.Pointer=function(a,b){this.init(a,b)};Za.prototype={init:function(a,b){var c=b.chart,d=c.events,e=ba?"":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(b.tooltip.enabled)a.tooltip=new sb(a,b.tooltip);this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||C.event;if(!a.target)a.target=a.srcElement; +a=Rb(a);d=a.touches?a.touches.item(0):a;if(!b)this.chartPosition=b=Qb(this.chart.container);d.pageX===u?(c=t(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return r(a,{chartX:w(c),chartY:w(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};n(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft}, +runPointActions:function(a){var b=this,c=b.chart,d=c.series,e=c.tooltip,f,g,h=c.hoverPoint,i=c.hoverSeries,j,k,l=c.chartWidth,m=b.getIndex(a);if(e&&b.options.tooltip.shared&&(!i||!i.noSharedTooltip)){g=[];j=d.length;for(k=0;kl&&g.splice(j,1);if(g.length&&g[0].clientX!==b.hoverX)e.refresh(g, +a),b.hoverX=g[0].clientX}if(i&&i.tracker){if((f=i.tooltipPoints[m])&&f!==h)f.onMouseOver(a)}else e&&e.followPointer&&!e.isHidden&&(d=e.getAnchor([{}],a),e.updatePosition({plotX:d[0],plotY:d[1]}));if(e&&!b._onDocumentMouseMove)b._onDocumentMouseMove=function(a){b.onDocumentMouseMove(a)},F(v,"mousemove",b._onDocumentMouseMove);n(c.axes,function(b){b.drawCrosshair(a,o(h,f))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&ka(f)[0].plotX=== +u&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)X(v,"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove=null;n(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;n(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&& +e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},pinchTranslate:function(a,b,c,d,e,f,g,h){a&&this.pinchTranslateDirection(!0,c,d,e,f,g,h);b&&this.pinchTranslateDirection(!1,c,d,e,f,g,h)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?"x":"y",k=a?"X":"Y",l="chart"+k,m=a?"width":"height",p=i["plot"+(a?"Left":"Top")],q,o,n=h||1,t=i.inverted,w=i.bounds[a?"h":"v"],r=b.length===1,s=b[0][l],u=c[0][l],v=!r&&b[1][l],x=!r&&c[1][l],y,c=function(){!r&&M(s-v)>20&&(n=h||M(u-x)/ +M(s-v));o=(p-u)/n+s;q=i["plot"+(a?"Width":"Height")]/n};c();b=o;bw.max&&(b=w.max-q,y=!0);y?(u-=0.8*(u-g[j][0]),r||(x-=0.8*(x-g[j][1])),c()):g[j]=[u,x];t||(f[j]=o-p,f[m]=q);f=t?1/n:n;e[m]=q;e[j]=b;d[t?a?"scaleY":"scaleX":"scale"+k]=n;d["translate"+k]=f*p+(u-f*s)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=c.tooltip&&c.tooltip.options.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.zoomHor||b.pinchHor,j=b.zoomVert||b.pinchVert,k=i||j,l=b.selectionMarker, +m={},p=g===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||c.runChartClick),q={};(k||e)&&!p&&a.preventDefault();Sa(f,function(a){return b.normalize(a)});if(a.type==="touchstart")n(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],n(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"],d=a.minPixelPadding,e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=I(e,f),e=t(e,f);b.min=I(a.pos,g-d); +b.max=t(a.pos+a.len,e+d)}});else if(d.length){if(!l)b.selectionMarker=l=r({destroy:ma},c.plotBox);b.pinchTranslate(i,j,d,f,m,l,q,h);b.hasPinched=k;b.scaleGroups(m,q);!k&&e&&g===1&&this.runPointActions(b.normalize(a))}},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop, +j=b.plotWidth,k=b.plotHeight,l,m=this.mouseDownX,p=this.mouseDownY;dh+j&&(d=h+j);ei+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(m-d,2)+Math.pow(p-e,2));if(this.hasDragged>10){l=b.isInsidePlot(m-h,p-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();this.selectionMarker&&f&&(d-=m,this.selectionMarker.attr({width:M(d),x:(d> +0?0:d)+m}));this.selectionMarker&&g&&(d=e-p,this.selectionMarker.attr({height:M(d),y:(d>0?0:d)+p}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},e=this.selectionMarker,f=e.x,g=e.y,h;if(this.hasDragged||c)n(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?f:g),b=a.toValue(b?f+e.width:g+e.height);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a, +min:I(c,b),max:t(c,b)}),h=!0)}}),h&&A(b,"selection",d,function(a){b.zoom(r(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)D(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){this.drop(a)},onDocumentMouseMove:function(a){var b= +this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){this.reset();this.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart,a=this.normalize(a);b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)}, +inClass:function(a,b){for(var c;a;){if(c=y(a,"class"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf("highcharts-container")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,a=a.relatedTarget||a.toElement,c=a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,f=b.inverted,g,h,i,a=this.normalize(a);a.cancelBubble= +!0;if(!b.cancelClick)c&&this.inClass(a.target,"highcharts-tracker")?(g=this.chartPosition,h=c.plotX,i=c.plotY,r(c,{pageX:g.left+d+(f?b.plotWidth-i:h),pageY:g.top+e+(f?b.plotHeight-h:i)}),A(c.series,"click",r(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(r(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&A(b,"click",a))},onContainerTouchStart:function(a){var b=this.chart;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a), +this.pinch(a)):this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){this.drop(a)},setDOMEvents:function(){var a=this,b=a.chart.container,c;this._events=c=[[b,"onmousedown","onContainerMouseDown"],[b,"onmousemove","onContainerMouseMove"],[b,"onclick","onContainerClick"],[b,"mouseleave","onContainerMouseLeave"],[v,"mouseup","onDocumentMouseUp"]];hb&&c.push([b,"ontouchstart","onContainerTouchStart"], +[b,"ontouchmove","onContainerTouchMove"],[v,"touchend","onDocumentTouchEnd"]);n(c,function(b){a["_"+b[2]]=function(c){a[b[2]](c)};b[1].indexOf("on")===0?b[0][b[1]]=a["_"+b[2]]:F(b[0],b[1],a["_"+b[2]])})},destroy:function(){var a=this;n(a._events,function(b){b[1].indexOf("on")===0?b[0][b[1]]=null:X(b[0],b[1],a["_"+b[2]])});delete a._events;clearInterval(a.tooltipTimeout)}};J=Highcharts.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d= +c.target,e;if(b.hoverSeries!==a)a.onMouseOver();for(;d&&!e;)e=d.point,d=d.parentNode;if(e!==u&&e!==b.hoverPoint)e.onMouseOver(c)};n(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)n(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),hb))a[b].on("touchstart",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options, +c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,p=function(){if(f.hoverSeries!==a)a.onMouseOver()};if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-i,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+i,d[m-1]);for(m=0;mc-6&&g(p||c.chartWidth-2*k-r))b.itemX=r,b.itemY+=n+b.lastLineHeight+q,b.lastLineHeight=0;b.maxItemWidth=t(b.maxItemWidth,e);b.lastItemY=n+b.itemY+q;b.lastLineHeight=t(g,b.lastLineHeight); +a._legendItemPos=[b.itemX,b.itemY];f?b.itemX+=e:(b.itemY+=n+g+q,b.lastLineHeight=g);b.offsetWidth=p||t((f?b.itemX-r-l:e)+k,b.offsetWidth)},getAllItems:function(){var a=[];n(this.chart.series,function(b){var c=b.options;if(o(c.showInLegend,!s(c.linkedTo)?u:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY= +a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=a.getAllItems();nb(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;n(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h); +if(l||m){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp(null,null,null,g,h)),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,"stroke-width":l||0,fill:m||Q}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;n(e,function(b){a.positionItem(b)});f&&d.align(r({width:g,height:h},j),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options, +f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,j=e.navigation,k=o(j.animation,!0),l=j.arrowSize||12,m=this.nav,p=this.pages,q,t=this.allItems;e.layout==="horizontal"&&(f/=2);g&&(f=I(f,g));p.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=o(this.currentPage,1);this.fullHeight=a;n(t,function(a,b){var c=a._legendItemPos[1],d=w(a.legendItem.bBox.height),e=p.length;if(!e||c-p[e-1]>h)p.push(q||c); +b===t.length-1&&c+d-p[e-1]>h&&p.push(c);c!==q&&(q=c)});if(!i)i=b.clipRect=d.clipRect(0,this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!m)this.nav=m=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,l,l).on("click",function(){b.scroll(-1,k)}).add(m),this.pager=d.text("",15,10).css(j.style).add(m),this.down=d.symbol("triangle-down",0,0,l,l).on("click",function(){b.scroll(1,k)}).add(m);b.scroll(0);a=f}else if(m)i.attr({height:c.chartHeight}),m.hide(),this.scrollGroup.attr({translateY:1}), +this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,h=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==u&&Pa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e=== +d?"default":"pointer"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};R=Highcharts.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,o(a.options.symbolRadius,2)).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline- +w(e.fontMetrics(a.options.itemStyle.fontSize).b*0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};/Trident\/7\.0/.test(sa)&&Ua(zb.prototype,"positionItem",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};c.chart.renderer.forExport?d():setTimeout(d)});eb.prototype={init:function(a, +b){var c,d=a.series;a.series=null;c=x(G,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=Ja.length;Ja.push(f);d.reflow!==!1&&F(f,"load",function(){f.initReflow()});if(e)for(g in e)F(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=ba?!1:o(d.animation, +!0);f.pointCount=0;f.counters=new Ab;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=L[a.type||b.type||b.defaultSeriesType])||la(17,!0);b=new b;b.init(this,a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&n(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend, +f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,m=l.isHidden(),p=[];Pa(a,this);m&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;n(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,n(b,function(a){a.setScale()}); +this.adjustTickAmounts();this.getMargins();n(b,function(a){a.isDirty&&(i=!0)});n(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,p.push(function(){A(a,"afterSetExtremes",r(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();n(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset&&d.reset(!0);l.draw();A(this,"redraw");m&&this.cloneRenderTo(!0);n(p,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series, +d,e;for(d=0;dI(k.dataMin,k.min)&&i=18&&a<=25&&(a=15);c&&(c.css({width:(d.width||f)+"px"}).align(r({y:a+e.margin},d),!1,"spacingBox"),!d.floating&& +!d.verticalAlign&&(a=Ia(a+c.getBBox().height)));this.titleOffset=a},getChartSize:function(){var a=this.options.chart,b=this.renderToClone||this.renderTo;this.containerWidth=ib(b,"width");this.containerHeight=ib(b,"height");this.chartWidth=t(0,a.width||this.containerWidth||600);this.chartHeight=t(0,o(a.height,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Oa(b),delete this.renderToClone):(c&& +c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),D(b,{position:"absolute",top:"-9999px",display:"block"}),v.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+tb++;if(da(a))this.renderTo=a=v.getElementById(a);a||la(13,!0);c=z(y(a,"data-highcharts-chart"));!isNaN(c)&&Ja[c]&&Ja[c].destroy();y(a,"data-highcharts-chart",this.index);a.innerHTML="";a.offsetWidth|| +this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=T(Ha,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},r({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new va(a,c,d,!0):new Xa(a,c,d);ba&&this.renderer.create(this,a,c,d)},getMargins:function(){var a= +this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,f=o(e.margin,10),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!s(d[0]))this.plotTop=t(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i==="right"){if(!s(d[1]))this.marginRight=t(this.marginRight,c.legendWidth-g+f+a[1])}else if(i==="left"){if(!s(d[3]))this.plotLeft=t(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j==="top"){if(!s(d[0]))this.plotTop=t(this.plotTop, +c.legendHeight+h+f+a[0])}else if(j==="bottom"&&!s(d[2]))this.marginBottom=t(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&n(this.axes,function(a){a.getOffset()});s(d[3])||(this.plotLeft+=b[3]);s(d[0])||(this.plotTop+=b[0]);s(d[2])||(this.marginBottom+=b[2]);s(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this,c=b.options.chart, +d=b.renderTo,e=c.width||ib(d,"width"),f=c.height||ib(d,"height"),c=a?a.target:C,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===C||c===v)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth=e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};F(C,"resize",b);F(a,"destroy",function(){X(C,"resize",b)})},setSize:function(a,b,c){var d=this,e, +f,g;d.isResizing+=1;g=function(){d&&A(d,"endResize",null,function(){d.isResizing-=1})};Pa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(s(a))d.chartWidth=e=t(0,w(a)),d.hasUserSize=!!e;if(s(b))d.chartHeight=f=t(0,w(b));(pa?jb:D)(d.container,{width:e+"px",height:f+"px"},pa);d.setChartSize(!0);d.renderer.setSize(e,f,c);d.maxTicks=null;n(d.axes,function(a){a.isDirty=!0;a.setScale()});n(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.getMargins();d.redraw(c); +d.oldChartHeight=null;A(d,"resize");pa===!1?g():setTimeout(g,pa&&pa.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=w(this.plotLeft);this.plotTop=j=w(this.plotTop);this.plotWidth=k=t(0,w(d-i-this.marginRight));this.plotHeight=l=t(0,w(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox= +c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*N(this.plotBorderWidth/2);b=Ia(t(d,h[3])/2);c=Ia(t(d,h[0])/2);this.clipBox={x:b,y:c,width:N(this.plotSizeX-t(d,h[1])/2-b),height:N(this.plotSizeY-t(d,h[2])/2-c)};a||n(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=o(b[0],a[0]);this.marginRight=o(b[1],a[1]);this.marginBottom=o(b[2],a[2]);this.plotLeft= +o(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||0,p,q=this.plotLeft,o=this.plotTop,n=this.plotWidth,t=this.plotHeight,s=this.plotBox,r=this.clipRect,w=this.clipBox;p=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp(null, +null,null,c-p,d-p));else{e={fill:j||Q};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(p/2,p/2,c-p,d-p,a.borderRadius,i).attr(e).add().shadow(a.shadow)}if(k)f?f.animate(s):this.plotBackground=b.rect(q,o,n,t,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(s):this.plotBGImage=b.image(l,q,o,n,t).add();r?r.animate({width:w.width,height:w.height}):this.clipRect=b.clipRect(w);if(m)g?g.animate(g.crisp(null,q,o,n,t)):this.plotBorder=b.rect(q,o,n,t,0,-m).attr({stroke:a.plotBorderColor, +"stroke-width":m,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;n(["inverted","angular","polar"],function(g){c=L[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=L[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;n(b,function(a){a.linkedSeries.length=0});n(b,function(b){var d=b.options.linkedTo;if(da(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b), +b.linkedParent=d})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,f=d.credits,g;a.setTitle();a.legend=new zb(a,d.legend);a.getStacks();n(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;n(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&n(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();n(a.series,function(a){a.translate();a.setTooltipPoints(); +a.render()});e.items&&n(e.items,function(b){var d=r(e.style,b.style),f=z(d.left)+a.plotLeft,g=z(d.top)+a.plotTop+12;delete d.left;delete d.top;c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on("click",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;A(a,"destroy");Ja[a.index]= +u;a.renderTo.removeAttribute("data-highcharts-chart");X(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();n("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML="",X(d),f&&Oa(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!V&&C==C.top&&v.readyState!== +"complete"||ba&&!C.canvg?(ba?Mb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):v.attachEvent("onreadystatechange",function(){v.detachEvent("onreadystatechange",a.firstRender);v.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender())a.getContainer(),A(a,"init"),a.resetMargins(),a.setChartSize(),a.propFromSeries(),a.getAxes(),n(b.series||[],function(b){a.initSeries(b)}),a.linkSeries(),A(a,"beforeRender"), +a.pointer=new Za(a,b),a.render(),a.renderer.draw(),c&&c.apply(a,[a]),n(a.callbacks,function(b){b.apply(a,[a])}),a.cloneRenderTo(!0),A(a,"load")},splashArray:function(a,b){var c=b[a],c=S(c)?c:[c,c,c,c];return[o(b[a+"Top"],c[0]),o(b[a+"Right"],c[1]),o(b[a+"Bottom"],c[2]),o(b[a+"Left"],c[3])]}};eb.prototype.callbacks=[];var xb=Highcharts.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[o(b[0],"50%"), +o(b[1],"50%"),a.size||"100%",a.innerSize||0],g=I(e,f),h;return Sa(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*z(a)/100:a)+(d?c:0)})}},Ka=function(){};Ka.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series, +d=c.pointValKey,a=Ka.prototype.optionsToObject.call(this,a);r(this,a);this.options=this.options?r(this.options,a):a;if(d)this.y=this[d];if(this.x===u&&c)this.x=b===u?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||["y"],e=d.length,f=0,g=0;if(typeof a==="number"||a===null)b[d[0]]=a;else if(La(a)){if(a.length>e){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];f++}for(;ga+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments= +b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=x(e,c.series,a);this.tooltipOptions=x(G.tooltip,G.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,e;e=a.color||Y[this.type].color;if(!e&&!a.colorByPoint)s(b._colorIndex)? +a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)s(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:R.drawLineMarker,setData:function(a,b){var c=this,d=c.points,e=c.options,f=c.chart,g=null, +h=c.xAxis,i=h&&!!h.categories,j;c.xIncrement=null;c.pointRange=i?1:e.pointRange;c.colorCounter=0;var a=a||[],k=a.length;j=e.turboThreshold;var l=this.xData,m=this.yData,p=c.pointArrayMap,p=p&&p.length;n(this.parallelArrays,function(a){c[a+"Data"].length=0});if(j&&k>j){for(j=0;g===null&&jj||this.forceCrop))if(a=h.min,h=h.max,b[d-1]h)b=[],c=[];else if(b[0]h)e=this.cropData(this.xData,this.yData,a,h),b=e.xData,c=e.yData,e=e.start,f=!0;for(h=b.length-1;h>=0;h--)d=b[h]-b[h-1],d>0&&(g===u||d=c){f=t(0,i-h);break}for(;id){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m0),j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=o(void 0,Ma(e));this.dataMax=o(void 0,Aa(e))},translate:function(){this.processedXData||this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i=== +"between"||xa(i),k=a.threshold,a=0;a=f.min&&c<=f.max){h=b[i+1];c=d===u?0:d+1;for(d=b[i+1]?I(t(0,N((e.clientX+(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.dateTimeLabelFormats,d=b.xDateFormat||c.year,e=this.xAxis,f=e&&e.options.type==="datetime",b=b.headerFormat,e=e&&e.closestPointRange,g;if(f&&!d)if(e)for(g in E){if(E[g]>=e){d=c[g]; +break}}else d=c.day;f&&d&&xa(a.key)&&(b=b.replace("{point.key}","{point.key:"+d+"}"));return Ga(b,{point:a,series:this})},onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&A(this,"mouseOver");this.setState("hover");a.hoverSeries=this},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&A(this,"mouseOut");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&& +c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b=this,c=b.chart,d=c.renderer,e;e=b.options.animation;var f=c.clipBox,g=c.inverted,h;if(e&&!S(e))e=Y[b.type].animation;h="_sharedClip"+e.duration+e.easing;if(a)a=c[h],e=c[h+"m"],a||(c[h]=a=d.clipRect(r(f,{width:0})),c[h+"m"]=e=d.clipRect(-99,g?-c.plotLeft:-c.plotTop,99,g?c.chartWidth:c.chartHeight)),b.group.clip(a),b.markerGroup.clip(e),b.sharedClipKey=h;else{if(a=c[h])a.animate({width:c.plotSizeX},e),c[h+"m"].animate({width:c.plotSizeX+ +99},e);b.animate=null;b.animationTimeout=setTimeout(function(){b.afterAnimate()},e.duration)}},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,c=this.group;c&&this.options.clip!==!1&&(c.clip(a.clipRect),this.markerGroup.clip());setTimeout(function(){b&&a[b]&&(a[b]=a[b].destroy(),a[b+"m"]=a[b+"m"].destroy())},100)},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,j,k,l=this.options.marker,m=this.pointAttr[""],p,q=this.markerGroup;if(l.enabled||this._hasPointMarkers)for(f= +b.length;f--;)if(g=b[f],d=N(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=l.enabled&&i.enabled===u||i.enabled,p=c.isInsidePlot(w(d),e,c.inverted),a&&e!==u&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?"select":""]||m,h=a.r,i=o(i.symbol,this.symbol),j=i.indexOf("url")===0,k)k.attr({visibility:p?V?"inherit":"visible":"hidden"}).animate(r({x:d-h,y:e-h},k.symbolName?{width:2*h,height:2*h}:{}));else{if(p&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(q)}else if(k)g.graphic= +k.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=o(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=Y[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color;f={stroke:g,fill:g};var h=a.points||[],i,j=[],k,l=a.pointAttrToOptions;i=b.turboThreshold;var m=b.negativeColor,p=c.lineColor,q;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=e.color|| +ua(e.color||g).brighten(e.brightness).get();j[""]=a.convertAttribs(c,f);n(["hover","select"],function(b){j[b]=a.convertAttribs(d[b],j[""])});a.pointAttr=j;g=h.length;if(!i||g1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!=="square",g=this.getGraphPath(),h=b.negativeColor; +h&&c.push(["graphNeg",h]);n(c,function(c,h){var k=c[0],l=a[k];if(l)Ya(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],"stroke-width":d,zIndex:1},e?l.dashstyle=e:f&&(l["stroke-linecap"]=l["stroke-linejoin"]="round"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=b.chartHeight,k=t(e,j), +l=this.yAxis;if(d&&(f||g)){d=w(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},invertGroups:function(){function a(){var a= +{width:b.yAxis.len,height:b.xAxis.len};n(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)F(c,"resize",a),F(b,"destroy",function(){X(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){return{translateX:this.xAxis?this.xAxis.left:this.chart.plotLeft,translateY:this.yAxis? +this.yAxis.top:this.chart.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this.chart,b,c=this.options,d=c.animation&&!!this.animate&&a.renderer.isSVG,e=this.visible?"visible":"hidden",f=c.zIndex,g=this.hasRendered,h=a.seriesGroup;b=this.plotGroup("group","series",e,f,h);this.markerGroup=this.plotGroup("markerGroup","markers",e,f,h);d&&this.animate(!0);this.getAttribs();b.inverted=this.isCartesian?a.inverted:!1;this.drawGraph&&(this.drawGraph(),this.clipNeg());this.drawDataLabels&&this.drawDataLabels(); +this.visible&&this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();a.inverted&&this.invertGroups();c.clip!==!1&&!this.sharedClipKey&&!g&&b.clip(a.clipRect);d?this.animate():g||this.afterAnimate();this.isDirty=this.isDirtyData=!1;this.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:o(d&&d.left,a.plotLeft),translateY:o(e&&e.top,a.plotTop)})); +this.translate();this.setTooltipPoints(!0);this.render();b&&A(this,"updatedData")},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg,e=b.states,b=b.lineWidth,a=a||"";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&&(a={"stroke-width":b},c.attr(a),d&&d.attr(a)))},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===u?!h:a)?"show": +"hide";n(["group","dataLabelsGroup","markerGroup","tracker"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&n(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});n(c.linkedSeries,function(b){b.setVisible(a,!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();A(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===u?!this.selected:a;if(this.checkbox)this.checkbox.checked= +a;A(this,a?"select":"unselect")},drawTracker:J.drawTrackerGraph};r(eb.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b=o(b,!0),A(e,"addSeries",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?"xAxis":"yAxis",f=this.options;new ra(this,x(a,{index:this[e].length,isX:b}));f[e]=ka(f[e]||{});f[e].push(a);o(c,!0)&&this.redraw(d)},showLoading:function(a){var b=this.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv= +c=T(Ha,{className:"highcharts-loading"},r(d.style,{zIndex:10,display:Q}),this.container),this.loadingSpan=T("span",null,d.labelStyle,c);this.loadingSpan.innerHTML=a||b.lang.loading;if(!this.loadingShown)D(c,{opacity:0,display:"",left:this.plotLeft+"px",top:this.plotTop+"px",width:this.plotWidth+"px",height:this.plotHeight+"px"}),jb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&jb(b,{opacity:0},{duration:a.loading.hideDuration|| +100,complete:function(){D(b,{display:Q})}});this.loadingShown=!1}});r(Ka.prototype,{update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=o(b,!0);d.firePointEvent("update",{options:a},function(){d.applyOptions(a);if(S(a)){e.getAttribs();if(f)a&&a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||""]);if(a&&a.dataLabels&&d.dataLabel)d.dataLabel=d.dataLabel.destroy()}g=ta(d,h);e.updateParallelArrays(d,g);j.data[g]=d.options;e.isDirty=e.isDirtyData= +!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType==="point"&&i.legend.destroyItem(d);b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;Pa(b,f);a=o(a,!0);c.firePointEvent("remove",null,function(){g=ta(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.updateParallelArrays(c,"splice",g,1);c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&f.redraw()})}});r(O.prototype,{addPoint:function(a,b,c,d){var e=this.options, +f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xAxis&&this.xAxis.names,k=g&&g.shift||0,l=e.data,m,p=this.xData;Pa(d,i);c&&n([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=k+1});if(h)h.isArea=!0;b=o(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=p.length;if(this.requireSorting&&gg;)h--;this.updateParallelArrays(d,"splice",h);this.updateParallelArrays(d,h);if(j)j[g]=d.name;l.splice(h,0,a);m&&(this.data.splice(h,0,null), +this.processData());e.legendType==="point"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),this.updateParallelArrays(d,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=o(a,!0);if(!c.isRemoving)c.isRemoving=!0,A(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=!1},update:function(a,b){var c=this.chart,d=this.type,e=L[d].prototype, +f,a=x(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=u);r(this,L[a.type||d].prototype);this.init(c,a);o(b,!0)&&c.redraw(!1)}});r(ra.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=x(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.userMin=this.userMax=u;this.init(c,r(a,{events:u}));c.isDirtyBox=!0;o(b,!0)&&c.redraw()},remove:function(a){var b= +this.chart,c=this.coll;n(this.series,function(a){a.remove(!1)});fa(b.axes,this);fa(b[c],this);b.options[c].splice(this.options.index,1);n(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;o(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});var aa=ga(O);L.line=aa;Y.area=x(W,{threshold:0});var Ta=ga(O,{type:"area",getSegments:function(){var a=[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey], +g={},h,i,j=this.points,k=this.options.connectNulls,l,m,p;if(this.options.stacking&&!this.cropped){for(m=0;m=0;d--)g=o(a[d].yBottom,f),da&&i>e?(i=t(a,e),k=2*e-i):ig&&k>e?(k=t(g,e),i=2*e-k):kf?b-f:e-(d.translate(a.y,0,1,0, +1)<=e?f:0)));a.barX=n;a.pointWidth=g;b=M(n)<0.5;s=w(n+s)+j;n=w(n)+j;s-=n;u=M(r)<0.5;c=w(r+c)+k;r=w(r)+k;c-=r;b&&(n+=1,s-=1);u&&(r-=1,c+=1);a.shapeType="rect";a.shapeArgs={x:n,y:r,width:s,height:c}})},getSymbol:ma,drawLegendSymbol:R.drawRectangle,drawGraph:ma,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=b.options.animationLimit||250,f;n(a.points,function(g){var h=g.plotY,i=g.graphic;if(h!==u&&!isNaN(h)&&g.y!==null)f=g.shapeArgs,i?(Ya(i),i[b.pointCount{series.name}
',pointFormat:"x: {point.x}
y: {point.y}
",followPointer:!0},stickyTracking:!1});aa=ga(O,{type:"scatter",sorted:!1, +requireSorting:!1,noSharedTooltip:!0,trackerGroups:["markerGroup"],takeOrdinalPosition:!1,drawTracker:J.drawTrackerPoint,drawGraph:function(){this.options.lineWidth&&O.prototype.drawGraph.call(this)},setTooltipPoints:ma});L.scatter=aa;Y.pie=x(W,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1, +shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});W={type:"pie",isCartesian:!1,pointClass:ga(Ka,{init:function(){Ka.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;r(a,{visible:a.visible!==!1,name:o(a.name,"Slice")});b=function(b){a.slice(b.type==="select")};F(a,"select",b);F(a,"unselect",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart,e;b.visible=b.options.visible=a=a===u?!b.visible:a;c.options.data[ta(b,c.data)]=b.options;e=a?"show":"hide";n(["graphic", +"dataLabel","connector","shadowGroup"],function(a){if(b[a])b[a][e]()});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;Pa(c,d.chart);o(b,!0);this.sliced=this.options.sliced=a=s(a)?a:!this.sliced;d.options.data[ta(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),requireSorting:!1,noSharedTooltip:!0, +trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},getColor:ma,animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)n(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b){O.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();o(b,!0)&&this.chart.redraw()}, +generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;O.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=Ba/180*(i-90),i=(this.endAngleRad=Ba/180*((c.endAngle||i+360)-90))-j,k=this.points,l=c.dataLabels.distance, +c=c.ignoreHiddenPoint,m,n=k.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=P.asin((b-a[1])/(a[2]/2+l));return a[0]+(c?-1:1)*U(h)*(a[2]/2+l)};for(m=0;m0.75*i&&(h-=2*Ba);o.slicedTranslation={translateX:w(U(h)*d),translateY:w($(h)*d)};f=U(h)*a[2]/2;g=$(h)*a[2]/2;o.tooltipPos=[a[0]+f*0.7,a[1]+g* +0.7];o.half=h<-Ba/2||h>Ba/2?1:0;o.angle=h;e=I(e,l/2);o.labelPos=[a[0]+f+U(h)*l,a[1]+g+$(h)*l,a[0]+f+U(h)*e,a[1]+g+$(h)*e,a[0]+f,a[1]+g,l<0?"center":o.half?"right":"left",h]}},setTooltipPoints:ma,drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);n(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g("shadow").add(a.shadowGroup);c=h.sliced?h.slicedTranslation: +{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(r(g,c)):h.graphic=d=b.arc(g).setRadialReference(a.center).attr(h.pointAttr[h.selected?"select":""]).attr({"stroke-linejoin":"round"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawTracker:J.drawTrackerPoint,drawLegendSymbol:R.drawRectangle,getCenter:xb.getCenter,getSymbol:ma};W=ga(O,W);L.pie=W;O.prototype.drawDataLabels= +function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,b=a.points,e,f,g,h;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),h=a.plotGroup("dataLabelsGroup","data-labels",a.visible?"visible":"hidden",d.zIndex||6),f=d,n(b,function(b){var j,k=b.dataLabel,l,m,n=b.connector,q=!0;e=b.options&&b.options.dataLabels;j=o(e&&e.enabled,f.enabled);if(k&&!j)b.dataLabel=k.destroy();else if(j){d=x(f,e);j=d.rotation;l=b.getLabelConfig();g=d.format?Ga(d.format,l):d.formatter.call(l,d); +d.style.color=o(d.color,d.style.color,a.color,"black");if(k)if(s(g))k.attr({text:g}),q=!1;else{if(b.dataLabel=k=k.destroy(),n)b.connector=n.destroy()}else if(s(g)){k={fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:j,padding:d.padding,zIndex:1};for(m in k)k[m]===u&&delete k[m];k=b.dataLabel=a.chart.renderer[j?"text":"label"](g,0,-999,null,null,null,d.useHTML).attr(k).css(r(d.style,c&&{cursor:c})).add(h).shadow(d.shadow)}k&&a.alignDataLabel(b,k, +d,null,q)}})};O.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=o(a.plotX,-999),i=o(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL||f.isInsidePlot(a.plotX,a.plotY,g)))d=r({x:g?f.plotWidth-i:h,y:w(g?f.plotHeight-h:i),width:0,height:0},d),r(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?"attr":"animate"](g)):(b.align(c,null,d),g=b.alignAttr,o(c.overflow,"justify")==="justify"?this.justifyDataLabel(b, +c,g,j,d,e):o(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};O.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h==="right"?b.align="left":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i==="bottom"?b.verticalAlign="top":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight- +j,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(L.pie)L.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=o(e.connectorPadding,10),g=o(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=o(e.softConnector,!0),l=e.distance,m=a.center,p=m[2]/2,q=m[1],s=l>0,r,u,v,x,y=[[],[]],z,A,E,K,B,D=[0,0,0,0],I=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){O.prototype.drawDataLabels.apply(a);n(b,function(a){a.dataLabel&&a.visible&&y[a.half].push(a)}); +for(K=0;!x&&b[K];)x=b[K]&&b[K].dataLabel&&(b[K].dataLabel.getBBox().height||21),K++;for(K=2;K--;){var b=[],J=[],F=y[K],G=F.length,C;a.sortByAngle(F,K-0.5);if(l>0){for(B=q-p-l;B<=q+p+l;B+=x)b.push(B);u=b.length;if(G>u){c=[].concat(F);c.sort(I);for(B=G;B--;)c[B].rank=B;for(B=G;B--;)F[B].rank>=u&&F.splice(B,1);G=F.length}for(B=0;B0){if(u=J.pop(),C=u.i,A=u.y,c>A&&b[C+1]!==null||ch-f&&(D[1]=t(w(z+u-h+f),D[1])),A-x/2<0?D[0]= +t(w(-A+x/2),D[0]):A+x/2>d&&(D[2]=t(w(A+x/2-d),D[2]))}}if(Aa(D)===0||this.verifyDataLabelOverflow(D))this.placeDataLabels(),s&&g&&n(this.points,function(b){i=b.connector;v=b.labelPos;if((r=b.dataLabel)&&r._pos)E=r._attr.visibility,z=r.connX,A=r.connY,j=k?["M",z+(v[6]==="left"?5:-5),A,"C",z,A,2*v[2]-v[4],2*v[3]-v[5],v[2],v[3],"L",v[4],v[5]]:["M",z+(v[6]==="left"?5:-5),A,"L",v[2],v[3],"L",v[4],v[5]],i?(i.animate({d:j}),i.attr("visibility",E)):b.connector=i=a.chart.renderer.path(j).attr({"stroke-width":g, +stroke:e.connectorColor||b.color||"#606060",visibility:E}).add(a.group);else if(i)b.connector=i.destroy()})}},L.pie.prototype.placeDataLabels=function(){n(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?"animate":"attr"](b),a.moved=!0):a&&a.attr({y:-999})})},L.pie.prototype.alignDataLabel=ma,L.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=t(b[2]-t(a[1],a[3]),c):(e=t(b[2]-a[1]-a[3], +c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=t(I(e,b[2]-t(a[0],a[2])),c):(e=t(I(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);eo(this.translatedThreshold,f.plotSizeY),j=o(c.inside,!!this.options.stacking);if(h&&(d=x(h), +g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=o(c.align,!g||j?"center":i?"right":"left");c.verticalAlign=o(c.verticalAlign,g||j?"middle":i?"top":"bottom");O.prototype.alignDataLabel.call(this,a,b,c,d,e)};r(Highcharts,{Axis:ra,Chart:eb,Color:ua,Point:Ka,Tick:Ra,Tooltip:sb,Renderer:Xa,Series:O,SVGElement:qa,SVGRenderer:va,arrayMin:Ma,arrayMax:Aa,charts:Ja,dateFormat:$a,format:Ga, +pathAnim:ub,getOptions:function(){return G},hasBidiBug:Nb,isTouchDevice:Ib,numberFormat:Ea,seriesTypes:L,setOptions:function(a){G=x(!0,G,a);Bb();return G},addEvent:F,removeEvent:X,createElement:T,discardElement:Oa,css:D,each:n,extend:r,map:Sa,merge:x,pick:o,splat:ka,extendClass:ga,pInt:z,wrap:Ua,svg:V,canvas:ba,vml:!V&&!ba,product:"Highcharts",version:"3.0.8"})})(); diff --git a/src/main/webapp/static/script/highcharts-more.js b/src/main/webapp/static/script/highcharts-more.js new file mode 100644 index 0000000..707d869 --- /dev/null +++ b/src/main/webapp/static/script/highcharts-more.js @@ -0,0 +1,51 @@ +/* + Highcharts JS v3.0.8 (2014-01-09) + + (c) 2009-2014 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(k,D){function J(a,b,c){this.init.call(this,a,b,c)}var N=k.arrayMin,O=k.arrayMax,t=k.each,z=k.extend,q=k.merge,P=k.map,r=k.pick,v=k.pInt,o=k.getOptions().plotOptions,h=k.seriesTypes,u=k.extendClass,K=k.splat,p=k.wrap,L=k.Axis,A=k.Tick,H=k.Point,Q=k.Pointer,R=k.TrackerMixin,S=k.CenteredSeriesMixin,x=k.Series,w=Math,E=w.round,B=w.floor,T=w.max,U=k.Color,s=function(){};z(J.prototype,{init:function(a,b,c){var d=this,e=d.defaultOptions;d.chart=b;if(b.angular)e.background={};d.options=a=q(e,a); +(a=a.background)&&t([].concat(K(a)).reverse(),function(a){var f=a.backgroundColor,a=q(d.defaultBackgroundOptions,a);if(f)a.backgroundColor=f;a.color=a.backgroundColor;c.options.plotBands.unshift(a)})},defaultOptions:{center:["50%","50%"],size:"85%",startAngle:0},defaultBackgroundOptions:{shape:"circle",borderWidth:1,borderColor:"silver",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#FFF"],[1,"#DDD"]]},from:Number.MIN_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}}); +var G=L.prototype,A=A.prototype,V={getOffset:s,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:s,setCategories:s,setTitle:s},M={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:"center",x:0,y:null},minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1,plotBands:[],tickLength:10,tickPosition:"inside",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,distance:15, +x:0,y:null},maxPadding:0,minPadding:0,plotBands:[],showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:"circle",labels:{align:"right",x:-3,y:-2},plotBands:[],showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){this.options=q(this.defaultOptions,this.defaultRadialOptions,a)},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0;this.center=this.pane.center=S.getCenter.call(this.pane)},getLinePath:function(a,b){var c=this.center, +b=r(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+c[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center&&(this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.isXAxis))this.minPixelPadding=this.transA*this.minPointOffset+(this.reversed?(this.endAngleRad-this.startAngleRad)/4:0)},beforeSetTickPositions:function(){this.autoConnect&& +(this.max+=this.categories&&1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial)this.center=this.pane.center=k.CenteredSeriesMixin.getCenter.call(this.pane),this.len=this.width=this.height=this.isCircular?this.center[2]*(this.endAngleRad-this.startAngleRad)/2:this.center[2]/2},getPosition:function(a,b){if(!this.isCircular)b=this.translate(a),a=this.min;return this.postTranslate(this.translate(a),r(b,this.center[2]/2)-this.offset)},postTranslate:function(a, +b){var c=this.chart,d=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,e=this.startAngleRad,g=d[2]/2,f=[r(c.outerRadius,"100%"),c.innerRadius,r(c.thickness,10)],j=/%$/,n,l=this.isCircular;this.options.gridLineInterpolation==="polygon"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(l||(f[0]=this.translate(a),f[1]=this.translate(b)),f=P(f,function(a){j.test(a)&&(a=v(a,10)*g/100); +return a}),c.shape==="circle"||!l?(a=-Math.PI/2,b=Math.PI*1.5,n=!0):(a=e+this.translate(a),b=e+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],f[0],f[0],{start:a,end:b,innerR:r(f[1],f[0]-f[2]),open:n}));return d},getPlotLinePath:function(a,b){var c=this.center,d=this.chart,e=this.getPosition(a),g,f,j;this.isCircular?j=["M",c[0]+d.plotLeft,c[1]+d.plotTop,"L",e.x,e.y]:this.options.gridLineInterpolation==="circle"?(a=this.translate(a))&&(j=this.getLinePath(0,a)):(g= +d.xAxis[0],j=[],a=this.translate(a),c=g.tickPositions,g.autoConnect&&(c=c.concat([c[0]])),b&&(c=[].concat(c).reverse()),t(c,function(c,b){f=g.getPosition(c,a);j.push(b?"L":"M",f.x,f.y)}));return j},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};p(G,"init",function(a,b,c){var i;var d=b.angular,e=b.polar,g=c.isX,f=d&&g,j,n;n=b.options;var l=c.pane||0;if(d){if(z(this, +f?V:M),j=!g)this.defaultRadialOptions=this.defaultRadialGaugeOptions}else if(e)z(this,M),this.defaultRadialOptions=(j=g)?this.defaultRadialXOptions:q(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!f&&(d||e)){a=this.options;if(!b.panes)b.panes=[];this.pane=(i=b.panes[l]=b.panes[l]||new J(K(n.pane)[l],b,this),l=i);l=l.options;b.inverted=!1;n.chart.zoomType=null;this.startAngleRad=b=(l.startAngle-90)*Math.PI/180;this.endAngleRad=n=(r(l.endAngle,l.startAngle+360)-90)*Math.PI/ +180;this.offset=a.offset||0;if((this.isCircular=j)&&c.max===D&&n-b===2*Math.PI)this.autoConnect=!0}});p(A,"getPosition",function(a,b,c,d,e){var g=this.axis;return g.getPosition?g.getPosition(c):a.call(this,b,c,d,e)});p(A,"getLabelPosition",function(a,b,c,d,e,g,f,j,n){var l=this.axis,i=g.y,m=g.align,y=(l.translate(this.pos)+l.startAngleRad+Math.PI/2)/Math.PI*180%360;l.isRadial?(a=l.getPosition(this.pos,l.center[2]/2+r(g.distance,-25)),g.rotation==="auto"?d.attr({rotation:y}):i===null&&(i=v(d.styles.lineHeight)* +0.9-d.getBBox().height/2),m===null&&(m=l.isCircular?y>20&&y<160?"left":y>200&&y<340?"right":"center":"center",d.attr({align:m})),a.x+=g.x,a.y+=i):a=a.call(this,b,c,d,e,g,f,j,n);return a});p(A,"getMarkPath",function(a,b,c,d,e,g,f){var j=this.axis;j.isRadial?(a=j.getPosition(this.pos,j.center[2]/2+d),b=["M",b,c,"L",a.x,a.y]):b=a.call(this,b,c,d,e,g,f);return b});o.arearange=q(o.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'{series.name}: {point.low} - {point.high}
'}, +trackByArea:!0,dataLabels:{verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}});h.arearange=u(h.area,{type:"arearange",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"low",getSegments:function(){var a=this;t(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});x.prototype.getSegments.call(this)},translate:function(){var a=this.yAxis;h.area.prototype.translate.apply(this);t(this.points, +function(b){var c=b.low,d=b.high,e=b.plotY;d===null&&c===null?b.y=null:c===null?(b.plotLow=b.plotY=null,b.plotHigh=a.translate(d,0,1,0,1)):d===null?(b.plotLow=e,b.plotHigh=null):(b.plotLow=e,b.plotHigh=a.translate(d,0,1,0,1))})},getSegmentPath:function(a){var b,c=[],d=a.length,e=x.prototype.getSegmentPath,g,f;f=this.options;var j=f.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)g=a[d],g.plotHigh!==null&&c.push({plotX:g.plotX,plotY:g.plotHigh});a=e.call(this,b);if(j)j=== +!0&&(j="left"),f.step={left:"right",center:"center",right:"left"}[j];c=e.call(this,c);f.step=j;f=[].concat(a,c);c[0]="L";this.areaPath=this.areaPath.concat(a,c);return f},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],e=x.prototype,g=this.options.dataLabels,f,j=this.chart.inverted;if(g.enabled||this._hasPointLabels){for(c=b;c--;)f=a[c],f.y=f.high,f.plotY=f.plotHigh,d[c]=f.dataLabel,f.dataLabel=f.dataLabelUpper,f.below=!1,j?(g.align="left",g.x=g.xHigh):g.y=g.yHigh;e.drawDataLabels&&e.drawDataLabels.apply(this, +arguments);for(c=b;c--;)f=a[c],f.dataLabelUpper=f.dataLabel,f.dataLabel=d[c],f.y=f.low,f.plotY=f.plotLow,f.below=!0,j?(g.align="right",g.x=g.xLow):g.y=g.yLow;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments)}},alignDataLabel:function(){h.column.prototype.alignDataLabel.apply(this,arguments)},getSymbol:h.column.prototype.getSymbol,drawPoints:s});o.areasplinerange=q(o.arearange);h.areasplinerange=u(h.arearange,{type:"areasplinerange",getPointSpline:h.spline.prototype.getPointSpline});(function(){var a= +h.column.prototype;o.columnrange=q(o.column,o.arearange,{lineWidth:1,pointRange:null});h.columnrange=u(h.arearange,{type:"columnrange",translate:function(){var b=this,c=b.yAxis,d;a.translate.apply(b);t(b.points,function(a){var g=a.shapeArgs,f=b.options.minPointLength,j;a.plotHigh=d=c.translate(a.high,0,1,0,1);a.plotLow=a.plotY;j=d;a=a.plotY-d;a{series.name}
Maximum: {point.high}
Upper quartile: {point.q3}
Median: {point.median}
Lower quartile: {point.q1}
Minimum: {point.low}
'}, +whiskerLength:"50%",whiskerWidth:2});h.boxplot=u(h.column,{type:"boxplot",pointArrayMap:["low","q1","median","q3","high"],toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth"},drawDataLabels:s,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);t(this.points,function(c){t(b,function(b){c[b]!==null&&(c[b+"Plot"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a= +this,b=a.points,c=a.options,d=a.chart.renderer,e,g,f,j,n,l,i,m,y,h,k,I,o,p,q,u,x,s,w,v,A,z,F=a.doQuartiles!==!1,C=parseInt(a.options.whiskerLength,10)/100;t(b,function(b){y=b.graphic;A=b.shapeArgs;k={};p={};u={};z=b.color||a.color;if(b.plotY!==D)if(e=b.pointAttr[b.selected?"selected":""],x=A.width,s=B(A.x),w=s+x,v=E(x/2),g=B(F?b.q1Plot:b.lowPlot),f=B(F?b.q3Plot:b.lowPlot),j=B(b.highPlot),n=B(b.lowPlot),k.stroke=b.stemColor||c.stemColor||z,k["stroke-width"]=r(b.stemWidth,c.stemWidth,c.lineWidth),k.dashstyle= +b.stemDashStyle||c.stemDashStyle,p.stroke=b.whiskerColor||c.whiskerColor||z,p["stroke-width"]=r(b.whiskerWidth,c.whiskerWidth,c.lineWidth),u.stroke=b.medianColor||c.medianColor||z,u["stroke-width"]=r(b.medianWidth,c.medianWidth,c.lineWidth),u["stroke-linecap"]="round",i=k["stroke-width"]%2/2,m=s+v+i,h=["M",m,f,"L",m,j,"M",m,g,"L",m,n,"z"],F&&(i=e["stroke-width"]%2/2,m=B(m)+i,g=B(g)+i,f=B(f)+i,s+=i,w+=i,I=["M",s,f,"L",s,g,"L",w,g,"L",w,f,"L",s,f,"z"]),C&&(i=p["stroke-width"]%2/2,j+=i,n+=i,o=["M",m- +v*C,j,"L",m+v*C,j,"M",m-v*C,n,"L",m+v*C,n]),i=u["stroke-width"]%2/2,l=E(b.medianPlot)+i,q=["M",s,l,"L",w,l,"z"],y)b.stem.animate({d:h}),C&&b.whiskers.animate({d:o}),F&&b.box.animate({d:I}),b.medianShape.animate({d:q});else{b.graphic=y=d.g().add(a.group);b.stem=d.path(h).attr(k).add(y);if(C)b.whiskers=d.path(o).attr(p).add(y);if(F)b.box=d.path(I).attr(e).add(y);b.medianShape=d.path(q).attr(u).add(y)}})}});o.errorbar=q(o.boxplot,{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:'{series.name}: {point.low} - {point.high}
'}, +whiskerWidth:null});h.errorbar=u(h.boxplot,{type:"errorbar",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"high",doQuartiles:!1,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});o.waterfall=q(o.column,{lineWidth:1,lineColor:"#333",dashStyle:"dot",borderColor:"#333"});h.waterfall=u(h.column,{type:"waterfall",upColorProp:"fill",pointArrayMap:["low","y"],pointValKey:"y",init:function(a, +b){b.stacking=!0;h.column.prototype.init.call(this,a,b)},translate:function(){var a=this.options,b=this.yAxis,c,d,e,g,f,j,n,l,i;c=a.threshold;a=a.borderWidth%2/2;h.column.prototype.translate.apply(this);l=c;e=this.points;for(d=0,c=e.length;d0&&!a.color)a.pointAttr=d,a.color=c})},getGraphPath:function(){var a=this.data,b=a.length,c=E(this.options.lineWidth+this.options.borderWidth)%2/2,d=[],e,g,f;for(f=1;f0?(j[g]-a)/(b-a):0.5,l&&f>=0&&(f=Math.sqrt(f)),n.push(w.ceil(c+f*(d-c))/2);this.radii=n},animate:function(a){var b=this.options.animation;if(!a)t(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr("r",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,e=this.radii;h.scatter.prototype.translate.call(this); +for(a=b.length;a--;)c=b[a],d=e?e[a]:0,c.negative=c.z<(this.options.zThreshold||0),d>=this.minPxSize/2?(c.shapeType="circle",c.shapeArgs={x:c.plotX,y:c.plotY,r:d},c.dlBox={x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=D},drawLegendSymbol:function(a,b){var c=v(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel}); +L.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,e=b,g=this.isXAxis,f=g?"xData":"yData",j=this.min,n={},l=w.min(c.plotWidth,c.plotHeight),i=Number.MAX_VALUE,m=-Number.MAX_VALUE,h=this.max-j,k=b/h,p=[];this.tickPositions&&(t(this.series,function(b){var f=b.options;if(b.bubblePadding&&b.visible&&(a.allowZoomOutside=!0,p.push(b),g))t(["minSize","maxSize"],function(a){var b=f[a],g=/%$/.test(b),b=v(b);n[a]=g?l*b/100:b}),b.minPxSize=n.minSize,b=b.zData,b.length&&(i=w.min(i,w.max(N(b), +f.displayNegative===!1?f.zThreshold:-Number.MAX_VALUE)),m=w.max(m,O(b)))}),t(p,function(a){var b=a[f],c=b.length,l;g&&a.getRadii(i,m,n.minSize,n.maxSize);if(h>0)for(;c--;)typeof b[c]==="number"&&(l=a.radii[c],d=Math.min((b[c]-j)*k-l,d),e=Math.max((b[c]-j)*k+l,e))}),p.length&&h>0&&r(this.options.min,this.userMin)===D&&r(this.options.max,this.userMax)===D&&(e-=b,k*=(b+d-e)/b,this.min+=d/k,this.max+=e/k))};(function(){function a(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var b= +this.xAxis.center;a.push("L",b[0],b[1])},this.closedStacks=!0}function b(a,b){var c=this.chart,d=this.options.animation,e=this.group,i=this.markerGroup,m=this.xAxis.center,h=c.plotLeft,k=c.plotTop;if(c.polar){if(c.renderer.isSVG)if(d===!0&&(d={}),b){if(c={translateX:m[0]+h,translateY:m[1]+k,scaleX:0.001,scaleY:0.001},e.attr(c),i)i.attrSetters=e.attrSetters,i.attr(c)}else c={translateX:h,translateY:k,scaleX:1,scaleY:1},e.animate(c,d),i&&i.animate(c,d),this.animate=null}else a.call(this,b)}var c=x.prototype, +d=Q.prototype,e;c.toXY=function(a){var b,c=this.chart;b=a.plotX;var d=a.plotY;a.rectPlotX=b;a.rectPlotY=d;a.clientX=(b/Math.PI*180+this.xAxis.pane.options.startAngle)%360;b=this.xAxis.postTranslate(a.plotX,this.yAxis.len-d);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop};c.orderTooltipPoints=function(a){if(this.chart.polar&&(a.sort(function(a,b){return a.clientX-b.clientX}),a[0]))a[0].wrappedClientX=a[0].clientX+360,a.push(a[0])};h.area&&p(h.area.prototype,"init",a);h.areaspline&& +p(h.areaspline.prototype,"init",a);h.spline&&p(h.spline.prototype,"getPointSpline",function(a,b,c,d){var e,i,m,h,k,p,o;if(this.chart.polar){e=c.plotX;i=c.plotY;a=b[d-1];m=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),m||(m=b[1]));if(a&&m)h=a.plotX,k=a.plotY,b=m.plotX,p=m.plotY,h=(1.5*e+h)/2.5,k=(1.5*i+k)/2.5,m=(1.5*e+b)/2.5,o=(1.5*i+p)/2.5,b=Math.sqrt(Math.pow(h-e,2)+Math.pow(k-i,2)),p=Math.sqrt(Math.pow(m-e,2)+Math.pow(o-i,2)),h=Math.atan2(k-i,h-e),k=Math.atan2(o-i,m-e),o=Math.PI/2+(h+k)/2,Math.abs(h- +o)>Math.PI/2&&(o-=Math.PI),h=e+Math.cos(o)*b,k=i+Math.sin(o)*b,m=e+Math.cos(Math.PI+o)*p,o=i+Math.sin(Math.PI+o)*p,c.rightContX=m,c.rightContY=o;d?(c=["C",a.rightContX||a.plotX,a.rightContY||a.plotY,h||e,k||i,e,i],a.rightContX=a.rightContY=null):c=["M",e,i]}else c=a.call(this,b,c,d);return c});p(c,"translate",function(a){a.call(this);if(this.chart.polar&&!this.preventPostTranslate)for(var a=this.points,b=a.length;b--;)this.toXY(a[b])});p(c,"getSegmentPath",function(a,b){var c=this.points;if(this.chart.polar&& +this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});p(c,"animate",b);p(c,"setTooltipPoints",function(a,b){this.chart.polar&&z(this.xAxis,{tooltipLen:360});return a.call(this,b)});if(h.column)e=h.column.prototype,p(e,"animate",b),p(e,"translate",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,e=b.startAngleRad,i=this.chart.renderer,h,k;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points; +for(k=b.length;k--;)h=b[k],a=h.barX+e,h.shapeType="path",h.shapeArgs={d:i.symbols.arc(d[0],d[1],c-h.plotY,null,{start:a,end:a+h.pointWidth,innerR:c-r(h.yBottom,c)})},this.toXY(h)}}),p(e,"alignDataLabel",function(a,b,d,e,h,i){if(this.chart.polar){a=b.rectPlotX/Math.PI*180;if(e.align===null)e.align=a>20&&a<160?"left":a>200&&a<340?"right":"center";if(e.verticalAlign===null)e.verticalAlign=a<45||a>315?"bottom":a>135&&a<225?"top":"middle";c.alignDataLabel.call(this,b,d,e,h,i)}else a.call(this,b,d,e,h, +i)});p(d,"getIndex",function(a,b){var c,d=this.chart,e;d.polar?(e=d.xAxis[0].center,c=b.chartX-e[0]-d.plotLeft,d=b.chartY-e[1]-d.plotTop,c=180-Math.round(Math.atan2(c,d)/Math.PI*180)):c=a.call(this,b);return c});p(d,"getCoordinates",function(a,b){var c=this.chart,d={xAxis:[],yAxis:[]};c.polar?t(c.axes,function(a){var e=a.isXAxis,g=a.center,h=b.chartX-g[0]-c.plotLeft,g=b.chartY-g[1]-c.plotTop;d[e?"xAxis":"yAxis"].push({axis:a,value:a.translate(e?Math.PI-Math.atan2(h,g):Math.sqrt(Math.pow(h,2)+Math.pow(g, +2)),!0)})}):d=a.call(this,b);return d})})()})(Highcharts); diff --git a/src/main/webapp/static/script/highcharts.js b/src/main/webapp/static/script/highcharts.js new file mode 100644 index 0000000..06e4640 --- /dev/null +++ b/src/main/webapp/static/script/highcharts.js @@ -0,0 +1,305 @@ +/* + Highcharts JS v4.0.1 (2014-04-24) + + (c) 2009-2014 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(){function q(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function w(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!=="object"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c==="object"&&Object.prototype.toString.call(c)!=="[object Array]"&&d!=="renderTo"&&typeof c.nodeType!=="number"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+M(a-c).toFixed(f).slice(2):"")}function Ha(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Ma(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments); +a.unshift(d);return c.apply(this,a)}}function Ia(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h-1?h.thousandsSep:""))):e=cb(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function mb(a){return U.pow(10,T(U.log(a)/ +U.LN10))}function nb(a,b,c,d){var e,c=m(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;dc&&(c=a[b]);return c}function Oa(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Pa(a){db||(db=Y(Ja));a&&db.appendChild(a);db.innerHTML=""}function ra(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else I.console&&console.log(c)}function da(a){return parseFloat(a.toPrecision(14))}function Qa(a,b){va=m(a,b.animation)}function Cb(){var a=E.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";Ra=(a&&E.global.timezoneOffset|| +0)*6E4;eb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,m(c,1),m(g,0),m(h,0),m(i,0))).getTime()};pb=b+"Minutes";qb=b+"Hours";rb=b+"Day";Xa=b+"Date";fb=b+"Month";gb=b+"FullYear";Db=c+"Minutes";Eb=c+"Hours";sb=c+"Date";Fb=c+"Month";Gb=c+"FullYear"}function P(){}function Sa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function la(){this.init.apply(this,arguments)}function Ya(){this.init.apply(this,arguments)}function Hb(a,b,c,d,e){var f=a.chart.inverted; +this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.alignOptions={align:b.align||(f?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(f?"middle":c?"bottom":"top"),y:m(b.y,f?4:c?14:-6),x:m(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?"right":"left":"center")}var t,y=document,I=window,U=Math,u=U.round,T=U.floor,Ka=U.ceil,v=U.max,C=U.min,M=U.abs,Z=U.cos,ea=U.sin,ma=U.PI,Ca=ma*2/360,wa=navigator.userAgent,Ib=I.opera,Aa=/msie/i.test(wa)&& +!Ib,hb=y.documentMode===8,ib=/AppleWebKit/.test(wa),Ta=/Firefox/.test(wa),Jb=/(Mobile|Android|Windows Phone)/.test(wa),xa="http://www.w3.org/2000/svg",aa=!!y.createElementNS&&!!y.createElementNS(xa,"svg").createSVGRect,Nb=Ta&&parseInt(wa.split("Firefox/")[1],10)<4,fa=!aa&&!Aa&&!!y.createElement("canvas").getContext,Za,$a,Kb={},tb=0,db,E,cb,va,ub,A,sa=function(){},V=[],ab=0,Ja="div",Q="none",Ob=/^[0-9]+$/,Pb="stroke-width",eb,Ra,pb,qb,rb,Xa,fb,gb,Db,Eb,sb,Fb,Gb,F={},R=I.Highcharts=I.Highcharts?ra(16, +!0):{};cb=function(a,b,c){if(!r(b)||isNaN(b))return"Invalid date";var a=m(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b-Ra),e,f=d[qb](),g=d[rb](),h=d[Xa](),i=d[fb](),j=d[gb](),k=E.lang,l=k.weekdays,d=q({a:l[g].substr(0,3),A:l[g],d:Ha(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ha(i+1),y:j.toString().substr(2,2),Y:j,H:Ha(f),I:Ha(f%12||12),l:f%12||12,M:Ha(d[pb]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:Ha(d.getSeconds()),L:Ha(u(b%1E3),3)},R.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]=== +"function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Bb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};A=function(){for(var a=0,b=arguments,c=b.length,d={};a-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c), +h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length{point.key}
',pointFormat:' {series.name}: {point.y}
',shadow:!0,snap:Jb?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px", +whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var ba=E.plotOptions,S=ba.line;Cb();var Tb=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,Ub=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Vb=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,ya=function(a){var b=[],c, +d;(function(a){a&&a.stops?d=Ua(a.stops,function(a){return ya(a[1])}):(c=Tb.exec(a))?b=[z(c[1]),z(c[2]),z(c[3]),parseFloat(c[4],10)]:(c=Ub.exec(a))?b=[z(c[1],16),z(c[2],16),z(c[3],16),1]:(c=Vb.exec(a))&&(b=[z(c[1]),z(c[2]),z(c[3]),1])})(a);return{get:function(c){var f;d?(f=w(a),f.stops=[].concat(f.stops),p(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)p(d, +function(b){b.brighten(a)});else if(ha(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=z(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};P.prototype={init:function(a,b){this.element=b==="span"?Y(b):y.createElementNS(xa,b);this.renderer=a},opacity:1,animate:function(a,b,c){b=m(b,va,!0);bb(this);if(b){b=w(b,{});if(c)b.complete=c;kb(this,a,b)}else this.attr(a),c&&c()},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,j,k,l,o,n,s=[];a.linearGradient? +f="linearGradient":a.radialGradient&&(f="radialGradient");if(f){g=a[f];h=d.gradients;j=a.stops;o=c.radialReference;La(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:"userSpaceOnUse"});f==="radialGradient"&&o&&!r(g.gradientUnits)&&(g=w(g,{cx:o[0]-o[2]/2+g.cx*o[2],cy:o[1]-o[2]/2+g.cy*o[2],r:g.r*o[2],gradientUnits:"userSpaceOnUse"}));for(n in g)n!=="id"&&s.push(n,g[n]);for(n in j)s.push(j[n]);s=s.join(",");h[s]?a=h[s].attr("id"):(g.id=a="highcharts-"+tb++,h[s]=i=d.createElement(f).attr(g).add(d.defs), +i.stops=[],p(j,function(a){a[1].indexOf("rgba")===0?(e=ya(a[1]),k=e.get("rgb"),l=e.get("a")):(k=a[1],l=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":k,"stop-opacity":l}).add(i);i.stops.push(a)}));c.setAttribute(b,"url("+d.url+"#"+a+")")}},attr:function(a,b){var c,d,e=this.element,f,g=this,h;typeof a==="string"&&b!==t&&(c=a,a={},a[c]=b);if(typeof a==="string")g=(this[a+"Getter"]||this._defaultGetter).call(this,a,e);else{for(c in a){d=a[c];h=!1;this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&& +(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(c==="x"||c==="y"))this.doTransform=!0;h||(this[c+"Setter"]||this._defaultSetter).call(this,d,c,e);this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c)&&this.updateShadows(c,d)}if(this.doTransform)this.updateTransform(),this.doTransform=!1}return g},updateShadows:function(a,b){for(var c=this.shadows,d=c.length;d--;)c[d].setAttribute(a,a==="height"?v(b-(c[d].cutHeight||0),0):a==="d"?this.d:b)},addClass:function(a){var b=this.element, +c=H(b,"class")||"";c.indexOf(a)===-1&&H(b,"class",c+" "+a);return this},symbolAttr:function(a){var b=this;p("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=m(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":Q)},crisp:function(a){var b,c={},d,e=a.strokeWidth||this.strokeWidth||this.attr&&this.attr("stroke-width")||0;d=u(e)%2/2;a.x=T(a.x||this.x|| +0)+d;a.y=T(a.y||this.y||0)+d;a.width=T((a.width||this.width||0)-2*d);a.height=T((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&&(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g="";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()==="text"&&z(a.width);b&&(a=q(b,c));this.styles=a;e&&(fa||!aa&&this.renderer.forExport)&&delete a.width;if(Aa&&!aa)G(this.element, +a);else{b=function(a,b){return"-"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+":"+a[f]+";";H(d,"style",g)}e&&this.added&&this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;$a&&a==="click"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(wa.indexOf("Android")===-1||Date.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){this.element.radialReference= +a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation,g=this.element;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(g.getAttribute("x")||0)+" "+(g.getAttribute("y")||0)+")"); +(r(c)||r(d))&&a.push("scale("+m(c,1)+" "+m(d,1)+")");a.length&&g.setAttribute("transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||Fa(c))this.alignTo=d=c||"renderer",ja(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=m(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x|| +0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=u(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=u(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ca;d=this.textStr;var h;if(d===""||Ob.test(d))h="num."+d.toString().length+ +(f?"|"+f.fontSize+"|"+f.fontFamily:"");h&&(a=b.cache[h]);if(!a){if(c.namespaceURI===xa||b.forExport){try{a=c.getBBox?q({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){c=a.width;d=a.height;if(Aa&&f&&f.fontSize==="11px"&&d.toPrecision(3)==="16.9")a.height=d=14;if(e)a.width=M(d*ea(g))+M(c*Z(g)),a.height=M(d*Z(g))+M(c*ea(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(a){return a&&this.element.namespaceURI=== +xa?(this.element.removeAttribute("visibility"),this):this.attr({visibility:a?"inherit":"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=this.element,f=this.zIndex,g,h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(f)c.handleZ=!0,f=z(f);if(c.handleZ){a=d.childNodes; +for(g=0;gf||!r(f)&&r(c))){d.insertBefore(e,b);h=!0;break}}h||d.appendChild(e);this.added=!0;if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;bb(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f= +0;f/,i=/<.*href="(http[^"]+)".*>/,l&&!a.added&&this.box.appendChild(b), +e=f?e.replace(/<(b|strong)>/g,'').replace(/<(i|em)>/g,'').replace(/
/g,"").split(//g):[e],e[e.length-1]===""&&e.pop(),p(e,function(e,f){var g,n=0,e=e.replace(//g,"|||");g=e.split("|||");p(g,function(e){if(e!==""||g.length===1){var o={},m=y.createElementNS(xa,"tspan"),p;h.test(e)&&(p=e.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"), +H(m,"style",p));i.test(e)&&!d&&(H(m,"onclick",'location.href="'+e.match(i)[1]+'"'),G(m,{cursor:"pointer"}));e=(e.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");if(e!==" "){m.appendChild(y.createTextNode(e));if(n)o.dx=0;else if(f&&j!==null)o.x=j;H(m,o);!n&&f&&(!aa&&d&&G(m,{display:"block"}),H(m,"dy",s(m),ib&&m.offsetHeight));b.appendChild(m);n++;if(l)for(var e=e.replace(/([^\^])-/g,"$1- ").split(" "),o=e.length>1&&k.whiteSpace!=="nowrap",$,r,B=a._clipHeight,q=[],v=s(),t= +1;o&&(e.length||q.length);)delete a.bBox,$=a.getBBox(),r=$.width,!aa&&c.forExport&&(r=c.measureSpanWidth(m.firstChild.data,a.styles)),$=r>l,!$||e.length===1?(e=q,q=[],e.length&&(t++,B&&t*v>B?(e=["..."],a.attr("title",a.textStr)):(m=y.createElementNS(xa,"tspan"),H(m,{dy:v,x:j}),p&&H(m,"style",p),b.appendChild(m),r>l&&(l=r)))):(m.removeChild(m.firstChild),q.unshift(e.pop())),e.length&&m.appendChild(y.createTextNode(e.join(" ").replace(/- /g,"-")))}}})}))},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a, +b,c,i,null,null,null,null,"button"),k=0,l,o,n,s,m,p,a={x1:0,y1:0,x2:0,y2:1},e=w({"stroke-width":1,stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);n=e.style;delete e.style;f=w(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);s=f.style;delete f.style;g=w(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);m=g.style;delete g.style;h=w(e,{style:{color:"#CCC"}},h);p=h.style;delete h.style; +K(j.element,Aa?"mouseover":"mouseenter",function(){k!==3&&j.attr(f).css(s)});K(j.element,Aa?"mouseout":"mouseleave",function(){k!==3&&(l=[e,f,g][k],o=[n,s,m][k],j.attr(l).css(o))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(m):a===3&&j.attr(h).css(p):j.attr(e).css(n)};return j.on("click",function(){k!==3&&d.call(j)}).attr(e).css(q({cursor:"default"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=u(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=u(a[2])+b%2/2);return a},path:function(a){var b= +{fill:Q};La(a)?b.d=a:ca(a)&&q(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=ca(a)?a:{x:a,y:b,r:c};b=this.createElement("circle");b.xSetter=function(a){this.element.setAttribute("cx",a)};b.ySetter=function(a){this.element.setAttribute("cy",a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(ca(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){var e=ca(a)?a.r: +e,g=this.createElement("rect"),a=ca(a)?a:a===t?{}:{x:a,y:b,width:v(c,0),height:v(d,0)};if(f!==t)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a){H(this.element,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[m(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return r(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f= +{preserveAspectRatio:Q};arguments.length>1&&q(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(u(b),u(c),d,e,f),i=/^url\((.*?)\)$/,j,k;if(h)g=this.path(h),q(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&q(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}), +a.alignByTranslate||a.translate(u((d-b[0])/2),u((e-b[1])/2)))},j=a.match(i)[1],a=Kb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),Y("img",{onload:function(){k(g,Kb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L", +a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=Z(f),j=ea(f),k=Z(g),g=ea(g),e=e.end-fc&&i>b+g&&ib+g&&id&&h>a+g&&ha+g&&hl&&/[ \-]/.test(b.textContent||b.innerText))G(b,{width:l+"px",display:"block",whiteSpace:"normal"}),i=l;this.getSpanCorrection(i,k,h,j,g)}G(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(ib)k=b.offsetHeight; +this.cTT=o}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=Aa?"-ms-transform":ib?"-webkit-transform":Ta?"MozTransform":Ib?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Ta?"Origin":"-origin")]=d.transformOrigin=b*100+"% "+c+"px";G(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});q(ta.prototype,{html:function(a,b,c){var d=this.createElement("span"),e=d.element,f=d.renderer;d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox; +e.innerHTML=this.textStr=a};d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b==="align"&&(b="textAlign");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:u(b),y:u(c)}).css({position:"absolute",whiteSpace:"nowrap",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});d.css=d.htmlCss;if(f.isSVG)d.add=function(a){var b,c=f.box.parentNode,j=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)j.push(a),a=a.parentGroup;p(j.reverse(),function(a){var d;b=a.div=a.div||Y(Ja,{className:H(a.element, +"class")},{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;q(a,{translateXSetter:function(b,c){d.left=b+"px";a[c]=b;a.doTransform=!0},translateYSetter:function(b,c){d.top=b+"px";a[c]=b;a.doTransform=!0},visibilitySetter:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});var X;if(!aa&&!fa){R.VMLElement=X={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute", +";"],e=b===Ja;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=Y(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:P.prototype.htmlUpdateTransform, +setSpanRotation:function(){var a=this.rotation,b=Z(a*Ca),c=ea(a*Ca);G(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):Q})},getSpanCorrection:function(a,b,c,d,e){var f=d?Z(d*Ca):1,g=d?ea(d*Ca):0,h=m(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-= +h*c*(g<0?-1:1)),G(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ha(a[b]))c[b]=u(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},clip:function(a){var b=this,c;a?(c=a.members,ja(c,b),c.push(b),b.destroyClip=function(){ja(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:hb?"inherit":"rect(auto)"}); +return b.css(a)},css:P.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Pa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return P.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=I.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=z(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path, +l,o,n,s;k&&typeof k.value!=="string"&&(k="x");o=k;if(a){n=m(a.width,3);s=(a.opacity||0.15)/n;for(e=1;e<=3;e++){l=n*2+1-2*e;c&&(o=this.cutOffPath(k.value,l+0.5));j=[''];h=Y(g.prepVML(j),null,{left:z(i.left)+m(a.offsetX,1),top:z(i.top)+m(a.offsetY,1)});if(c)h.cutOff=l+1;j=[''];Y(g.prepVML(j),null,null,h);b?b.element.appendChild(h): +f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:sa,setAttr:function(a,b){hb?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName("stroke")[0]||Y(this.renderer.prepVML([""]),null,null,c))[b]=a||"solid";this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join(" ");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff? +this.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d==="SPAN")c.style.color=a;else if(d!=="IMG")c.filled=a!==Q,this.setAttr("fillcolor",this.renderer.color(a,c,b,this))},opacitySetter:sa,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-u(ea(a*Ca)+1)+"px";c.top=u(Z(a*Ca))+"px"},strokeSetter:function(a,b,c){this.setAttr("strokecolor",this.renderer.color(a,c,b))},"stroke-widthSetter":function(a,b,c){c.stroked=!!a;this[b]=a;ha(a)&&(a+="px"); +this.setAttr("strokeweight",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a==="inherit"&&(a="visible");this.shadows&&p(this.shadows,function(c){c.style[b]=a});c.nodeName==="DIV"&&(a=a==="hidden"?"-999em":0,hb||(c.style[b]=a?"visible":"hidden"),b="top");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b==="x"?b="left":b==="y"&&(b="top");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};X=ka(P,X);X.prototype.ySetter= +X.prototype.widthSetter=X.prototype.heightSetter=X.prototype.xSetter;var ga={Element:X,isIE8:wa.indexOf("MSIE 8.0")>-1,init:function(a,b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ja).css(q(this.getStyle(d),{position:"relative"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!y.namespaces.hcv){y.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{y.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){y.styleSheets[0].cssText+= +"hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=ca(a);return q(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+u(a?e:d)+"px,"+u(a? +f:b)+"px,"+u(a?b:f)+"px,"+u(a?d:e)+"px)"};!a&&hb&&c==="DIV"&&q(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){p(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=Q;a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var k,l,o=a.linearGradient||a.radialGradient,n,s,m,J,L,x="",a=a.stops,r,v=[],q=function(){h=['']; +Y(e.prepVML(h),null,null,b)};n=a[0];r=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);r[0]<1&&a.push([1,r[1]]);p(a,function(a,b){g.test(a[1])?(f=ya(a[1]),k=f.get("rgb"),l=f.get("a")):(k=a[1],l=1);v.push(a[0]*100+"% "+k);b?(m=l,J=k):(s=l,L=k)});if(c==="fill")if(i==="gradient")c=o.x1||o[0]||0,a=o.y1||o[1]||0,n=o.x2||o[2]||0,o=o.y2||o[3]||0,x='angle="'+(90-U.atan((o-a)/(n-c))*180/ma)+'"',q();else{var j=o.r,t=j*2,u=j*2,y=o.cx,B=o.cy,na=b.radialReference,w,j=function(){na&&(w=d.getBBox(),y+=(na[0]-w.x)/w.width- +0.5,B+=(na[1]-w.y)/w.height-0.5,t*=na[2]/w.width,u*=na[2]/w.height);x='src="'+E.global.VMLRadialGradientURL+'" size="'+t+","+u+'" origin="0.5,0.5" position="'+y+","+B+'" color2="'+L+'" ';q()};d.added?j():d.onAdd=j;j=J}else j=k}else if(g.test(a)&&b.tagName!=="IMG")f=ya(a),h=["<",c,' opacity="',f.get("a"),'"/>'],Y(this.prepVML(h),null,null,b),j=f.get("rgb");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type="solid";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join("");b? +(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a==="rect"?this.symbol(a):ta.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName==="IMG"&&a.style;G(a,{flip:"x",left:z(d.width)-(e?z(e.top): +1),top:z(d.height)-(e?z(e.left):1),rotation:-90});p(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=Z(f),i=ea(f),j=Z(g),k=ea(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+ +c,b+d/2,"e"]},rect:function(a,b,c,d,e){return ta.prototype.symbols[!r(e)||!e.r?"square":"callout"].call(0,a,b,c,d,e)}}};R.VMLRenderer=X=function(){this.init.apply(this,arguments)};X.prototype=w(ta.prototype,ga);Za=X}ta.prototype.measureSpanWidth=function(a,b){var c=y.createElement("span"),d;d=y.createTextNode(a);c.appendChild(d);G(c,b);this.box.appendChild(c);d=c.offsetWidth;Pa(c);return d};var Lb;if(fa)R.CanVGRenderer=X=function(){xa="http://www.w3.org/1999/xhtml"},X.prototype.symbols={},Lb=function(){function a(){var a= +b.length,d;for(d=0;dl[s]?l[s]= +g+j:o||(c=!1);if(o){l=(o=d.justifyToPlot)?d.pos:0;o=o?l+d.len:d.chart.chartWidth;do a+=e?1:-1,n=d.ticks[i[a]];while(i[a]&&(!n||n.label.line!==s));d=n&&n.label.xy&&n.label.xy.x+n.getLabelSides()[e?0:1];e&&!h||f&&h?g+kd&&(c=!1)):g+j>o&&(g=o-j,n&&g+k0&&b.height>0){f=w({align:c&&k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g){q={align:f.textAlign||f.align,rotation:f.rotation};if(r(L))q.zIndex=L;a.label=g=t.text(f.text,0,0,f.useHTML).attr(q).css(f.style).add()}b=[s[1], +s[4],m(s[6],s[1])];s=[s[2],s[5],m(s[7],s[2])];c=Na(b);k=Na(s);g.align(f,!1,{x:c,y:k,width:Ba(b)-c,height:Ba(s)-k});g.show()}else g&&g.hide();return a},destroy:function(){ja(this.axis.plotLinesAndBands,this);delete this.axis;Oa(this)}};la.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:N,lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01, +maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#707070"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0, +tickWidth:0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return Ga(this.total,-1)},style:N.style}},defaultLeftAxisOptions:{labels:{x:-15,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:20},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-15},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?"xAxis":"yAxis";this.opposite= +b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=r(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement=== +"between"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.min=this.max=null;this.crosshair=m(d.crosshair,qa(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;Da(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this)); +this.series=this.series||[];if(a.inverted&&c&&this.reversed===t)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)K(this,f,d[f]);if(this.isLog)this.val2lin=za,this.lin2val=ia},setOptions:function(a){this.options=w(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],w(E[this.coll],a))},defaultLabelFormatter:function(){var a= +this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=E.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ia(h,this);else if(c)g=b;else if(d)g=cb(d,b);else if(f&&a>=1E3)for(;f--&&g===t;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Ga(b/c,-1)+e[f]);g===t&&(g=M(b)>=1E4?Ga(b,0):Ga(b,-1,t,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.buildStacks&&a.buildStacks();p(a.series,function(c){if(c.visible|| +!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=C(m(a.dataMin,d[0]),Na(d)),a.dataMax=v(m(a.dataMax,d[0]),Ba(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(r(c)&&r(e))a.dataMin=C(m(a.dataMin,c),c),a.dataMax=v(m(a.dataMax,e),e);if(r(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMaxg+this.width)o=!0}else if(a=g,c=l-this.right,ih+this.height)o=!0;return o&&!d?null:f.renderer.crispLine(["M",a,i,"L",c,j],b||1)},getLinearTickPositions:function(a, +b,c){var d,e=da(T(b/a)*a),f=da(Ka(c/a)*a),g=[];if(b===c&&ha(b))return[b];for(b=e;b<=f;){g.push(b);b=da(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===t&&!this.isLog)r(a.min)||r(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===t||hc&&(h=0);d=v(d,h);f=v(f,Fa(j)?0:h/2);g=v(g,j==="on"?0:h);!a.noSharedTooltip&&r(n)&&(e=r(e)?C(e,n):n)}),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=C(d,c),b.closestPointRange=e;if(a)b.oldTransA=j;b.translationSlope=b.transA=j=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=j*f},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding, +k=d.minPadding,l=d.tickInterval,o=d.minTickInterval,n=d.tickPixelInterval,s,$=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=m(c.min,c.dataMin),b.max=m(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ra(11,1)):(b.min=m(b.userMin,d.min,b.dataMin),b.max=m(b.userMax,d.max,b.dataMax));if(e)!a&&C(b.min,m(b.dataMin,b.min))<=0&&ra(10,1),b.min=da(za(b.min)),b.max=da(za(b.max));if(b.range&&r(b.max))b.userMin=b.min=v(b.min,b.max-b.range),b.userMax=b.max,b.range= +null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!$&&!b.axisPointRange&&!b.usePercentage&&!h&&r(b.min)&&r(b.max)&&(c=b.max-b.min)){if(!r(d.min)&&!r(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!r(d.max)&&!r(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}if(ha(d.floor))b.min=v(b.min,d.floor);if(ha(d.ceiling))b.max=C(b.max,d.ceiling);b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&n===b.linkedParent.options.tickPixelInterval?b.tickInterval= +b.linkedParent.tickInterval:(b.tickInterval=m(l,$?1:(b.max-b.min)*n/v(b.len,n)),!r(l)&&b.lenv(2*b.len,200)&&ra(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange, +!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),s&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h1E13?1:0.001,b.min-=d,b.max+=d)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.coll,this.pos,this.len].join("-");if(!this.isLinked&& +!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==t){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e=v(d,m(e.max,d))&&(b=t));this.displayBtn=a!==t||b!==t;this.setExtremes(a,b,!1,t,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=m(b.width,a.plotWidth-c+(b.offsetRight||0)),f=m(b.height,a.plotHeight),g=m(b.top,a.plotTop),b=m(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=parseInt(f,10)/100*a.plotHeight);c.test(g)&&(g=parseInt(g,10)/100*a.plotHeight+a.plotTop); +this.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight-f-g;this.right=a.chartWidth-e-b;this.len=v(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=this.isLog;return{min:a?da(ia(this.min)):this.min,max:a?da(ia(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ia(this.min):this.min,b=b?ia(this.max):this.max;c>a||a===null?a=c:b15&&a<165?"right":a>195&&a<345?"left":"center"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,o=0,n=d.title,s=d.labels,$=0,J=b.axisOffset,L=b.clipOffset,x=[-1,1,1,-1][h],q,u=1,w=m(s.maxStaggerLines,5),y,z,A,B,na=h===2?c.fontMetrics(s.style.fontSize).b:0;a.hasData=j=a.hasVisibleSeries||r(a.min)&&r(a.max)&&!!e;a.showAxis=b=j||m(d.showEmpty,!0);a.staggerLines= +a.horiz&&s.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g("axis-labels").attr({zIndex:s.zIndex||7}).addClass("highcharts-"+a.coll.toLowerCase()+"-labels").add();if(j||a.isLinked){a.labelAlign=m(s.align||a.autoLabelAlign(s.rotation));p(e,function(b){f[b]?f[b].addLabel():f[b]=new Sa(a,b)});if(a.horiz&&!a.staggerLines&&w&&!s.rotation){for(q=a.reversed?[].concat(e).reverse():e;u1)a.staggerLines=u}p(e,function(b){if(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign)$=v(f[b].getLabelSize(),$)});if(a.staggerLines)$*=a.staggerLines,a.labelOffset=$}else for(q in f)f[q].destroy(),delete f[q];if(n&&n.text&&n.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(n.text,0,0,n.useHTML).attr({zIndex:7,rotation:n.rotation|| +0,align:n.textAlign||{low:"left",middle:"center",high:"right"}[n.align]}).addClass("highcharts-"+this.coll.toLowerCase()+"-title").css(n.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?"height":"width"],o=m(n.margin,g?5:10),l=n.offset;a.axisTitle[b?"show":"hide"]()}a.offset=x*m(d.offset,J[h]);a.axisTitleMargin=m(l,$+o+($&&x*d.labels[g?"y":"x"]-na));J[h]=v(J[h],a.axisTitleMargin+k+x*a.offset);L[i]=v(L[i],T(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite, +d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=z(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)* +this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked,i=a.tickPositions,j,k=a.axisTitle,l=a.ticks,o=a.minorTicks,n=a.alternateBands,s=f.stackLabels,m=f.alternateGridColor,J=a.tickmarkOffset,L=f.lineWidth,x=d.hasRendered&&r(a.oldMin)&&!isNaN(a.oldMin),q=a.hasData,v=a.showAxis,u,w=f.labels.overflow,y=a.justifyLabels=b&&w!== +!1,z;a.labelEdge.length=0;a.justifyToPlot=w==="justify";p([l,o,n],function(a){for(var b in a)a[b].isActive=!1});if(q||h)if(a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){o[b]||(o[b]=new Sa(a,b,"minor"));x&&o[b].isNew&&o[b].render(null,!0);o[b].render(null,!1,1)}),i.length&&(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),y&&(j=j.slice(1).concat([j[0]])),p(j,function(b,c){y&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<=a.max)l[b]||(l[b]=new Sa(a,b)),x&&l[b].isNew&&l[b].render(c, +!0,0.1),l[b].render(c,!1,1)}),J&&a.min===0&&(l[-1]||(l[-1]=new Sa(a,-1,null,!0)),l[-1].render(-1))),m&&p(i,function(b,c){if(c%2===0&&b=A.second&&(i.setMilliseconds(0),i.setSeconds(j>=A.minute?0:k*T(i.getSeconds()/k)));if(j>=A.minute)i[Db](j>=A.hour?0:k*T(i[pb]()/k));if(j>=A.hour)i[Eb](j>=A.day?0:k*T(i[qb]()/k));if(j>=A.day)i[sb](j>=A.month?1:k*T(i[Xa]()/k));j>=A.month&&(i[Fb](j>=A.year?0:k*T(i[fb]()/k)),h=i[gb]());j>=A.year&&(h-=h%k,i[Gb](h));if(j===A.week)i[sb](i[Xa]()-i[rb]()+m(d,1));b=1;Ra&&(i=new Date(i.getTime()+Ra));h=i[gb]();for(var d= +i.getTime(),l=i[fb](),o=i[Xa](),n=g?Ra:(864E5+i.getTimezoneOffset()*6E4)%864E5;d=0.5)a=u(a),g=this.getLinearTickPositions(a, +b,c);else if(a>=0.08)for(var f=T(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];fb&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ia(b),c=ia(c),a=e[d?"minorTickInterval":"tickInterval"],a=m(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=nb(a,null,mb(a)),g=Ua(this.getLinearTickPositions(a,b,c),za),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval= +a;return g};var Mb=R.Tooltip=function(){this.init.apply(this,arguments)};Mb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=z(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label("",0,0,b.shape||"callout",null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});fa||this.label.shadow(b.shadow);this.shared=b.shared}, +destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden,h=e.followPointer||e.len>1;q(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?t:g?(2*f.anchorX+c)/3:c,anchorY:h?t:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(M(a-f.x)>1||M(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a= +this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},m(this.options.hideDelay,500)),b&&p(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=qa(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===t&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow? +(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Ua(c,u)},getPosition:function(a,b,c){var d=this.chart,e=this.distance,f={},g,h=["y",d.chartHeight,b,c.plotY+d.plotTop],i=["x",d.chartWidth,a,c.plotX+d.plotLeft],j=c.ttBelow||d.inverted&&!c.negative||!d.inverted&&c.negative,k=function(a,b,c,d){var g=cb-e)return!1;else f[a]=db-c/2?b-c-2:d-c/2},o=function(a){var b=h;h=i;i=b;g=a},n=function(){k.apply(0,h)!==!1?l.apply(0,i)===!1&&!g&&(o(!0),n()):g?f.x=f.y=0:(o(!0),n())};(d.inverted||this.len>1)&&o();n();return f},defaultFormatter:function(a){var b=this.points||qa(this),c=b[0].series,d;d=[a.tooltipHeaderFormatter(b[0])];p(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))}); +d.push(a.options.footerFormat||"");return d.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=qa(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&p(h,function(a){a.setState()}),p(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),h={x:a[0].category, +y:a[0].y},h.points=j,this.len=j.length,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;this.distance=m(h.tooltipOptions.distance,16);i===!1?this.hide():(this.isHidden&&(bb(d),d.attr("opacity",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||"#606060",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow}),this.isHidden=!1);D(c,"tooltipRefresh",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart, +c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(u(c.x),u(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)},tooltipHeaderFormatter:function(a){var b=a.series,c=b.tooltipOptions,d=c.dateTimeLabelFormats,e=c.xDateFormat,f=b.xAxis,g=f&&f.options.type==="datetime"&&ha(a.key),c=c.headerFormat,f=f&&f.closestPointRange,h;if(g&&!e){if(f)for(h in A){if(A[h]>=f||A[h]<=A.day&&a.key%A[h]>0){e=d[h];break}}else e=d.day;e=e||d.year}g&&e&&(c=c.replace("{point.key}","{point.key:"+ +e+"}"));return Ia(c,{point:a,series:b})}};var oa;$a=y.documentElement.ontouchstart!==t;var Wa=R.Pointer=function(a,b){this.init(a,b)};Wa.prototype={init:function(a,b){var c=b.chart,d=c.events,e=fa?"":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(R.Tooltip&&b.tooltip.enabled)a.tooltip=new Mb(a,b.tooltip), +this.followTouchMove=b.tooltip.followTouchMove;this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||window.event,a=Sb(a);if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;if(!b)this.chartPosition=b=Rb(this.chart.container);d.pageX===t?(c=v(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return q(a,{chartX:u(c),chartY:u(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?"xAxis": +"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f,g=b.hoverPoint,h=b.hoverSeries,i,j,k=b.chartWidth,l=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!h||!h.noSharedTooltip)){f=[];i=c.length;for(j=0;jk&&f.splice(i,1);if(f.length&&f[0].clientX!==this.hoverX)d.refresh(f,a),this.hoverX=f[0].clientX}c=h&&h.tooltipOptions.followPointer;if(h&&h.tracker&&!c){if((e=h.tooltipPoints[l])&&e!==g)e.onMouseOver(a)}else d&&c&&!d.isHidden&&(h=d.getAnchor([{}],a),d.updatePosition({plotX:h[0],plotY:h[1]}));if(d&&!this._onDocumentMouseMove)this._onDocumentMouseMove= +function(a){if(V[oa])V[oa].pointer.onDocumentMouseMove(a)},K(y,"mousemove",this._onDocumentMouseMove);p(b.axes,function(b){b.drawCrosshair(a,m(e,g))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&qa(f)[0].plotX===t&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)W(y,"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove=null; +p(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;p(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY}, +drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,o=this.mouseDownX,n=this.mouseDownY;dh+j&&(d=h+j);ei+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(o-d,2)+Math.pow(n-e,2));if(this.hasDragged>10){l=b.isInsidePlot(o-h,n-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill|| +"rgba(69,114,167,0.25)",zIndex:7}).add();this.selectionMarker&&f&&(d-=o,this.selectionMarker.attr({width:M(d),x:(d>0?0:d)+o}));this.selectionMarker&&g&&(d=e-n,this.selectionMarker.attr({height:M(d),y:(d>0?0:d)+n}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},a=this.selectionMarker,e=a.attr?a.attr("x"):a.x,f=a.attr?a.attr("y"):a.y,g=a.attr?a.attr("width"): +a.width,h=a.attr?a.attr("height"):a.height,i;if(this.hasDragged||c)p(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?e:f),b=a.toValue(b?e+g:f+h);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a,min:C(c,b),max:v(c,b)}),i=!0)}}),i&&D(b,"selection",d,function(a){b.zoom(q(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)G(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched= +!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){V[oa]&&V[oa].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=V[oa];if(a)a.pointer.reset(),a.pointer.chartPosition= +null},onContainerMouseMove:function(a){var b=this.chart;oa=b.index;a=this.normalize(a);b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=H(a,"class"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf("highcharts-container")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget|| +a.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);a.cancelBubble=!0;b.cancelClick||(c&&this.inClass(a.target,"highcharts-tracker")?(D(c.series,"click",q(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(q(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&D(b,"click",a)))},setDOMEvents:function(){var a= +this,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};K(b,"mouseleave",a.onContainerMouseLeave);ab===1&&K(y,"mouseup",a.onDocumentMouseUp);if($a)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},ab===1&&K(y,"touchend",a.onDocumentTouchEnd)},destroy:function(){var a;W(this.chart.container,"mouseleave",this.onContainerMouseLeave); +ab||(W(y,"mouseup",this.onDocumentMouseUp),W(y,"touchend",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};q(R.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?"x":"y",k=a?"X":"Y",l="chart"+k,o=a?"width":"height",n=i["plot"+(a? +"Left":"Top")],s,m,p=h||1,q=i.inverted,x=i.bounds[a?"h":"v"],r=b.length===1,v=b[0][l],u=c[0][l],t=!r&&b[1][l],w=!r&&c[1][l],y,c=function(){!r&&M(v-t)>20&&(p=h||M(u-w)/M(v-t));m=(n-u)/p+v;s=i["plot"+(a?"Width":"Height")]/p};c();b=m;bx.max&&(b=x.max-s,y=!0);y?(u-=0.8*(u-g[j][0]),r||(w-=0.8*(w-g[j][1])),c()):g[j]=[u,w];q||(f[j]=m-n,f[o]=s);f=q?1/p:p;e[o]=s;e[j]=b;d[q?a?"scaleY":"scaleX":"scale"+k]=p;d["translate"+k]=f*n+(u-f*v)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown, +e=b.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.hasZoom,j=b.selectionMarker,k={},l=g===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||c.runChartClick),o={};(i||e)&&!l&&a.preventDefault();Ua(f,function(a){return b.normalize(a)});if(a.type==="touchstart")p(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"],d=a.minPixelPadding, +e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=C(e,f),e=v(e,f);b.min=C(a.pos,g-d);b.max=v(a.pos+a.len,e+d)}});else if(d.length){if(!j)b.selectionMarker=j=q({destroy:sa},c.plotBox);b.pinchTranslate(d,f,k,j,o,h);b.hasPinched=i;b.scaleGroups(k,o);!i&&e&&g===1&&this.runPointActions(b.normalize(a))}},onContainerTouchStart:function(a){var b=this.chart;oa=b.index;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()): +a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){V[oa]&&V[oa].pointer.drop(a)}});if(I.PointerEvent||I.MSPointerEvent){var ua={},zb=!!I.PointerEvent,Wb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in ua)ua.hasOwnProperty(a)&&b.push({pageX:ua[a].pageX,pageY:ua[a].pageY,target:ua[a].target});return b},Ab=function(a,b,c,d){a=a.originalEvent||a;if((a.pointerType==="touch"|| +a.pointerType===a.MSPOINTER_TYPE_TOUCH)&&V[oa])d(a),d=V[oa].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:sa,touches:Wb()})};q(Wa.prototype,{onContainerPointerDown:function(a){Ab(a,"onContainerTouchStart","touchstart",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Ab(a,"onContainerTouchMove","touchmove",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!ua[a.pointerId].target)ua[a.pointerId].target=a.currentTarget})}, +onDocumentPointerUp:function(a){Ab(a,"onContainerTouchEnd","touchend",function(a){delete ua[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,zb?"pointerdown":"MSPointerDown",this.onContainerPointerDown);a(this.chart.container,zb?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(y,zb?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}});Ma(Wa.prototype,"init",function(a,b,c){a.call(this,b,c);(this.hasZoom||this.followTouchMove)&&G(b.container,{"-ms-touch-action":Q,"touch-action":Q})}); +Ma(Wa.prototype,"setDOMEvents",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(K)});Ma(Wa.prototype,"destroy",function(a){this.batchMSEvents(W);a.call(this)})}var lb=R.Legend=function(a,b){this.init(a,b)};lb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=m(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=z(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=w(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY= +e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.symbolWidth=m(b.symbolWidth,16),c.pages=[],c.render(),K(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||"#CCC":g,g=a.options&&a.options.marker,i={fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in i.stroke=h,g=a.convertAttribs(g), +g)d=g[j],d!==t&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;p(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Pa(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()}, +positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,p(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,G(f,{left:b.translateX+e.checkboxOffset+f.x-20+"px",top:g+"px",display:g>c-6&&g(o||b.chartWidth-2*j-p-d.x))this.itemX=p,this.itemY+=s+this.lastLineHeight+n,this.lastLineHeight=0;this.maxItemWidth=v(this.maxItemWidth,f);this.lastItemY=s+this.itemY+n;this.lastLineHeight=v(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=s+g+n,this.lastLineHeight=g);this.offsetWidth=o||v((e?this.itemX-p-k:f)+j,this.offsetWidth)},getAllItems:function(){var a= +[];p(this.chart.series,function(b){var c=b.options;if(m(c.showInLegend,!r(c.linkedTo)?t:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,o=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup); +a.renderTitle();e=a.getAllItems();ob(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;p(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||o){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor, +"stroke-width":l||0,fill:o||Q}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(q({width:g,height:h},j),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,j=e.navigation,k=m(j.animation,!0),l=j.arrowSize||12,o=this.nav,n=this.pages, +s,q=this.allItems;e.layout==="horizontal"&&(f/=2);g&&(f=C(f,g));n.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=m(this.currentPage,1);this.fullHeight=a;p(q,function(a,b){var c=a._legendItemPos[1],d=u(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(s||c)!==n[e-1])n.push(s||c),e++;b===q.length-1&&c+d-n[e-1]>h&&n.push(c);c!==s&&(s=c)});if(!i)i=b.clipRect=d.clipRect(0,this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!o)this.nav= +o=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,l,l).on("click",function(){b.scroll(-1,k)}).add(o),this.pager=d.text("",15,10).css(j.style).add(o),this.down=d.symbol("triangle-down",0,0,l,l).on("click",function(){b.scroll(1,k)}).add(o);b.scroll(0);a=f}else if(o)i.attr({height:c.chartHeight}),o.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation, +h=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==t&&Qa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}}; +N=R.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,a.options.symbolRadius||0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-u(e.fontMetrics(a.options.itemStyle.fontSize).b*0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine= +e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};(/Trident\/7\.0/.test(wa)||Ta)&&Ma(lb.prototype,"positionItem",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});Ya.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=w(E,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing", +d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=V.length;V.push(f);ab++;d.reflow!==!1&&K(f,"load",function(){f.initReflow()});if(e)for(g in e)K(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=fa?!1:m(d.animation,!0);f.pointCount=0;f.counters=new Bb;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=F[a.type||b.type||b.defaultSeriesType])||ra(17,!0);b=new b;b.init(this, +a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&p(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,o=l.isHidden(),n=[];Qa(a,this);o&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&& +(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,p(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();p(b,function(a){a.isDirty&&(i=!0)});p(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,n.push(function(){D(a,"afterSetExtremes", +q(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);l.draw();D(this,"redraw");o&&this.cloneRenderTo(!0);p(n,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container; +a?b&&(this.renderTo.appendChild(c),Pa(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),G(b,{position:"absolute",top:"-9999px",display:"block"}),b.style.setProperty&&b.style.setProperty("display","block","important"),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+tb++;if(Fa(a))this.renderTo=a=y.getElementById(a); +a||ra(13,!0);c=z(H(a,"data-highcharts-chart"));!isNaN(c)&&V[c]&&V[c].hasRendered&&V[c].destroy();H(a,"data-highcharts-chart",this.index);a.innerHTML="";!b.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=Y(Ja,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},q({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"}, +b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new ta(a,c,d,b.style,!0):new Za(a,c,d,b.style);fa&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,f=m(e.margin,20),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!r(d[0]))this.plotTop=v(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i==="right"){if(!r(d[1]))this.marginRight= +v(this.marginRight,c.legendWidth-g+f+a[1])}else if(i==="left"){if(!r(d[3]))this.plotLeft=v(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j==="top"){if(!r(d[0]))this.plotTop=v(this.plotTop,c.legendHeight+h+f+a[0])}else if(j==="bottom"&&!r(d[2]))this.marginBottom=v(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&p(this.axes,function(a){a.getOffset()});r(d[3])|| +(this.plotLeft+=b[3]);r(d[0])||(this.plotTop+=b[0]);r(d[2])||(this.marginBottom+=b[2]);r(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||jb(d,"width"),f=c.height||jb(d,"height"),c=a?a.target:I,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===I||c===y)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth= +e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};K(I,"resize",b);K(a,"destroy",function(){W(I,"resize",b)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&D(d,"endResize",null,function(){d.isResizing-=1})};Qa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(r(a))d.chartWidth=e=v(0,u(a)),d.hasUserSize=!!e;if(r(b))d.chartHeight=f=v(0,u(b));(va?kb:G)(d.container,{width:e+"px",height:f+"px"},va);d.setChartSize(!0);d.renderer.setSize(e, +f,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;D(d,"resize");va===!1?g():setTimeout(g,va&&va.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=u(this.plotLeft);this.plotTop=j=u(this.plotTop);this.plotWidth= +k=v(0,u(d-i-this.marginRight));this.plotHeight=l=v(0,u(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*T(this.plotBorderWidth/2);b=Ka(v(d,h[3])/2);c=Ka(v(d,h[0])/2);this.clipBox={x:b,y:c,width:T(this.plotSizeX-v(d,h[1])/2-b),height:T(this.plotSizeY-v(d,h[2])/2-c)};a||p(this.axes,function(a){a.setAxisSize(); +a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=m(b[0],a[0]);this.marginRight=m(b[1],a[1]);this.marginBottom=m(b[2],a[2]);this.plotLeft=m(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage, +o=a.plotBorderWidth||0,n,s=this.plotLeft,m=this.plotTop,p=this.plotWidth,q=this.plotHeight,r=this.plotBox,v=this.clipRect,u=this.clipBox;n=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:j||Q};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass("highcharts-background").add().shadow(a.shadow)}if(k)f?f.animate(r):this.plotBackground=b.rect(s,m,p,q,0).attr({fill:k}).add().shadow(a.plotShadow); +if(l)h?h.animate(r):this.plotBGImage=b.image(l,s,m,p,q).add();v?v.animate({width:u.width,height:u.height}):this.clipRect=b.clipRect(u);if(o)g?g.animate(g.crisp({x:s,y:m,width:p,height:q})):this.plotBorder=b.rect(s,m,p,q,0,-o).attr({stroke:a.plotBorderColor,"stroke-width":o,fill:Q,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;p(["inverted","angular","polar"],function(g){c=F[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g]; +for(e=d&&d.length;!f&&e--;)(c=F[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo;if(Fa(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},renderSeries:function(){p(this.series,function(a){a.translate();a.setTooltipPoints&&a.setTooltipPoints();a.render()})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,f= +d.credits,g;a.setTitle();a.legend=new lb(a,d.legend);a.getStacks();p(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;p(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&p(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();a.renderSeries();e.items&&p(e.items,function(b){var d=q(e.style,b.style),f=z(d.left)+a.plotLeft,g=z(d.top)+a.plotTop+12;delete d.left;delete d.top; +c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on("click",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;D(a,"destroy");V[a.index]=t;ab--;a.renderTo.removeAttribute("data-highcharts-chart");W(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy(); +p("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML="",W(d),f&&Pa(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!aa&&I==I.top&&y.readyState!=="complete"||fa&&!I.canvg?(fa?Lb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):y.attachEvent("onreadystatechange", +function(){y.detachEvent("onreadystatechange",a.firstRender);y.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();D(a,"init");a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();p(b.series||[],function(b){a.initSeries(b)});a.linkSeries();D(a,"beforeRender");if(R.Pointer)a.pointer=new Wa(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);p(a.callbacks,function(b){b.apply(a,[a])});a.cloneRenderTo(!0); +D(a,"load")}},splashArray:function(a,b){var c=b[a],c=ca(c)?c:[c,c,c,c];return[m(b[a+"Top"],c[0]),m(b[a+"Right"],c[1]),m(b[a+"Bottom"],c[2]),m(b[a+"Left"],c[3])]}};Ya.prototype.callbacks=[];X=R.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[m(b[0],"50%"),m(b[1],"50%"),a.size||"100%",a.innerSize||0],g=C(e,f),h;return Ua(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*z(a)/100: +a)+(d?c:0)})}};var Ea=function(){};Ea.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Ea.prototype.optionsToObject.call(this,a);q(this,a);this.options=this.options?q(this.options,a):a;if(d)this.y=this[d];if(this.x=== +t&&c)this.x=b===t?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||["y"],e=d.length,f=0,g=0;if(typeof a==="number"||a===null)b[d[0]]=a;else if(La(a)){if(a.length>e){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];f++}for(;ga+1&&b.push(d.slice(a+ +1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=w(e,c.series,a);this.tooltipOptions=w(E.tooltip,E.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters, +e;e=a.color||ba[this.type].color;if(!e&&!a.colorByPoint)r(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)r(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:N.drawLineMarker, +setData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i=e.options,j=e.chart,k=null,l=e.xAxis,o=l&&!!l.categories,n=e.tooltipPoints,s=i.turboThreshold,q=this.xData,r=this.yData,v=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=m(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData)p(a,function(a,b){f[b].update(a,!1)});else{e.xIncrement=null;e.pointRange=o?1:i.pointRange;e.colorCounter=0;p(this.parallelArrays,function(a){e[a+"Data"].length=0});if(s&&h>s){for(c=0;k===null&&cj||this.forceCrop))if(o=h.min,n=h.max,b[d-1]n)b=[],c=[];else if(b[0]n)e=this.cropData(this.xData,this.yData,o,n),b=e.xData,c=e.yData, +e=e.start,f=!0,k=b.length;for(d=b.length-1;d>=0;d--)a=b[d]-b[d-1],!f&&b[d]>o&&b[d]0&&(g===t||a=c){f=v(0,i-h);break}for(;id){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f, +g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],o;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(o=0;o0),j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=m(void 0,Na(e));this.dataMax=m(void 0,Ba(e))},translate:function(){this.processedXData|| +this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i==="between"||ha(i),k=a.threshold,a=0;a0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(n)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a, +b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=m(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ba[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color;f={stroke:g,fill:g};var h=a.points||[],i,j=[],k,l=a.pointAttrToOptions;k=a.hasPointSpecificOptions;var o=b.negativeColor,n=c.lineColor,s=c.fillColor;i=b.turboThreshold;var m;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color= +e.color||ya(e.color||g).brighten(e.brightness).get();j[""]=a.convertAttribs(c,f);p(["hover","select"],function(b){j[b]=a.convertAttribs(d[b],j[""])});a.pointAttr=j;g=h.length;if(!i||g1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!=="square",g=this.getGraphPath(), +h=b.negativeColor;h&&c.push(["graphNeg",h]);p(c,function(c,h){var k=c[0],l=a[k];if(l)bb(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],"stroke-width":d,fill:Q,zIndex:1},e?l.dashstyle=e:f&&(l["stroke-linecap"]=l["stroke-linejoin"]="round"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j= +b.chartHeight,k=v(e,j),l=this.yAxis;if(d&&(f||g)){d=u(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}}, +invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)K(c,"resize",a),K(b,"destroy",function(){W(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis; +if(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=(c=d.animation)&&!!a.animate&&b.renderer.isSVG&&m(c.duration,500)||0,f=a.visible?"visible":"hidden",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup("group","series",f,g,i);a.markerGroup=a.plotGroup("markerGroup","markers",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted:!1;a.drawGraph&&(a.drawGraph(), +a.clipNeg());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)e?a.animationTimeout=setTimeout(function(){a.afterAnimate()},e):a.afterAnimate();a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth, +height:a.plotHeight}),c.animate({translateX:m(d&&d.left,a.plotLeft),translateY:m(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints&&this.setTooltipPoints(!0);this.render();b&&D(this,"updatedData")}};Hb.prototype={destroy:function(){Oa(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ia(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,null,null,b.useHTML).css(b.style).attr({align:this.textAlign, +rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=M(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?"show":"hide"](!0)}};la.prototype.buildStacks=function(){var a= +this.series,b=m(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;cg;)h--;this.updateParallelArrays(d,"splice",h,0,0);this.updateParallelArrays(d, +h);if(j)j[g]=d.name;l.splice(h,0,a);o&&(this.data.splice(h,0,null),this.processData());e.legendType==="point"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),this.updateParallelArrays(d,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=m(a,!0);if(!c.isRemoving)c.isRemoving=!0,D(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving= +!1},update:function(a,b){var c=this.chart,d=this.type,e=F[d].prototype,f,a=w(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=t);q(this,F[a.type||d].prototype);this.init(c,a);m(b,!0)&&c.redraw(!1)}});q(la.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=w(this.userOptions,a);this.destroy(!0);this._addedPlotLB=t;this.init(c,q(a,{events:t}));c.isDirtyBox= +!0;m(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ja(b.axes,this);ja(b[c],this);b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;m(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});ga=ka(O);F.line=ga;ba.area=w(S,{threshold:0});var pa=ka(O,{type:"area",getSegments:function(){var a= +[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,o,n;if(this.options.stacking&&!this.cropped){for(o=0;o=0;d--)g=m(a[d].yBottom,f),da&&i>e?(i=v(a,e),k=2*e-i):ig&&k>e?(k=v(g,e),i=2*e-k):k0.5*a.xAxis.len?0:1),e=a.yAxis,f=a.translatedThreshold=e.getThreshold(c.threshold),g=m(c.minPointLength,5),c=a.getColumnMetrics(),h=c.width,i=a.barW=Ka(v(h,1+2*d)),j=a.pointXOffset=c.offset,k=-(d%2?0.5:0),l=d%2?0.5:1;b.renderer.isVML&&b.inverted&&(l+=1);O.prototype.translate.apply(a);p(a.points,function(c){var d=m(c.yBottom,f),p=C(v(-999-d,c.plotY),e.len+ +999+d),q=c.plotX+j,r=i,t=C(p,d),x;x=v(p,d)-t;M(x)g?d-g:f-(e.translate(c.y,0,1,0,1)<=f?g:0)));c.barX=q;c.pointWidth=h;c.tooltipPos=b.inverted?[e.len-p,a.xAxis.len-q-r/2]:[q+r/2,p];d=M(q)<0.5;r=u(q+r)+k;q=u(q)+k;r-=q;p=M(t)<0.5;x=u(t+x)+l;t=u(t)+l;x-=t;d&&(q+=1,r-=1);p&&(t-=1,x+=1);c.shapeType="rect";c.shapeArgs={x:q,y:t,width:r,height:x}})},getSymbol:sa,drawLegendSymbol:N.drawRectangle,drawGraph:sa,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit|| +250,f,g,h;p(a.points,function(i){var j=i.plotY,k=i.graphic;if(j!==t&&!isNaN(j)&&i.y!==null)f=i.shapeArgs,h=r(a.borderWidth)?{"stroke-width":a.borderWidth}:{},g=i.pointAttr[i.selected?"select":""]||a.pointAttr[""],k?(bb(k),k.attr(h)[b.pointCount {series.name}
', +pointFormat:"x: {point.x}
y: {point.y}
"},stickyTracking:!1});pa=ka(O,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["markerGroup"],takeOrdinalPosition:!1,singularTooltips:!0,drawGraph:function(){this.options.lineWidth&&O.prototype.drawGraph.call(this)}});F.scatter=pa;ba.pie=w(S,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0, +legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});S={type:"pie",isCartesian:!1,pointClass:ka(Ea,{init:function(){Ea.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;q(a,{visible:a.visible!==!1,name:m(a.name,"Slice")});b=function(b){a.slice(b.type==="select")};K(a,"select",b);K(a,"unselect",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart;b.visible=b.options.visible= +a=a===t?!b.visible:a;c.options.data[Da(b,c.data)]=b.options;p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;Qa(c,d.chart);m(b,!0);this.sliced=this.options.sliced=a=r(a)?a:!this.sliced;d.options.data[Da(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a); +this.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},singularTooltips:!0,getColor:sa,animate:function(a){var b=this,c=b.points,d= +b.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b,c,d){O.prototype.setData.call(this,a,!1,c,d);this.processData();this.generatePoints();m(b,!0)&&this.chart.redraw(c)},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;O.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ma/180*(i-90),i=(this.endAngleRad=ma/180*(m(c.endAngle,i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,o,n=k.length,p;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=U.asin(C((b-a[1])/(a[2]/2+l),1));return a[0]+(c?-1:1)*Z(h)*(a[2]/ +2+l)};for(o=0;o1.5*ma?h-=2*ma:h<-ma/2&&(h+=2*ma);p.slicedTranslation={translateX:u(Z(h)*d),translateY:u(ea(h)*d)};f=Z(h)*a[2]/2;g=ea(h)*a[2]/2;p.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];p.half=h<-ma/2||h>ma/2?1:0;p.angle=h;e=C(e,l/2);p.labelPos=[a[0]+f+Z(h)*l,a[1]+g+ea(h)*l,a[0]+f+Z(h)*e,a[1]+g+ea(h)*e,a[0]+f,a[1]+g,l<0? +"center":p.half?"right":"left",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);p(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g("shadow").add(a.shadowGroup);c=h.sliced?h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(q(g,c)):h.graphic=d=b[h.shapeType](g).setRadialReference(a.center).attr(h.pointAttr[h.selected?"select": +""]).attr({"stroke-linejoin":"round"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:N.drawRectangle,getCenter:X.getCenter,getSymbol:sa};S=ka(O,S);F.pie=S;O.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h,i;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),i=a.plotGroup("dataLabelsGroup", +"data-labels","hidden",d.zIndex||6),!a.hasRendered&&m(d.defer,!0)&&(i.attr({opacity:0}),K(a,"afterAnimate",function(){a.dataLabelsGroup.show()[b.animation?"animate":"attr"]({opacity:1},{duration:200})})),g=d,p(e,function(b){var e,l=b.dataLabel,o,n,p=b.connector,u=!0;f=b.options&&b.options.dataLabels;e=m(f&&f.enabled,g.enabled);if(l&&!e)b.dataLabel=l.destroy();else if(e){d=w(g,f);e=d.rotation;o=b.getLabelConfig();h=d.format?Ia(d.format,o):d.formatter.call(o,d);d.style.color=m(d.color,d.style.color, +a.color,"black");if(l)if(r(h))l.attr({text:h}),u=!1;else{if(b.dataLabel=l=l.destroy(),p)b.connector=p.destroy()}else if(r(h)){l={fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:e,padding:d.padding,zIndex:1};for(n in l)l[n]===t&&delete l[n];l=b.dataLabel=a.chart.renderer[e?"text":"label"](h,0,-999,null,null,null,d.useHTML).attr(l).css(q(d.style,c&&{cursor:c})).add(i).shadow(d.shadow)}l&&a.alignDataLabel(b,l,d,null,u)}})};O.prototype.alignDataLabel= +function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=m(a.plotX,-999),i=m(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL||f.isInsidePlot(h,u(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g)))d=q({x:g?f.plotWidth-i:h,y:u(g?f.plotHeight-h:i),width:0,height:0},d),q(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?"attr":"animate"](g)):(b.align(c,null,d),g=b.alignAttr,m(c.overflow,"justify")==="justify"?this.justifyDataLabel(b, +c,g,j,d,e):m(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};O.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h==="right"?b.align="left":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i==="bottom"?b.verticalAlign="top":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight- +j,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(F.pie)F.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=m(e.connectorPadding,10),g=m(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=m(e.softConnector,!0),l=e.distance,o=a.center,n=o[2]/2,q=o[1],r=l>0,t,w,x,y,z=[[],[]],A,C,G,D,B,F=[0,0,0,0],N=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){O.prototype.drawDataLabels.apply(a);p(b,function(a){a.dataLabel&&a.visible&&z[a.half].push(a)}); +for(D=0;!y&&b[D];)y=b[D]&&b[D].dataLabel&&(b[D].dataLabel.getBBox().height||21),D++;for(D=2;D--;){var b=[],K=[],H=z[D],I=H.length,E;a.sortByAngle(H,D-0.5);if(l>0){for(B=q-n-l;B<=q+n+l;B+=y)b.push(B);w=b.length;if(I>w){c=[].concat(H);c.sort(N);for(B=I;B--;)c[B].rank=B;for(B=I;B--;)H[B].rank>=w&&H.splice(B,1);I=H.length}for(B=0;B0){if(w=K.pop(),E=w.i,C=w.y,c>C&&b[E+1]!==null||ch-f&&(F[1]=v(u(A+w-h+f),F[1])),C-y/2<0?F[0]= +v(u(-C+y/2),F[0]):C+y/2>d&&(F[2]=v(u(C+y/2-d),F[2]))}}if(Ba(F)===0||this.verifyDataLabelOverflow(F))this.placeDataLabels(),r&&g&&p(this.points,function(b){i=b.connector;x=b.labelPos;if((t=b.dataLabel)&&t._pos)G=t._attr.visibility,A=t.connX,C=t.connY,j=k?["M",A+(x[6]==="left"?5:-5),C,"C",A,C,2*x[2]-x[4],2*x[3]-x[5],x[2],x[3],"L",x[4],x[5]]:["M",A+(x[6]==="left"?5:-5),C,"L",x[2],x[3],"L",x[4],x[5]],i?(i.animate({d:j}),i.attr("visibility",G)):b.connector=i=a.chart.renderer.path(j).attr({"stroke-width":g, +stroke:e.connectorColor||b.color||"#606060",visibility:G}).add(a.dataLabelsGroup);else if(i)b.connector=i.destroy()})}},F.pie.prototype.placeDataLabels=function(){p(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?"animate":"attr"](b),a.moved=!0):a&&a.attr({y:-999})})},F.pie.prototype.alignDataLabel=sa,F.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=v(b[2]-v(a[1],a[3]),c):(e=v(b[2]- +a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=v(C(e,b[2]-v(a[0],a[2])),c):(e=v(C(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);em(this.translatedThreshold,f.plotSizeY),j=m(c.inside,!!this.options.stacking);if(h&& +(d=w(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=m(c.align,!g||j?"center":i?"right":"left");c.verticalAlign=m(c.verticalAlign,g||j?"middle":i?"top":"bottom");O.prototype.alignDataLabel.call(this,a,b,c,d,e)};S=R.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver(); +for(;d&&!e;)e=d.point,d=d.parentNode;if(e!==t&&e!==b.hoverPoint)e.onMouseOver(c)};p(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)p(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),$a))a[b].on("touchstart",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath: +a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},q="rgba(192,192,192,"+(aa?1.0E-4:0.002)+")";if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-i,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+i,d[m-1]);for(m=0;mC(k.dataMin,k.min)&&i=f.min&&c<=f.max){h=b[i+1];c=d===t?0:d+1;for(d=b[i+1]?C(v(0,T((e.clientX+ +(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===t?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;D(this,a?"select":"unselect")},drawTracker:S.drawTrackerGraph});q(R,{Axis:la,Chart:Ya,Color:ya,Point:Ea,Tick:Sa,Renderer:Za,Series:O,SVGElement:P,SVGRenderer:ta,arrayMin:Na,arrayMax:Ba,charts:V,dateFormat:cb,format:Ia,pathAnim:ub,getOptions:function(){return E}, +hasBidiBug:Nb,isTouchDevice:Jb,numberFormat:Ga,seriesTypes:F,setOptions:function(a){E=w(!0,E,a);Cb();return E},addEvent:K,removeEvent:W,createElement:Y,discardElement:Pa,css:G,each:p,extend:q,map:Ua,merge:w,pick:m,splat:qa,extendClass:ka,pInt:z,wrap:Ma,svg:aa,canvas:fa,vml:!aa&&!fa,product:"Highcharts",version:"4.0.1"})})(); diff --git a/src/main/webapp/static/script/holder.js b/src/main/webapp/static/script/holder.js new file mode 100644 index 0000000..c34f3b2 --- /dev/null +++ b/src/main/webapp/static/script/holder.js @@ -0,0 +1,419 @@ +/* + +Holder - 2.0 - client side image placeholders +(c) 2012-2013 Ivan Malopinsky / http://imsky.co + +Provided under the Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0 +Commercial use requires attribution. + +*/ + +var Holder = Holder || {}; +(function (app, win) { + +var preempted = false, +fallback = false, +canvas = document.createElement('canvas'); + +//getElementsByClassName polyfill +document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i= 0.75) { + text_height = Math.floor(text_height * 0.75 * (width/text_width)); + } + //Resetting font size if necessary + ctx.font = "bold " + (text_height * ratio) + "px " + font; + ctx.fillText(text, (width / 2), (height / 2), width); + return canvas.toDataURL("image/png"); +} + +function render(mode, el, holder, src) { + var dimensions = holder.dimensions, + theme = holder.theme, + text = holder.text ? decodeURIComponent(holder.text) : holder.text; + var dimensions_caption = dimensions.width + "x" + dimensions.height; + theme = (text ? extend(theme, { + text: text + }) : theme); + theme = (holder.font ? extend(theme, { + font: holder.font + }) : theme); + if (mode == "image") { + el.setAttribute("data-src", src); + el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); + if (fallback || !holder.auto) { + el.style.width = dimensions.width + "px"; + el.style.height = dimensions.height + "px"; + } + if (fallback) { + el.style.backgroundColor = theme.background; + } else { + el.setAttribute("src", draw(ctx, dimensions, theme, ratio)); + } + } else if (mode == "background") { + if (!fallback) { + el.style.backgroundImage = "url(" + draw(ctx, dimensions, theme, ratio) + ")"; + el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px"; + } + } else if (mode == "fluid") { + el.setAttribute("data-src", src); + el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); + if (dimensions.height.substr(-1) == "%") { + el.style.height = dimensions.height + } else { + el.style.height = dimensions.height + "px" + } + if (dimensions.width.substr(-1) == "%") { + el.style.width = dimensions.width + } else { + el.style.width = dimensions.width + "px" + } + if (el.style.display == "inline" || el.style.display == "") { + el.style.display = "block"; + } + if (fallback) { + el.style.backgroundColor = theme.background; + } else { + el.holderData = holder; + fluid_images.push(el); + fluid_update(el); + } + } +}; + +function fluid_update(element) { + var images; + if (element.nodeType == null) { + images = fluid_images; + } else { + images = [element] + } + for (i in images) { + var el = images[i] + if (el.holderData) { + var holder = el.holderData; + el.setAttribute("src", draw(ctx, { + height: el.clientHeight, + width: el.clientWidth + }, holder.theme, ratio)); + } + } +} + +function parse_flags(flags, options) { + + var ret = { + theme: settings.themes.gray + }, render = false; + + for (sl = flags.length, j = 0; j < sl; j++) { + var flag = flags[j]; + if (app.flags.dimensions.match(flag)) { + render = true; + ret.dimensions = app.flags.dimensions.output(flag); + } else if (app.flags.fluid.match(flag)) { + render = true; + ret.dimensions = app.flags.fluid.output(flag); + ret.fluid = true; + } else if (app.flags.colors.match(flag)) { + ret.theme = app.flags.colors.output(flag); + } else if (options.themes[flag]) { + //If a theme is specified, it will override custom colors + ret.theme = options.themes[flag]; + } else if (app.flags.text.match(flag)) { + ret.text = app.flags.text.output(flag); + } else if (app.flags.font.match(flag)) { + ret.font = app.flags.font.output(flag); + } else if (app.flags.auto.match(flag)) { + ret.auto = true; + } + } + + return render ? ret : false; + +}; + + + +if (!canvas.getContext) { + fallback = true; +} else { + if (canvas.toDataURL("image/png") + .indexOf("data:image/png") < 0) { + //Android doesn't support data URI + fallback = true; + } else { + var ctx = canvas.getContext("2d"); + } +} + +var dpr = 1, bsr = 1; + +if(!fallback){ + dpr = window.devicePixelRatio || 1, + bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; +} + +var ratio = dpr / bsr; + +var fluid_images = []; + +var settings = { + domain: "holder.js", + images: "img", + bgnodes: ".holderjs", + themes: { + "gray": { + background: "#eee", + foreground: "#aaa", + size: 12 + }, + "social": { + background: "#3a5a97", + foreground: "#fff", + size: 12 + }, + "industrial": { + background: "#434A52", + foreground: "#C2F200", + size: 12 + } + }, + stylesheet: "" +}; + + +app.flags = { + dimensions: { + regex: /^(\d+)x(\d+)$/, + output: function (val) { + var exec = this.regex.exec(val); + return { + width: +exec[1], + height: +exec[2] + } + } + }, + fluid: { + regex: /^([0-9%]+)x([0-9%]+)$/, + output: function (val) { + var exec = this.regex.exec(val); + return { + width: exec[1], + height: exec[2] + } + } + }, + colors: { + regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i, + output: function (val) { + var exec = this.regex.exec(val); + return { + size: settings.themes.gray.size, + foreground: "#" + exec[2], + background: "#" + exec[1] + } + } + }, + text: { + regex: /text\:(.*)/, + output: function (val) { + return this.regex.exec(val)[1]; + } + }, + font: { + regex: /font\:(.*)/, + output: function (val) { + return this.regex.exec(val)[1]; + } + }, + auto: { + regex: /^auto$/ + } +} + +for (var flag in app.flags) { + if (!app.flags.hasOwnProperty(flag)) continue; + app.flags[flag].match = function (val) { + return val.match(this.regex) + } +} + +app.add_theme = function (name, theme) { + name != null && theme != null && (settings.themes[name] = theme); + return app; +}; + +app.add_image = function (src, el) { + var node = selector(el); + if (node.length) { + for (var i = 0, l = node.length; i < l; i++) { + var img = document.createElement("img") + img.setAttribute("data-src", src); + node[i].appendChild(img); + } + } + return app; +}; + +app.run = function (o) { + var options = extend(settings, o), + images = [], imageNodes = [], bgnodes = []; + + if(typeof(options.images) == "string"){ + imageNodes = selector(options.images); + } + else if (window.NodeList && options.images instanceof window.NodeList) { + imageNodes = options.images; + } else if (window.Node && options.images instanceof window.Node) { + imageNodes = [options.images]; + } + + if(typeof(options.bgnodes) == "string"){ + bgnodes = selector(options.bgnodes); + } else if (window.NodeList && options.elements instanceof window.NodeList) { + bgnodes = options.bgnodes; + } else if (window.Node && options.bgnodes instanceof window.Node) { + bgnodes = [options.bgnodes]; + } + + preempted = true; + + for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]); + + var holdercss = document.getElementById("holderjs-style"); + if (!holdercss) { + holdercss = document.createElement("style"); + holdercss.setAttribute("id", "holderjs-style"); + holdercss.type = "text/css"; + document.getElementsByTagName("head")[0].appendChild(holdercss); + } + + if (!options.nocss) { + if (holdercss.styleSheet) { + holdercss.styleSheet.cssText += options.stylesheet; + } else { + holdercss.appendChild(document.createTextNode(options.stylesheet)); + } + } + + var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)"); + + for (var l = bgnodes.length, i = 0; i < l; i++) { + var src = window.getComputedStyle(bgnodes[i], null) + .getPropertyValue("background-image"); + var flags = src.match(cssregex); + var bgsrc = bgnodes[i].getAttribute("data-background-src"); + + if (flags) { + var holder = parse_flags(flags[1].split("/"), options); + if (holder) { + render("background", bgnodes[i], holder, src); + } + } + else if(bgsrc != null){ + var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1) + .split("/"), options); + if(holder){ + render("background", bgnodes[i], holder, src); + } + } + } + + for (l = images.length, i = 0; i < l; i++) { + + var attr_src = attr_data_src = src = null; + + try{ + attr_src = images[i].getAttribute("src"); + attr_datasrc = images[i].getAttribute("data-src"); + }catch(e){} + + if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) { + src = attr_src; + } else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) { + src = attr_datasrc; + } + + if (src) { + var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1) + .split("/"), options); + if (holder) { + if (holder.fluid) { + render("fluid", images[i], holder, src) + } else { + render("image", images[i], holder, src); + } + } + } + } + return app; +}; + +contentLoaded(win, function () { + if (window.addEventListener) { + window.addEventListener("resize", fluid_update, false); + window.addEventListener("orientationchange", fluid_update, false); + } else { + window.attachEvent("onresize", fluid_update) + } + preempted || app.run(); +}); + +if (typeof define === "function" && define.amd) { + define("Holder", [], function () { + return app; + }); +} + +})(Holder, window); diff --git a/src/main/webapp/static/script/html5shiv.js b/src/main/webapp/static/script/html5shiv.js new file mode 100644 index 0000000..448cebd --- /dev/null +++ b/src/main/webapp/static/script/html5shiv.js @@ -0,0 +1,8 @@ +/* + HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); +if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;dp&&(p=-50);g(this);return c.each(function(){var a=f(this);E(a);var c=this, +b=c.id,g=-p+"%",d=100+2*p+"%",d={position:"absolute",top:g,left:g,display:"block",width:d,height:d,margin:0,padding:0,background:"#fff",border:0,opacity:0},g=_mobile?{position:"absolute",visibility:"hidden"}:p?d:{position:"absolute",opacity:0},l="checkbox"==c[_type]?e.checkboxClass||"icheckbox":e.radioClass||"i"+r,z=f(_label+'[for="'+b+'"]').add(a.closest(_label)),u=!!e.aria,y=m+"-"+Math.random().toString(36).substr(2,6),h='
")[_callback]("ifCreated").parent().append(e.insert);d=f('').css(d).appendTo(h);a.data(m,{o:e,s:a.attr("style")}).css(g);e.inheritClass&&h[_add](c.className||"");e.inheritID&&b&&h.attr("id",m+"-"+b);"static"==h.css("position")&&h.css("position","relative");A(a,!0,_update);if(z.length)z.on(_click+".i mouseover.i mouseout.i "+_touch,function(b){var d=b[_type],e=f(this);if(!c[n]){if(d==_click){if(f(b.target).is("a"))return; +A(a,!1,!0)}else B&&(/ut|nd/.test(d)?(h[_remove](v),e[_remove](w)):(h[_add](v),e[_add](w)));if(_mobile)b.stopPropagation();else return!1}});a.on(_click+".i focus.i blur.i keyup.i keydown.i keypress.i",function(b){var d=b[_type];b=b.keyCode;if(d==_click)return!1;if("keydown"==d&&32==b)return c[_type]==r&&c[k]||(c[k]?q(a,k):x(a,k)),!1;if("keyup"==d&&c[_type]==r)!c[k]&&x(a,k);else if(/us|ur/.test(d))h["blur"==d?_remove:_add](s)});d.on(_click+" mousedown mouseup mouseover mouseout "+_touch,function(b){var d= +b[_type],e=/wn|up/.test(d)?t:v;if(!c[n]){if(d==_click)A(a,!1,!0);else{if(/wn|er|in/.test(d))h[_add](e);else h[_remove](e+" "+t);if(z.length&&B&&e==v)z[/ut|nd/.test(d)?_remove:_add](w)}if(_mobile)b.stopPropagation();else return!1}})})}})(window.jQuery||window.Zepto); diff --git a/src/main/webapp/static/script/index.js b/src/main/webapp/static/script/index.js new file mode 100644 index 0000000..1bae225 --- /dev/null +++ b/src/main/webapp/static/script/index.js @@ -0,0 +1,181 @@ +$(function () { + + //BEGIN CALENDAR + $("#my-calendar").zabuto_calendar({ + language: "en" + }); + //END CALENDAR + + //BEGIN TO-DO-LIST + $('.todo-list').slimScroll({ + "width": '100%', + "height": '250px', + "wheelStep": 5 + }); + $( ".sortable" ).sortable(); + $( ".sortable" ).disableSelection(); + //END TO-DO-LIST + + //BEGIN AREA CHART SPLINE + var d6_1 = [["Jan", 67],["Feb", 91],["Mar", 36],["Apr", 150],["May", 28],["Jun", 123],["Jul", 38]]; + var d6_2 = [["Jan", 59],["Feb", 49],["Mar", 45],["Apr", 94],["May", 76],["Jun", 22],["Jul", 31]]; + $.plot("#area-chart-spline", [{ + data: d6_1, + label: "Upload", + color: "#ffce54" + },{ + data: d6_2, + label: "Download", + color: "#01b6ad" + }], { + series: { + lines: { + show: !1 + }, + splines: { + show: !0, + tension: .4, + lineWidth: 2, + fill: .8 + }, + points: { + show: !0, + radius: 4 + } + }, + grid: { + borderColor: "#fafafa", + borderWidth: 1, + hoverable: !0 + }, + tooltip: !0, + tooltipOpts: { + content: "%x : %y", + defaultTheme: true + }, + xaxis: { + tickColor: "#fafafa", + mode: "categories" + }, + yaxis: { + tickColor: "#fafafa" + }, + shadowSize: 0 + }); + //END AREA CHART SPLINE + + //BEGIN INTRO JS + $(window).load(function() { + introJs().start(); + }); + //END INTRO JS + + //BEGIN CHAT FORM + $('.chat-scroller').slimScroll({ + "width": '100%', + "height": '270px', + "wheelStep": 5, + "scrollTo": "100px" + }); + $('.chat-form input#input-chat').on("keypress", function(e){ + + var $obj = $(this); + var $me = $obj.parents('.portlet-body').find('ul.chats'); + + if (e.which == 13) { + var content = $obj.val(); + + if (content !== "") { + $me.addClass(content); + var d = new Date(); + var h = d.getHours(); + var m = d.getMinutes(); + if (m < 10) m = "0" + m; + $obj.val(""); // CLEAR TEXT ON TEXTAREA + + var element = ""; + element += "
  • "; + element += ""; + element += "
    "; + element += ""; + element += "Admin  "; + element += "at July 6, 2014" + h + ":" + m + ""; + element += "" + content + ""; + element += "
    "; + element += "
  • "; + + $me.append(element); + var height = 0; + $me.find('li').each(function(i, value){ + height += parseInt($(this).height()); + }); + + height += ''; + //alert(height); + $('.chat-scroller').slimScroll({ + scrollTo: height + }); + } + } + }); + $('.chat-form span#btn-chat').on("click", function(e){ + + e.preventDefault(); + var $obj = $(this).parents('.chat-form').find('input#input-chat'); + var $me = $obj.parents('.portlet-body').find('ul.chats'); + var content = $obj.val(); + + if (content !== "") { + $me.addClass(content); + var d = new Date(); + var h = d.getHours(); + var m = d.getMinutes(); + if (m < 10) m = "0" + m; + $obj.val(""); // CLEAR TEXT ON TEXTAREA + + var element = ""; + element += "
  • "; + element += ""; + element += "
    "; + element += ""; + element += "Admin  "; + element += "at July 6, 2014" + h + ":" + m + ""; + element += "" + content + ""; + element += "
    "; + element += "
  • "; + + $me.append(element); + var height = 0; + $me.find('li').each(function(i, value){ + height += parseInt($(this).height()); + }); + height += ''; + + $('.chat-scroller').slimScroll({ + scrollTo: height + }); + } + + }); + //END CHAT FORM + + //BEGIN COUNTER FOR SUMMARY BOX + counterNum($(".profit h4 span:first-child"), 189, 112, 1, 30); + counterNum($(".income h4 span:first-child"), 636, 812, 1, 50); + counterNum($(".task h4 span:first-child"), 103, 155 , 1, 100); + counterNum($(".visit h4 span:first-child"), 310, 376, 1, 500); + function counterNum(obj, start, end, step, duration) { + $(obj).html(start); + setInterval(function(){ + var val = Number($(obj).html()); + if (val < end) { + $(obj).html(val+step); + } else { + clearInterval(); + } + },duration); + } + //END COUNTER FOR SUMMARY BOX + +}); + diff --git a/src/main/webapp/static/script/jplist.js b/src/main/webapp/static/script/jplist.js new file mode 100644 index 0000000..184bb70 --- /dev/null +++ b/src/main/webapp/static/script/jplist.js @@ -0,0 +1,246 @@ +$('document').ready(function(){ + $('#grid-layout-div').jplist({ + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + + //save plugin state + ,storage: 'localstorage' //'', 'cookies', 'localstorage' + ,storageName: 'jplist-div-layout' + }); + + $('#grid-layout-table-1').jplist({ + + itemsBox: '.demo-tbl' + ,itemPath: '.tbl-item' + ,panelPath: '.jplist-panel' + + //save plugin state + ,storage: 'localstorage' //'', 'cookies', 'localstorage' + ,storageName: 'jplist-tabl' + }); + + $('#grid-layout-table-2').jplist({ + + itemsBox: '.demo-tbl tbody' + ,itemPath: '.tbl-item' + ,panelPath: '.jplist-panel' + + //save plugin state + ,storage: 'localstorage' //'', 'cookies', 'localstorage' + ,storageName: 'jplist-table-2' + + ,redrawCallback: function(){ + $('.tbl-item').each(function(index, el){ + if(index%2 === 0){ + $(el).addClass('even'); + } + else{ + $(el).addClass('odd'); + } + }); + } + }); + + $('#grid-layout-first-table').jplist({ + itemsBox: '.demo-tbl' + ,itemPath: '.tbl-item' + ,panelPath: '.jplist-panel' + }); + + $('#grid-layout-second-table').jplist({ + itemsBox: '.demo-tbl' + ,itemPath: '.tbl-item' + ,panelPath: '.jplist-panel' + }); + + $('#grid-layout-ul-li').jplist({ + + itemsBox: '.ul-li-list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + + //save plugin state + ,storage: 'localstorage' //'', 'cookies', 'localstorage' + ,storageName: 'jplist-ul-li' + }); + + + $('#grid-filter-with-ul-li').jplist({ + + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + + //save plugin state + ,storage: 'localstorage' //'', 'cookies', 'localstorage' + ,storageName: 'drop-down-filters-ul-li' + }); + + $('#grid-filter-with-select').jplist({ + + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + }); + + $('#grid-double-sort').jplist({ + + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + }); + + $('#grid-deep-linking').jplist({ + + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + + //deep linking + ,deepLinking: true + }); + + $('#grid-pagination-only').jplist({ + + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + }); + + $('#grid-without-item-per-page').jplist({ + + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + }); + + $('#grid-hidden-sort').jplist({ + + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + }); + + $('#grid-range-slider').jplist({ + + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + + ,controlTypes: { + + //likes range slider + 'range-slider-likes': { + className: 'RangeSlider' + ,options: { + + //jquery ui range slider + ui_slider: function($slider, $prev, $next){ + + $slider.slider({ + min: 0 + ,max: 350 + ,range: true + ,values: [0, 350] + ,slide: function(event, ui){ + $prev.text(ui.values[0] + ' likes'); + $next.text(ui.values[1] + ' likes'); + } + }); + } + + ,set_values: function($slider, $prev, $next){ + + $prev.text($slider.slider('values', 0) + ' likes'); + $next.text($slider.slider('values', 1) + ' likes'); + } + } + } + + //prices range slider + ,'range-slider-prices': { + className: 'RangeSlider' + ,options: { + + //jquery ui range slider + ui_slider: function($slider, $prev, $next){ + + $slider.slider({ + min: 0 + ,max: 100 + ,range: true + ,values: [0, 100] + ,slide: function(event, ui){ + $prev.text('$' + ui.values[0]); + $next.text('$' + ui.values[1]); + } + }); + } + + ,set_values: function($slider, $prev, $next){ + + $prev.text('$' + $slider.slider('values', 0)); + $next.text('$' + $slider.slider('values', 1)); + } + } + } + + //views range slider + ,'range-slider-views': { + className: 'RangeSlider' + ,options: { + + //jquery ui range slider + ui_slider: function($slider, $prev, $next){ + + $slider.slider({ + min: 0 + ,max: 4000 + ,range: true + ,values: [0, 4000] + ,slide: function(event, ui){ + $prev.text(ui.values[0] + ' views'); + $next.text(ui.values[1] + ' views'); + } + }); + } + + ,set_values: function($slider, $prev, $next){ + + $prev.text($slider.slider('values', 0) + ' views'); + $next.text($slider.slider('values', 1) + ' views'); + } + } + } + } + }); + + $('#grid-datepicker').jplist({ + + itemsBox: '.list' + ,itemPath: '.list-item' + ,panelPath: '.jplist-panel' + + //save plugin state + ,storage: 'localstorage' //'', 'cookies', 'localstorage' + ,storageName: 'date-picker-range-filter' + + ,controlTypes: { + 'date-picker-range-filter': { + className: 'DatePickerRangeFilter' + ,options: { + + datepicker: function(input, options){ + + //set options + options.dateFormat = 'mm/dd/yy' + + input.datepicker(options); + } + } + } + } + }); + +}); \ No newline at end of file diff --git a/src/main/webapp/static/script/jplist.min.js b/src/main/webapp/static/script/jplist.min.js new file mode 100644 index 0000000..b27ca38 --- /dev/null +++ b/src/main/webapp/static/script/jplist.min.js @@ -0,0 +1,145 @@ +/* + jPList - jQuery Data Grid Controls 5.1.35 - http://jplist.com + Copyright 2014 Miriam Zusin. All rights reserved. + For non-commercial, personal, or open source projects and applications, you may use jPList for free under the terms of the GPL V3 License (https://gnu.org/licenses/gpl.html) + If your project generates any type of income, e.g. sells products, ads, services or just represents a commercial company, you should get a commercial license at http://www.binpress.com +*/ +(function(){var b=function(b,c){var a=jQuery({});a.$root=c;a.events={renderStatusesEvent:"1",setStatusesEvent:"2",forceRenderStatusesEvent:"3",restoreEvent:"4",statusEvent:"5",sortEvent:"6",filterEvent:"7",paginationEvent:"8",changeUrlDeepLinksEvent:"9",setDeepLinksEvent:"10",addItemEvent:"11",delItemEvent:"12",collectionReadyEvent:"13",animationStartEvent:"14",animationStepEvent:"15",animationCompleteEvent:"16",renderList:"17"};a={controller:null,observer:a,events:null,panel:null,$root:c};a.options= +jQuery.extend(!0,{debug:!1,itemsBox:".list",itemPath:".list-item",panelPath:".panel",noResults:".jplist-no-results",redrawCallback:"",iosBtnPath:".jplist-ios-button",animateToTop:"html, body",animateToTopDuration:0,effect:"",duration:300,fps:24,storage:"",storageName:"jplist",cookiesExpiration:-1,deepLinking:!1,delimiter0:":",delimiter1:"|",delimiter2:"~",delimiter3:"!",historyLength:10,dataSource:{type:"html",server:{ajax:{url:"server.php",dataType:"html",type:"POST"},serverOkCallback:null,serverErrorCallback:null}, +render:null},controlTypes:{"default-sort":{className:"DefaultSort",options:{}},"drop-down":{className:"Dropdown",options:{}},"pagination-info":{className:"PaginationInfo",options:{}},counter:{className:"Counter",options:{ignore:"[~!@#$%^&*()+=`'\"/\\_]+"}},pagination:{className:"Pagination",options:{range:7,jumpToStart:!1,prevArrow:"‹",nextArrow:"›",firstArrow:"«",lastArrow:"»"}},reset:{className:"Reset",options:{}},select:{className:"Select",options:{}},textbox:{className:"Textbox", +options:{eventName:"keyup",ignore:"[~!@#$%^&*()+=`'\"/\\_]+"}},views:{className:"Views",options:{}},"checkbox-group-filter":{className:"CheckboxGroupFilter",options:{}},"checkbox-text-filter":{className:"CheckboxTextFilter",options:{ignore:""}},"button-filter":{className:"ButtonFilter",options:{}},"button-filter-group":{className:"ButtonFilterGroup",options:{}},"button-text-filter":{className:"ButtonTextFilter",options:{ignore:"[~!@#$%^&*()+=`'\"/\\_]+"}},"button-text-filter-group":{className:"ButtonTextFilterGroup", +options:{ignore:"[~!@#$%^&*()+=`'\"/\\_]+"}},"radio-buttons-filters":{className:"RadioButtonsFilter",options:{}},"range-filter":{className:"RangeSliderToggleFilter",options:{}},"back-button":{className:"BackButton",options:{}},preloader:{className:"Preloader",options:{}}}},b);a.history=new jQuery.fn.jplist.app.History(a.$root,a.options,a.observer);a.panel=new jQuery.fn.jplist.ui.panel.controllers.PanelController(c,a.options,a.history,a.observer);a.options.dataSource=a.options.dataSource||{};a.options.dataSource.type= +a.options.dataSource.type||"html";jQuery.fn.jplist.info(a.options,"Data Source Type: ",a.options.dataSource.type);switch(a.options.dataSource.type){case "html":new jQuery.fn.jplist.ui.list.controllers.DOMController(a.$root,a.options,a.observer,a.panel,a.history);break;case "server":jQuery.fn.jplist.info(a.options,"Data Source: ",a.options.dataSource),new jQuery.fn.jplist.ui.list.controllers.ServerController(a.$root,a.options,a.observer,a.panel,a.history)}var e=[],d=!1;a.options.deepLinking?(jQuery.fn.jplist.info(a.options, +"Deep linking enabled",""),a.observer.trigger(a.observer.events.setDeepLinksEvent,[])):(d="cookies"===a.options.storage||"localstorage"===a.options.storage&&jQuery.fn.jplist.dal.services.LocalStorageService.supported())?(jQuery.fn.jplist.info(a.options,"Storage enabled: ",a.options.storage),"cookies"===a.options.storage&&(e=jQuery.fn.jplist.dal.services.CookiesService.restoreCookies(a.options.storageName)),"localstorage"===a.options.storage&&jQuery.fn.jplist.dal.services.LocalStorageService.supported()&& +(e=jQuery.fn.jplist.dal.services.LocalStorageService.restore(a.options.storageName)),0this.options.historyLength&&this.statusesQueue.shift()};b.prototype.getLastStatus=function(){var b=null;0this.options.historyLength&&this.listStatusesQueue.shift()};b.prototype.popList=function(){var b=null;0f-1&&(b=0);this.currentPage=b;this.start=this.currentPage*this.itemsOnPage;b=this.itemsNumber;f=this.start+this.itemsOnPage;f>b&&(f=b);this.end=f;b=this.currentPage;this.prevPage=0>=b?0:b-1;b=this.currentPage; +f=this.pagesNumber;this.nextPage=0===f?0:b>=f-1?f-1:b+1}})();(function(){jQuery.fn.jplist.domain.dom.services.PaginationGoogleService=function(b,f,c){c=Number(c);isNaN(c)&&(c=0);c=this.itemsNumber=c;null===f?f=c:(f=Number(f),isNaN(f)&&(f=c));this.itemsOnPage=f;f=(f=this.itemsOnPage)?Math.ceil(this.itemsNumber/f):0;f=this.pagesNumber=f;b=Number(b);isNaN(b)&&(b=0);b>f-1&&(b=0);this.currentPage=b;this.start=this.currentPage*this.itemsOnPage;b=this.itemsNumber;f=this.start+this.itemsOnPage;f>b&&(f=b);this.end=f;b=this.currentPage;this.prevPage=0>=b?0:b-1;b=this.currentPage; +f=this.pagesNumber;this.nextPage=0===f?0:b>=f-1?f-1:b+1}})();(function(){jQuery.fn.jplist.domain.dom.services.FiltersService.autocompleteFilter=function(b,f,c,a,e){var d=[],g,k;if(jQuery.isNumeric(b)&&jQuery.isNumeric(f)&&google&&jQuery.fn.jlocator&&jQuery.fn.jlocator.store){b=new google.maps.LatLng(b,f);for(var l=0;l=n&&q<=p&&h.push(m);return h}})();(function(){jQuery.fn.jplist.domain.dom.services.FiltersService.pagerFilter=function(b,f){return f.slice(b.start,b.end)}})();(function(){jQuery.fn.jplist.domain.dom.services.FiltersService.pathFilter=function(b,f){for(var c,a,e=[],d=0;d=b.length)return f;for(e=0;e=e&&g<=d&&c.push(a):k&&!l?g>=e&&c.push(a):!k&&l&&g<=d&&c.push(a));return c}})();(function(){jQuery.fn.jplist.domain.dom.services.FiltersService.textFilter=function(b,f,c,a){for(var e,d,g=[],k,l=0;l=d.length)return c;for(a=0;a=b.length)return e;k=new jQuery.fn.jplist.domain.dom.models.DataItemMemberPathModel(c,null);for(var n=0;ne?1:-1:ab?1:-1:e"+d;return a+=""};jQuery.fn.jplist.domain.dom.services.HelperService.removeCharacters=function(b,a){return!b?"":b.replace(RegExp(a,"ig"),"").toLowerCase()};jQuery.fn.jplist.domain.dom.services.HelperService.formatDateTime=function(c,a){var e,d,g,k,l,h;a=a.replace(/\./g,"\\.");a=a.replace(/\(/g,"\\(");a=a.replace(/\)/g,"\\)");a=a.replace(/\[/g,"\\[");a=a.replace(/\]/g,"\\]");e= +a.replace("{year}","(.*)");(d=f(e,c))&&(d=b("{year}",d));e=a.replace("{day}","(.*)");(k=f(e,c))&&(k=b("{day}",k));e=a.replace("{month}","(.*)");(g=f(e,c))&&(g=b("{month}",g));e=a.replace("{hour}","(.*)");(l=f(e,c))&&(l=b("{hour}",l));e=a.replace("{min}","(.*)");(h=f(e,c))&&(h=b("{min}",h));e=a.replace("{sec}","(.*)");(e=f(e,c))&&(e=b("{sec}",e));if(!d||isNaN(d))d=1900;if(!g||isNaN(g))g=0;if(!k||isNaN(k))k=1;if(!l||isNaN(l))l=0;if(!h||isNaN(h))h=0;if(!e||isNaN(e))e=0;return new Date(d,g,k,l,h,e)}})();(function(){jQuery.fn.jplist.domain.server.models.DataItemModel=function(b,f,c){this.content="";this.dataType=f;this.count=0;this.responseText=c;this.dataType||(this.dataType="html");switch(this.dataType){case "html":f=jQuery(b);0a.progress?f(a,e):b(a)},a.delay):b(a)},c=function(a,e,d){a={$scene:a,options:e,observer:d,start:null,progress:0,delay:null,handler:null};a.delay=1E3/a.options.fps;return jQuery.extend(this,a)};c.prototype.play=function(a){f(this,a)};c.prototype.stop=function(){b(this)};jQuery.fn.jplist.animation.Timeline=function(a,e,d){return new c(a,e,d)}})();(function(){jQuery.fn.jplist.animation.fade={};jQuery.fn.jplist.animation.fade.before=function(b,f,c,a){};jQuery.fn.jplist.animation.fade.effect=function(b,f,c,a,e){f.find(b.itemPath).css({opacity:(100-e)/100})};jQuery.fn.jplist.animation.fade.after=function(b,f,c,a){f.empty();a.css({opacity:1});f.append(a)}})();(function(){var b=function(a,d,g,b){a.observer.trigger(a.observer.events.setStatusesEvent,[g,d]);jQuery.isFunction(a.options.redrawCallback)&&a.options.redrawCallback(d,b,g)},f=function(a,d,g){var c=d.dataitemsToJqueryObject(),f=d.dataviewToJqueryObject(),h=!1,m,n=jQuery.extend(!0,{},a.options,{duration:0});0>=c.length||0>=f.length?(a.$noResults.removeClass("jplist-hidden"),a.$itemsBox.addClass("jplist-hidden"),b(a,d,g,f)):(a.$noResults.addClass("jplist-hidden"),a.$itemsBox.removeClass("jplist-hidden"), +a.options.effect?(a.history&&(m=a.history.getLastStatus())&&!m.inAnimation&&(h=!0),h=h?n:a.options,jQuery.fn.jplist.animation.drawItems(h,a.$itemsBox,c,f,a.options.effect,a.timeline,function(){b(a,d,g,f)},a.observer)):(c.detach(),a.$itemsBox.append(f),b(a,d,g,f)))},c=function(a){a.observer.on(a.observer.events.renderList,function(d,g,b){f(a,g,b)})},a=function(a,d,g,b){a={options:d,$root:a,observer:g,history:b,timeline:null,timelineZero:null,$itemsBox:a.find(d.itemsBox).eq(0),$noResults:a.find(d.noResults)}; +a.options.effect&&(a.timeline=new jQuery.fn.jplist.animation.Timeline(a.$root,a.options,a.observer));c(a);return jQuery.extend(this,a)};jQuery.fn.jplist.ui.list.views.DOMView=function(e,d,g,b){return new a(e,d,g,b)}})();(function(){var b=function(b){b.observer.on(b.observer.events.renderStatusesEvent,function(a,e){b.storage.save(e);b.collection&&b.collection.applyStatuses(e);b.options.deepLinking&&b.observer.trigger(b.observer.events.changeUrlDeepLinksEvent,[])})},f=function(c,a,e,d,g){c={options:a,observer:e,$root:c,history:g,storage:new jQuery.fn.jplist.dal.Storage(c,a,e),collection:null,listView:null};c.listView=new jQuery.fn.jplist.ui.list.views.DOMView(c.$root,c.options,c.observer,c.history);d=d.paths;a=c.$root.find(c.options.itemsBox).eq(0).find(c.options.itemPath); +d=new jQuery.fn.jplist.domain.dom.collections.DataItemsCollection(c.options,c.observer,a,d);c.collection=d;b(c);return jQuery.extend(this,c)};jQuery.fn.jplist.ui.list.controllers.DOMController=function(b,a,e,d,g){return new f(b,a,e,d,g)}})();(function(){var b=function(b){b.observer.on(b.observer.events.renderList,function(a,e,d){var g="html";b.options.dataSource&&(b.options.dataSource.server&&b.options.dataSource.server.ajax)&&((g=b.options.dataSource.server.ajax.dataType)||(g="html"));b.storage.save(d);jQuery.fn.jplist.dal.services.URIService.get(d,b.options,function(a,e,d,f){a=new jQuery.fn.jplist.domain.server.models.DataItemModel(a,g,f.responseText);var n;d=(new jQuery.fn.jplist.app.dto.StatusesDTOCollection(b.options,b.observer, +e)).getStatusesByAction("paging",e);for(f=0;fb?a.addClass("jplist-sticky"):a.removeClass("jplist-sticky"))},f=function(a,e){e.each(function(){var a=jQuery(this),e=a.offset().top;a.data("top",e);b(a)});jQuery(window).scroll(function(){e.each(function(){b(jQuery(this))})})},c=function(a){a.observer.on(a.observer.events.setStatusesEvent,function(e,b,c){a.controls.setStatuses(b,!1);a.history.addList(b);jQuery.fn.jplist.info(a.options,"Set statuses event: ", +b)});a.observer.on(a.observer.events.forceRenderStatusesEvent,function(e,b){var c;c=a.controls.getStatuses(b);jQuery.fn.jplist.info(a.options,"Force render statuses event: ",c);a.observer.trigger(a.observer.events.renderStatusesEvent,[c])});a.observer.on(a.observer.events.restoreEvent,function(e,b){a.controls.setStatuses(b,!0);jQuery.fn.jplist.info(a.options,"Restore from storage event: ",b);a.observer.trigger(a.observer.events.renderStatusesEvent,[b])});a.observer.on(a.observer.events.statusEvent, +function(e,b){var c;b.isAnimateToTop&&(c=jQuery(a.options.animateToTop).offset().top,jQuery("html, body").animate({scrollTop:c},a.options.animateToTopDuration));c=a.controls.merge(!1,b);jQuery.fn.jplist.info(a.options,"Status event: ",c);a.observer.trigger(a.observer.events.renderStatusesEvent,[c])});a.observer.on(a.observer.events.changeUrlDeepLinksEvent,function(e){e="";if(a.options.deepLinking){e=a.controls.getDeepLinksUrl();jQuery.fn.jplist.info(a.options,"Change url (deep links event): ",e); +e=jQuery.trim(e.replace("#",""));var b;e=""===e?"#":"#"+e;window.location.hash!==e&&(b=window.location.href.indexOf("#"),e=-1==b?window.location.href+e:window.location.href.substring(0,b)+e,"replaceState"in window.history?window.history.replaceState("","",e):window.location.replace(e))}});a.observer.on(a.observer.events.setDeepLinksEvent,function(e){var b=window.decodeURIComponent(jQuery.trim(window.location.hash.replace("#",""))),c=!1;e=[];var c=[],f,m=[],n;if(a.options.deepLinking&&""!==jQuery.trim(b)){c= +b.split(a.options.delimiter1);for(b=0;b=m.length?(c="cookies"===a.options.storage||"localstorage"===a.options.storage&&jQuery.fn.jplist.dal.services.LocalStorageService.supported())?("cookies"===a.options.storage&&(e=jQuery.fn.jplist.dal.services.CookiesService.restoreCookies(a.options.storageName)), +"localstorage"===a.options.storage&&jQuery.fn.jplist.dal.services.LocalStorageService.supported()&&(e=jQuery.fn.jplist.dal.services.LocalStorageService.restore(a.options.storageName)),0=c.length&&(c=a.$control.find("li:eq(0)"))):c=a.$control.find(".active"),c=c.find("span"),a.action){case "paging":b=new jQuery.fn.jplist.ui.controls.DropdownPaginationDTO(c.attr("data-number"));b=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,b,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking);break;case "sort":(b= +a.$control.attr("data-datetime-format"))||(b="");(f=a.$control.attr("data-ignore"))||(f="");b=new jQuery.fn.jplist.ui.controls.DropdownSortDTO(c.attr("data-path"),c.attr("data-type"),c.attr("data-order"),b,f);b=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,b,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking);break;case "filter":b=new jQuery.fn.jplist.ui.controls.DropdownFilterDTO(c.attr("data-path"),c.attr("data-type")),b=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action, +a.type,b,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking)}return b},f=function(a,d){var b,c,f;a.$control.find("span").each(function(){b=jQuery(this).attr("data-path");c=jQuery(this).attr("data-type");b&&""!==jQuery.trim(b)&&(f=new jQuery.fn.jplist.domain.dom.models.DataItemMemberPathModel(b,c),d.push(f))})},c=function(a){var d=jQuery(document).find('[data-control-type="drop-down"]');jQuery(document).click(function(){d.find("ul").hide()});jQuery(document).off("jplist_dropdown_close").on("jplist_dropdown_close", +function(a,e){d.each(function(){jQuery(this).is(e)||jQuery(this).find("ul").hide()})});a.$control.find(".jplist-dd-panel").off().click(function(a){var e;a.stopPropagation();a=jQuery(this).parents("[data-control-type]");e=a.find("ul");jQuery(document).trigger("jplist_dropdown_close",[a]);e.is(":visible")?e.hide():e.show()});a.$control.find("li").off().click(function(){var d,c,f,h;d=b(a,!1);h=jQuery(this).find("span");c=h.attr("data-path");f=h.attr("data-number");c?(d.data.path=c,d.data.type=h.attr("data-type"), +d.data.order=h.attr("data-order")):f&&(d.data.number=f);a.history.addStatus(d);a.observer.trigger(a.observer.events.statusEvent,[d])})},a=function(a){var d;d=a.$control.find("li:eq(0)");d.addClass("active");d=d.find("span");0>=a.$control.find(".jplist-dd-panel").length&&a.$control.prepend('
    '+d.text()+"
    ");c(a);return jQuery.extend(this,a)};a.prototype.getStatus=function(a){return b(this,a)};a.prototype.getDeepLink=function(){var a="",d;if(this.inDeepLinking&&(d=b(this, +!1),d.data))switch(this.action){case "paging":if(jQuery.isNumeric(d.data.number)||"all"===d.data.number)a=this.name+this.options.delimiter0+"number="+d.data.number;break;case "sort":d.data.path&&(d.data.type&&d.data.order)&&(a=this.name+this.options.delimiter0+"path"+this.options.delimiter2+"type"+this.options.delimiter2+"order="+d.data.path+this.options.delimiter2+d.data.type+this.options.delimiter2+d.data.order);break;case "filter":d.data.path&&(a=this.name+this.options.delimiter0+"path="+d.data.path)}return a}; +a.prototype.getStatusByDeepLink=function(a,d){var g;a:{g=null;var c;if(this.inDeepLinking){if("number"!==a&&a!=="path"+this.options.delimiter2+"type"+this.options.delimiter2+"order"&&"path"!==a){g=null;break a}g=b(this,!0);if(g.data)switch(this.action){case "paging":"number"===a&&jQuery.isNumeric(g.data.number)&&(g.data.number=d);break;case "sort":a==="path"+this.options.delimiter2+"type"+this.options.delimiter2+"order"&&(c=d.split(this.options.delimiter2),3===c.length&&(g.data.path=c[0],g.data.type= +c[1],g.data.order=c[2]));break;case "filter":"path"===a&&g.data.path&&(g.data.path=d)}}}return g};a.prototype.getPaths=function(a){f(this,a)};a.prototype.setStatus=function(a,d){var b;b=null;var c;this.inStorage&&d&&this.$control.data("storage-status",a);!this.inStorage&&d&&(c=this.$control.find('li:has(span[data-default="true"])').eq(0),0>=c.length&&(c=this.$control.find("li:eq(0)")),b=c.find("span"));c=this.$control.find("li");switch(this.action){case "filter":!this.inStorage&&d&&0=b.length&&(b=c.eq(0)),b.addClass("active"),this.$control.find(".jplist-dd-panel").text(b.eq(0).text()));break;case "sort":!this.inStorage&&d&&0=b.length&&(b=c.eq(0)),b.addClass("active"),this.$control.find(".jplist-dd-panel").text(b.eq(0).text()));break;case "paging":!this.inStorage&&d&&0=b.length&&(b=c.eq(0)),b.addClass("active"),this.$control.find(".jplist-dd-panel").text(b.eq(0).text()))}};jQuery.fn.jplist.ui.controls.Dropdown=function(e){return new a(e)}})();(function(){var b=function(a,d){var b,c=null,f="",h="";b=a.$control.data("storage-status");if(d&&b)c=b;else switch(d?(b=a.$control.find('option[data-default="true"]').eq(0),0>=b.length&&(b=a.$control.find("option").eq(0))):b=a.$control.find("option:selected"),a.action){case "paging":c=new jQuery.fn.jplist.ui.controls.DropdownPaginationDTO(b.attr("data-number"));c=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,c,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking);break;case "sort":f= +a.$control.attr("data-datetime-format")||"";h=a.$control.attr("data-ignore")||"";c=new jQuery.fn.jplist.ui.controls.DropdownSortDTO(b.attr("data-path"),b.attr("data-type"),b.attr("data-order"),f,h);c=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,c,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking);break;case "filter":c=new jQuery.fn.jplist.ui.controls.DropdownFilterDTO(b.attr("data-path"),b.attr("data-type")),c=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type, +c,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking)}return c},f=function(a,b){var c,f,l;a.$control.find("option").each(function(){c=jQuery(this).attr("data-path");f=jQuery(this).attr("data-type");c&&(l=new jQuery.fn.jplist.domain.dom.models.DataItemMemberPathModel(c,f),b.push(l))})},c=function(a){a.$control.change(function(){var d,c,f;d=b(a,!1);c=jQuery(this).find("option:selected");f=c.attr("data-path");c=c.attr("data-number");f?(d.data.path=f,d.data.type=jQuery(this).attr("data-type"), +d.data.order=jQuery(this).attr("data-order")):c&&(d.data.number=c);a.history.addStatus(d);a.observer.trigger(a.observer.events.statusEvent,[d])})},a=function(a){c(a);return jQuery.extend(this,a)};a.prototype.getStatus=function(a){return b(this,a)};a.prototype.getDeepLink=function(){var a="",d;if(this.inDeepLinking&&(d=b(this,!1),d.data))switch(this.action){case "paging":jQuery.isNumeric(d.data.number)&&(a=this.name+this.options.delimiter0+"number="+d.data.number);break;case "sort":d.data.path&&(d.data.type&& +d.data.order)&&(a=this.name+this.options.delimiter0+"path"+this.options.delimiter2+"type"+this.options.delimiter2+"order="+d.data.path+this.options.delimiter2+d.data.type+this.options.delimiter2+d.data.order);break;case "filter":d.data.path&&(a=this.name+this.options.delimiter0+"path="+d.data.path)}return a};a.prototype.getStatusByDeepLink=function(a,d){var c=null,f;if(this.inDeepLinking&&(c=b(this,!0),c.data))switch(this.action){case "paging":"number"===a&&jQuery.isNumeric(c.data.number)&&(c.data.number= +d);break;case "sort":a==="path"+this.options.delimiter2+"type"+this.options.delimiter2+"order"&&(f=d.split(this.options.delimiter2),3===f.length&&(c.data.path=f[0],c.data.type=f[1],c.data.order=f[2]));break;case "filter":"path"===a&&c.data.path&&(c.data.path=d)}return c};a.prototype.getPaths=function(a){f(this,a)};a.prototype.setStatus=function(a,b){var c;this.inStorage&&b&&this.$control.data("storage-status",a);switch(this.action){case "filter":if(!this.inStorage&&b)a.data.path="default",this.history.addStatus(a), +this.observer.trigger(this.observer.events.statusEvent,[a]);else if((c=this.$control.find('option[data-path="'+a.data.path+'"]'))&&0=d.length&&(d=a.$control.find("button").eq(0));d=b?0:Number(d.attr("data-number"))||0;if(c="true"===a.$control.attr("data-jump-to-start")||a.controlOptions.jumpToStart)(c=a.history.getLastStatus())&&("pagination"!==c.type&&"views"!==c.type)&&(d=0);c=Number(a.$control.attr("data-items-per-page"))||0;d=new jQuery.fn.jplist.ui.controls.PaginationDTO(d, +c);d=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,d,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking)}return d},f=function(a){a.$control.on("click","button",function(){var e,d=null;e=Number(jQuery(this).attr("data-number"))||0;d=b(a,!1);d.data.currentPage=e;a.history.addStatus(d);a.observer.trigger(a.observer.events.statusEvent,[d])})},c=function(a){a.params={view:new jQuery.fn.jplist.ui.controls.PaginationView(a.$control,a.controlOptions)};f(a);return jQuery.extend(this, +a)};c.prototype.getStatus=function(a){return b(this,a)};c.prototype.getDeepLink=function(){var a="",e;this.inDeepLinking&&(e=b(this,!1),e.data&&(jQuery.isNumeric(e.data.currentPage)&&(a=this.name+this.options.delimiter0+"currentPage="+e.data.currentPage),jQuery.isNumeric(e.data.number)&&(a=this.name+this.options.delimiter0+"number="+e.data.number)));return a};c.prototype.getStatusByDeepLink=function(a,e){var d;a:if(d=null,this.inDeepLinking){if("currentPage"!==a){d=null;break a}d=b(this,!0);d.data&& +"currentPage"===a&&(d.data.currentPage=e)}return d};c.prototype.setStatus=function(a,b){this.inStorage&&b&&this.$control.data("storage-status",a);!this.inStorage&&b?(a.data.currentPage=0,this.history.addStatus(a),this.observer.trigger(this.observer.events.statusEvent,[a])):a.data&&a.data.paging&&this.params.view.build(a.data.paging)};jQuery.fn.jplist.ui.controls.Pagination=function(a){return new c(a)}})();(function(){var b=function(b,a,e){var d;d='
    ';for(var g=b;g ";return d+"
    "},f=function(b,a){var e={$control:b,options:a,$pagingprev:null,$pagingmid:null,$pagingnext:null,$jplistFirst:null,$jplistPrev:null,$jplistNext:null,$jplistLast:null,mode:b.attr("data-mode")},d,g,f,l;d=e.$control.attr("data-prev")|| +e.options.prevArrow;g=e.$control.attr("data-next")||e.options.nextArrow;f=e.$control.attr("data-first")||e.options.firstArrow;l=e.$control.attr("data-last")||e.options.lastArrow;e.$control.html('
    ');e.$pagingprev=e.$control.find('[data-type="pagingprev"]');e.$pagingmid=e.$control.find('[data-type="pagingmid"]');e.$pagingnext= +e.$control.find('[data-type="pagingnext"]');e.$pagingprev.html('");e.$pagingnext.html('");e.$jplistFirst=e.$pagingprev.find('[data-type="first"]');e.$jplistPrev=e.$pagingprev.find('[data-type="prev"]'); +e.$jplistNext=e.$pagingnext.find('[data-type="next"]');e.$jplistLast=e.$pagingnext.find('[data-type="last"]');return jQuery.extend(this,e)};f.prototype.build=function(c){if(0<=c.currentPage&&c.currentPagea&&(a=0);e=a+e;e>c.pagesNumber&&(e=c.pagesNumber);a=b(a,e,c.currentPage);this.$pagingmid.html(a); +break;default:var d;d=Number(this.$control.attr("data-range"))||this.options.range;e=Math.floor(c.currentPage/d);a=d*(e+1);a>c.pagesNumber&&(a=c.pagesNumber);a=b(d*e,a,c.currentPage);this.$pagingmid.html(a)}this.$jplistPrev.attr("data-number",c.prevPage).removeClass("jplist-current");this.$jplistNext.attr("data-number",c.nextPage).removeClass("jplist-current");this.$jplistLast.attr("data-number",c.pagesNumber-1).removeClass("jplist-current");1>=c.pagesNumber?this.$control.addClass("jplist-one-page"): +this.$control.removeClass("jplist-one-page")}else this.$control.addClass("jplist-hidden");0===c.currentPage?this.$pagingprev.addClass("jplist-hidden"):this.$pagingprev.removeClass("jplist-hidden");c.currentPage==c.pagesNumber-1?this.$pagingnext.addClass("jplist-hidden"):this.$pagingnext.removeClass("jplist-hidden")};jQuery.fn.jplist.ui.controls.PaginationView=function(b,a){return new f(b,a)}})();(function(){jQuery.fn.jplist.ui.controls.PaginationDTO=function(b,f){var c={currentPage:b,paging:null};f&&(c.number=f);return c}})();(function(){var b=function(b){return jQuery.extend(this,b)};b.prototype.setStatus=function(b,c){var a,e;a=b.data.paging;!a||0>=a.pagesNumber?(this.$control.html(""),this.$control.addClass("jplist-empty")):(this.$control.removeClass("jplist-empty"),e=this.$control.attr("data-type"),e=e.replace("{current}",a.currentPage+1),e=e.replace("{pages}",a.pagesNumber),e=e.replace("{start}",a.start+1),e=e.replace("{end}",a.end),e=e.replace("{all}",a.itemsNumber),this.$control.html(e))};jQuery.fn.jplist.ui.controls.PaginationInfo= +function(f){return new b(f)}})();(function(){var b=function(b){b.$control.on("click",function(){b.observer.trigger(b.observer.events.forceRenderStatusesEvent,[!0])})},f=function(c){b(c);return jQuery.extend(this,c)};jQuery.fn.jplist.ui.controls.Reset=function(b){return new f(b)}})();(function(){var b=function(a,b){var d,c,f;d="";c=a.$control.data("storage-status");b&&c?d=c:(c=a.$control.attr("data-path"),f=b?"":a.$control.val(),a.controlOptions&&a.controlOptions.ignore&&(d=a.controlOptions.ignore),d=new jQuery.fn.jplist.ui.controls.TextboxDTO(c,f,d),d=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,d,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking));return d},f=function(a){var e="keyup";if(a.params.$button&&0'),a.$control.html(b),b=a.$control.find('[data-type="count-value"]'),a.$control.data("$countValue",b));d&&(b=new jQuery.fn.jplist.domain.dom.models.DataItemMemberPathModel(d, +null),a.$control.data("path",b));a.$control.data("dataMode",k);a.$control.data("dataType",l);a.$control.data("dataPath",d);a.$control.data("dataText",c);a.$control.data("dataMin",h);a.$control.data("dataMax",m);f(a);return jQuery.extend(this,a)};jQuery.fn.jplist.ui.controls.Counter=function(a){return new c(a)}})();(function(){var b=function(a){var b,d={},c,k;b=a.controlOptions;c=a.$control.find('[data-type="prev"]');k=a.$control.find('[data-type="next"]');a.$control.data("jplist-datepicker-range-prev",c);a.$control.data("jplist-datepicker-range-next",k);c.off().change(function(){""===jQuery.trim(jQuery(this).val())&&(a.history.addStatus(f(a,!1)),a.observer.trigger(a.observer.events.forceRenderStatusesEvent,[!1]))});k.off().change(function(){""===jQuery.trim(jQuery(this).val())&&(a.history.addStatus(f(a,!1)), +a.observer.trigger(a.observer.events.forceRenderStatusesEvent,[!1]))});d.onSelect=function(b,d){a.history.addStatus(f(a,!1));a.observer.trigger(a.observer.events.forceRenderStatusesEvent,[!1])};b&&(b.datepicker(c,d),b.datepicker(k,d))},f=function(a,b){var d=null,c=d=d=null,f,l,h,m;f=a.$control.data("storage-status");b&&f?d=f:(m=a.$control.attr("data-path").toString(),f=a.$control.attr("data-datetime-format").toString(),l=a.$control.data("jplist-datepicker-range-prev"),h=a.$control.data("jplist-datepicker-range-next"), +b||(d=l.datepicker("getDate"),c=h.datepicker("getDate")),d=new jQuery.fn.jplist.ui.controls.DatePickerRangeFilterDTO(m,f,d,c),d=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,d,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking));return d},c=function(a){b(a);return jQuery.extend(this,a)};c.prototype.getStatus=function(a){return f(this,a)};c.prototype.getDeepLink=function(){var a="",b;this.inDeepLinking&&(b=f(this,!1),b.data&&(jQuery.isNumeric(b.data.prev_year)&&(jQuery.isNumeric(b.data.prev_month)&& +jQuery.isNumeric(b.data.prev_day))&&(a+=this.name+this.options.delimiter0+"prev="+b.data.prev_year+this.options.delimiter2+b.data.prev_month+this.options.delimiter2+b.data.prev_day),jQuery.isNumeric(b.data.next_year)&&(jQuery.isNumeric(b.data.next_month)&&jQuery.isNumeric(b.data.next_day))&&(""!==a&&(a+=this.options.delimiter1),a+=this.name+this.options.delimiter0+"next="+b.data.next_year+this.options.delimiter2+b.data.next_month+this.options.delimiter2+b.data.next_day)));return a};c.prototype.getStatusByDeepLink= +function(a,b){var d=null,c;if(this.inDeepLinking&&(d=f(this,!0),d.data))switch(a){case "prev":c=b.split(this.options.delimiter2);3===c.length&&(d.data.prev_year=c[0],d.data.prev_month=c[1],d.data.prev_day=c[2]);break;case "next":c=b.split(this.options.delimiter2),3===c.length&&(d.data.next_year=c[0],d.data.next_month=c[1],d.data.next_day=c[2])}return d};c.prototype.getPaths=function(a){var b;if(b=this.$control.attr("data-path").toString())b=new jQuery.fn.jplist.domain.dom.models.DataItemMemberPathModel(b, +"datetime"),a.push(b)};c.prototype.setStatus=function(a,b){var d,c,f;this.inStorage&&b&&this.$control.data("storage-status",a);c=this.$control.data("jplist-datepicker-range-prev");f=this.$control.data("jplist-datepicker-range-next");jQuery.isNumeric(a.data.prev_year)&&jQuery.isNumeric(a.data.prev_month)&&jQuery.isNumeric(a.data.prev_day)?(d=new Date(a.data.prev_year,a.data.prev_month,a.data.prev_day),c.datepicker("setDate",d)):c.val("");jQuery.isNumeric(a.data.next_year)&&jQuery.isNumeric(a.data.next_month)&& +jQuery.isNumeric(a.data.next_day)?(d=new Date(a.data.next_year,a.data.next_month,a.data.next_day),f.datepicker("setDate",d)):f.val("")};jQuery.fn.jplist.ui.controls.DatePickerRangeFilter=function(a){return new c(a)}})();(function(){jQuery.fn.jplist.ui.controls.DatePickerRangeFilterDTO=function(b,f,c,a){b={path:b,format:f,filterType:"dateRange",prev_year:"",prev_month:"",prev_day:"",next_year:"",next_month:"",next_day:""};c&&(b.prev_year=c.getFullYear(),b.prev_month=c.getMonth(),b.prev_day=c.getDate());a&&(b.next_year=a.getFullYear(),b.next_month=a.getMonth(),b.next_day=a.getDate());return b}})();(function(){var b=function(a,b){var d=null,c,f,l,h;b&&a.params.storageStatus?d=a.params.storageStatus:(d=a.$control.attr("data-path").toString(),c=a.params.$uiSlider.slider("option","min"),f=a.params.$uiSlider.slider("option","max"),b?(l=c,h=f):(l=a.params.$uiSlider.slider("values",0),h=a.params.$uiSlider.slider("values",1)),d=new jQuery.fn.jplist.ui.controls.RangeSliderDTO(d,c,f,l,h),d=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,d,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking)); +return d},f=function(a){a.params.$uiSlider.on("slidechange",function(e,d){a.history.addStatus(b(a,!1));a.observer.trigger(a.observer.events.forceRenderStatusesEvent,[!1])})},c=function(a){a.params={$uiSlider:a.$control.find('[data-type="ui-slider"]'),$prev:a.$control.find('[data-type="prev-value"]'),$next:a.$control.find('[data-type="next-value"]'),controlOptions:a.controlOptions,storageStatus:null};a.params.controlOptions&&(a.params.controlOptions.ui_slider(a.params.$uiSlider,a.params.$prev,a.params.$next), +a.params.controlOptions.set_values(a.params.$uiSlider,a.params.$prev,a.params.$next));f(a);return jQuery.extend(this,a)};c.prototype.getStatus=function(a){return b(this,a)};c.prototype.getDeepLink=function(){var a="",e;this.inDeepLinking&&(e=b(this,!1),e.data&&(jQuery.isNumeric(e.data.prev)&&jQuery.isNumeric(e.data.next))&&(a=this.name+this.options.delimiter0+"prev"+this.options.delimiter2+"next="+e.data.prev+this.options.delimiter2+e.data.next));return a};c.prototype.getStatusByDeepLink=function(a, +e){var d=null,c;this.inDeepLinking&&(d=b(this,!0),d.data&&a==="prev"+this.options.delimiter2+"next"&&(c=e.split(this.options.delimiter2),2===c.length&&(d.data.prev=c[0],d.data.next=c[1])));return d};c.prototype.getPaths=function(a){var b;if(b=this.$control.attr("data-path").toString())b=new jQuery.fn.jplist.domain.dom.models.DataItemMemberPathModel(b,"number"),a.push(b)};c.prototype.setStatus=function(a,b){var d,c;this.inStorage&&b&&(this.params.storageStatus=a);jQuery.isNumeric(a.data.prev)&&jQuery.isNumeric(a.data.next)&& +(d=Number(a.data.prev),c=Number(a.data.next),!isNaN(d)&&!isNaN(c)&&(this.params.$uiSlider.slider("values",0)!=d&&this.params.$uiSlider.slider("values",0,d),this.params.$uiSlider.slider("values",1)!=c&&this.params.$uiSlider.slider("values",1,c)));this.params.controlOptions&&this.params.controlOptions.set_values(this.params.$uiSlider,this.params.$prev,this.params.$next)};jQuery.fn.jplist.ui.controls.RangeSlider=function(a){return new c(a)}})();(function(){jQuery.fn.jplist.ui.controls.RangeSliderDTO=function(b,f,c,a,e){return{path:b,type:"number",filterType:"range",min:f,max:c,prev:a,next:e}}})();(function(){var b=function(a,b){var d,c;c="";d=a.$control.data("storage-status");b&&d?c=d:((d=b?"true"===a.$control.attr("data-selected"):a.params.selected)&&(c="path"),c={path:a.$control.attr("data-path"),filterType:c,selected:d},c=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,c,a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking));return c},f=function(a){a.$control.on("click",function(){a.params.selected=!a.params.selected;a.history.addStatus(b(a,!1));a.observer.trigger(a.observer.events.forceRenderStatusesEvent, +[!1])})},c=function(a){a.params={selected:"true"===a.$control.attr("data-selected")};a.options.deepLinking&&(a.params.selected=!1);f(a);return jQuery.extend(this,a)};c.prototype.getStatus=function(a){return b(this,a)};c.prototype.getDeepLink=function(){var a="",c=null;this.inDeepLinking&&(c=b(this,!1),c.data&&c.data.selected&&(a=this.name+this.options.delimiter0+"selected=true"));return a};c.prototype.getStatusByDeepLink=function(a,c){var d=null,f;if(this.inDeepLinking&&(d=b(this,!1),d.data&&(f="selected"=== +a&&"true"===c)))d.data.selected=f,d.data.filterType="path";return d};c.prototype.getPaths=function(a){var b;if(b=this.$control.attr("data-path"))b=new jQuery.fn.jplist.domain.dom.models.DataItemMemberPathModel(b,"text"),a.push(b)};c.prototype.setStatus=function(a,b){this.inStorage&&b&&this.$control.data("storage-status",a);(this.params.selected=a.data.selected)?this.$control.addClass("jplist-selected"):this.$control.removeClass("jplist-selected")};jQuery.fn.jplist.ui.controls.ButtonFilter=function(a){return new c(a)}})();(function(){var b=function(a,b){var d,c=[],e,f,p;d=a.$control.data("storage-status");b&&d||a.params.$buttons.each(function(a,d){e=jQuery(d);if(p=b?"true"===e.attr("data-selected"):e.data("selected")||!1)(f=e.attr("data-path"))&&c.push(f)});return d=new jQuery.fn.jplist.app.dto.StatusDTO(a.name,a.action,a.type,{pathGroup:c,filterType:"pathGroup"},a.inStorage,a.inAnimation,a.isAnimateToTop,a.inDeepLinking)},f=function(a,b){var d,c;a.params.$buttons.each(function(a,e){if(d=jQuery(e).attr("data-path"))c= +new jQuery.fn.jplist.domain.dom.models.DataItemMemberPathModel(d,"text"),b.push(c)})},c=function(a,b,d){var c;a.params.$buttons.each(function(a,b){c=jQuery(b);c.removeClass("jplist-selected");c.data("selected",!1)});if(b.data&&b.data.pathGroup&&jQuery.isArray(b.data.pathGroup)&&0=a.history.statusesQueue.length?a.$control.addClass("jplist-disabled"):a.$control.removeClass("jplist-disabled")},f=function(a){a.observer.on(a.observer.events.setStatusesEvent,function(c,d,f){b(a)});a.$control.on("click",function(){var c,d,f;a.history.popStatus();a.history.popList();c=a.history.getLastStatus();if((f=a.history.getLastList()||[])&&c){for(var k=0;k)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
    ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
    a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("