diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..a45eb6b --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,118 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if (mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if (mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if (!outputFile.getParentFile().exists()) { + if (!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..2cc7d4a Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..642d572 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/jieyue.sql b/jieyue.sql new file mode 100644 index 0000000..1d80a68 --- /dev/null +++ b/jieyue.sql @@ -0,0 +1,390 @@ +/* + Navicat Premium Data Transfer + + Source Server : MySQL + Source Server Type : MySQL + Source Server Version : 50716 + Source Host : localhost:3306 + Source Schema : jieyue + + Target Server Type : MySQL + Target Server Version : 50716 + File Encoding : 65001 + + Date: 22/04/2021 14:57:16 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for sys_access +-- ---------------------------- +DROP TABLE IF EXISTS `sys_access`; +CREATE TABLE `sys_access` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '权限名称', + `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '权限对应的地址', + `status` tinyint(3) NOT NULL DEFAULT 1 COMMENT '1启用 0未启用', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_access +-- ---------------------------- +INSERT INTO `sys_access` VALUES (1, '权限管理页面', '/admin/rbac', 1); +INSERT INTO `sys_access` VALUES (2, '后台主页', '/admin/home', 1); +INSERT INTO `sys_access` VALUES (3, '广告设置页面', '/admin/ui', 1); +INSERT INTO `sys_access` VALUES (4, '订单列表页面', '/admin/order', 1); +INSERT INTO `sys_access` VALUES (5, '商户列表页面', '/admin/merchant/', 1); +INSERT INTO `sys_access` VALUES (6, '会员列表页面', '/admin/user', 1); +INSERT INTO `sys_access` VALUES (7, '系统消息页面', '/admin/notice', 1); + +-- ---------------------------- +-- Table structure for sys_admin +-- ---------------------------- +DROP TABLE IF EXISTS `sys_admin`; +CREATE TABLE `sys_admin` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `email` varchar(75) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `mark` tinyint(3) NOT NULL COMMENT '管理员标记', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `email`(`email`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_admin +-- ---------------------------- +INSERT INTO `sys_admin` VALUES (1, 'bosen', 'e10adc3949ba59abbe56e057f20f883e', 'bosen_once@163.com', 1); + +-- ---------------------------- +-- Table structure for sys_admin_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_admin_role`; +CREATE TABLE `sys_admin_role` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `admin_id` int(11) NOT NULL, + `role_id` int(11) NOT NULL, + `status` tinyint(3) NOT NULL DEFAULT 1 COMMENT '1启用 0未启用', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_admin_role +-- ---------------------------- +INSERT INTO `sys_admin_role` VALUES (1, 1, 1, 1); + +-- ---------------------------- +-- Table structure for sys_cart +-- ---------------------------- +DROP TABLE IF EXISTS `sys_cart`; +CREATE TABLE `sys_cart` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `goods_id` int(11) NOT NULL, + `user_id` int(11) NOT NULL, + `goods_num` int(11) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_cart +-- ---------------------------- +INSERT INTO `sys_cart` VALUES (4, 40, 2, 1); +INSERT INTO `sys_cart` VALUES (5, 39, 2, 1); +INSERT INTO `sys_cart` VALUES (7, 18, 2, 1); +INSERT INTO `sys_cart` VALUES (8, 41, 1, 1); + +-- ---------------------------- +-- Table structure for sys_comment +-- ---------------------------- +DROP TABLE IF EXISTS `sys_comment`; +CREATE TABLE `sys_comment` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user` int(11) NOT NULL, + `goods` int(11) NOT NULL, + `merchant` int(11) NOT NULL, + `context` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `create_time` bigint(19) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_comment +-- ---------------------------- +INSERT INTO `sys_comment` VALUES (17, 1, 40, 9, 'PUMA彪马官方 新款条纹棒球帽 ARCHIVE LOGO 022554 粗呢蓝-条纹-09 均码', 1607241751568); +INSERT INTO `sys_comment` VALUES (18, 1, 38, 8, '阿迪达斯官网adidas 三叶草TEE男装短袖上衣 DV1922 DV1925DV1929 粉蓝 XL(参考身高:188~192CM)', 1610197695733); +INSERT INTO `sys_comment` VALUES (19, 1, 44, 8, '测试测试测试测试测试测试测试测试测试测试测试测试测试', 1610247776515); +INSERT INTO `sys_comment` VALUES (20, 1, 44, 8, '测试测试测试测试测试测试测试测试测试测试测试测试测试', 1610247780833); +INSERT INTO `sys_comment` VALUES (21, 1, 44, 8, '测试测试测试测试测试测试测试测试测试测试测试测试测试', 1610247784508); +INSERT INTO `sys_comment` VALUES (22, 1, 44, 8, '测试测试测试测试测试测试测试测试测试测试测试测试测试', 1610247789686); + +-- ---------------------------- +-- Table structure for sys_goods +-- ---------------------------- +DROP TABLE IF EXISTS `sys_goods`; +CREATE TABLE `sys_goods` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `describe` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `img` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '/image/user/home/product/15.jpg', + `price` decimal(10, 2) NOT NULL, + `state` tinyint(3) NOT NULL DEFAULT 1 COMMENT '1已上架 0未上架', + `merchant` int(11) NOT NULL COMMENT '商品所属的商户id', + `stock` int(11) NOT NULL DEFAULT 0 COMMENT '商品库存', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_goods +-- ---------------------------- +INSERT INTO `sys_goods` VALUES (11, '耐克NIKE 男子 板鞋 AJ1', '耐克NIKE 男子 板鞋 AJ1 乔1 AIR JORDAN 1 LOW SE 休闲鞋 CK3022-005黑色44码', '/data/goods/5/20201109204752392935.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (12, '耐克NIKE 男子 板鞋 经典', '耐克NIKE 男子 板鞋 经典 板鞋 COURT VISION MID 休闲鞋 CD5466-101白色42码', '/data/goods/5/20201109205306213001.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (13, '休闲鞋 CD5463-200', '耐克NIKE 男子 板鞋 经典 板鞋 COURT VISION LOW 休闲鞋 CD5463-200亚麻色44码', '/data/goods/5/20201109205751273390.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (14, '板鞋 AO2810-001', '耐克NIKE 女子 简约 百搭 COURT ROYALE AC 板鞋 AO2810-001黑色36码', '/data/goods/5/20201109205945154276.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (15, '休闲鞋 CZ1055-109', '耐克NIKE 女子 板鞋 经典 BLAZER MID \'77 休闲鞋 CZ1055-109白色36.5码', '/data/goods/5/20201109210325235653.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (17, '运动鞋 CJ0291-005', '耐克NIKE 男子 气垫 跑步鞋 缓震 ZOOM WINFLO 7 运动鞋 CJ0291-005黑色42码', '/data/goods/5/20201109210622705242.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (18, '运动鞋 AV4789-100', '耐克NIKE 男子 休闲鞋 缓震 M2K TEKNO 运动鞋 AV4789-100顶峰白色42码', '/data/goods/5/20201110142709402793.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (19, '运动鞋 AO0269-101', '耐克NIKE 男子 老爹鞋 气垫 ZOOM 2K 运动鞋 AO0269-101白色42.5码', '/data/goods/5/20201110142841106068.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (20, '运动鞋 CK6467-001', '耐克 NIKE 男子 板鞋/复刻鞋 AIR MAX 90 NRG 运动鞋 CK6467-001 黑色 42码', '/data/goods/5/20201110143028570004.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (21, '拖鞋 JORDAN', '耐克 NIKE 中性大童 拖鞋 JORDAN HYDRO XII RETRO BG 运动鞋 820267-107 白色 37.5码', '/data/goods/5/20201110143155960319.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (22, '休闲鞋 NIKE DROP-TYPE', '耐克 NIKE 男子 休闲鞋 NIKE DROP-TYPE MID 运动鞋 BQ5190-300绿 43码', '/data/goods/5/20201110143316976441.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (23, '运动鞋 CZ8681-167', '耐克NIKE 女子 休闲鞋 复古 DAYBREAK 运动鞋 CZ8681-167帆白色38码', '/data/goods/5/20201110143451872085.jpg', 0.01, 1, 5, 1); +INSERT INTO `sys_goods` VALUES (25, '运动外套GE5175', '阿迪达斯官网 adidas neo W ESNTL 3S WB 女装运动外套GE5175 如图 L', '/data/goods/8/20201110214136520879.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (26, '防风衣ED7539', '阿迪达斯官网 adidas 三叶草LOCK UP TT女装防风衣ED7539 ED7541 淡粉紫灰 32(参考身高:160~165CM)', '/data/goods/8/20201110224214151666.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (28, '防风衣 DV0857', '阿迪达斯官网 adidas 三叶草 女装防风衣 DV0857 DW3890 DX3694 浅粉紫 38(参考身高:169~172CM)', '/data/goods/8/20201110224428269386.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (29, '防风衣 ED7217', '阿迪达斯官网 adidas 三叶草 男装防风衣 ED7217 FL1763 黑色 S(参考身高:173~178CM)', '/data/goods/8/20201110224542348334.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (30, '冬季运动羽绒服FL0036', '阿迪达斯官网 adidas 三叶草 DOWN JACKET 女装冬季运动羽绒服FL0036 黑色 34(参考身高:164~167CM)', '/data/goods/8/20201110224729185763.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (31, '运动棉服FJ6523', '阿迪达斯官网adidas 三叶草 女装冬季运动棉服FJ6523 黑色 34(参考身高:164~167CM)', '/data/goods/8/20201110224846847911.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (32, '运动棉服 ED7601', '阿迪达斯官网 adidas 三叶草 LONG BOMBER 女装冬季运动棉服 ED7601 亮光粉 40(参考身高:170~175CM)', '/data/goods/8/20201110225011851415.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (34, '冬季运动棉服GL6407 ', '阿迪达斯官网 adidas 三叶草 Short Sherpa 女装冬季运动棉服GL6407 森林绿/传奇墨水蓝 40(参考身高:170~175CM)', '/data/goods/8/20201110225219159233.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (35, '连帽外套DN8151', '阿迪达斯官网 adidas 三叶草 3STR ZIP HOODIE女装连帽外套DN8151 如图 34', '/data/goods/8/20201110225330615623.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (36, '连帽外套 DV1935', '阿迪达斯官网 adidas 三叶草 FZ HOODY 男装连帽外套 DV1935 绿 XL(参考身高:188~192CM)', '/data/goods/8/20201110225449776961.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (37, '短袖上衣 CE1666', '阿迪达斯官网 adidas 三叶草 女装短袖上衣 CE1666 CE1667 白 32(参考身高:160~165CM)', '/data/goods/8/20201110225601894276.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (38, '短袖上衣 DV1922', '阿迪达斯官网adidas 三叶草TEE男装短袖上衣 DV1922 DV1925DV1929 粉蓝 XL(参考身高:188~192CM)', '/data/goods/8/20201110225703611247.jpg', 0.01, 1, 8, 1); +INSERT INTO `sys_goods` VALUES (39, '棒球帽 ARCHIVE', 'PUMA彪马官方 杨洋同款新款棒球帽 ARCHIVE LOGO LABEL 022778 粉紫色 06 ADULT', '/data/goods/9/20201112192043550007.jpg', 0.01, 1, 9, 0); +INSERT INTO `sys_goods` VALUES (40, '条纹棒球帽 ARCHIVE', 'PUMA彪马官方 新款条纹棒球帽 ARCHIVE LOGO 022554 粗呢蓝-条纹-09 均码', '/data/goods/9/20201112192208777150.jpg', 0.01, 1, 9, 1); +INSERT INTO `sys_goods` VALUES (41, '运动休闲手提包', 'PUMA彪马官方娜扎同款新款女子运动休闲手提包 PRIME PUFFA 078192 银色 02 OSFA/均码', '/data/goods/9/20201112192355215509.jpg', 0.01, 1, 9, 1); +INSERT INTO `sys_goods` VALUES (44, '测试商品(勿拍)', '测试测试测试测试测试测试测试测试测试测试测试测试测试', '/data/goods/8/20210109201101998677.jpg', 0.01, 1, 8, 20); + +-- ---------------------------- +-- Table structure for sys_mt +-- ---------------------------- +DROP TABLE IF EXISTS `sys_mt`; +CREATE TABLE `sys_mt` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `ratio` float(11, 1) NOT NULL COMMENT '商户每单收费需要支付的费率', + `state` tinyint(3) NOT NULL COMMENT '1启用 0未启用 2未通过注册', + `header` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '/lib/merchant/images/2.png', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `email`(`email`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_mt +-- ---------------------------- +INSERT INTO `sys_mt` VALUES (5, 'Nike耐克', 'nike@qq.com', 'e10adc3949ba59abbe56e057f20f883e', 0.1, 1, '/data/header/merchant/5.jpg'); +INSERT INTO `sys_mt` VALUES (8, 'Adidas阿迪达斯', 'adidas@qq.com', 'e10adc3949ba59abbe56e057f20f883e', 0.1, 1, '/data/header/merchant/20201130143514856044.jpg'); +INSERT INTO `sys_mt` VALUES (9, 'Puma彪马', 'puma@qq.com', 'e10adc3949ba59abbe56e057f20f883e', 0.1, 0, '/data/header/merchant/20201130144501417757.jpg'); + +-- ---------------------------- +-- Table structure for sys_mt_ui +-- ---------------------------- +DROP TABLE IF EXISTS `sys_mt_ui`; +CREATE TABLE `sys_mt_ui` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `width` int(7) NOT NULL, + `height` int(7) NOT NULL, + `merchant` int(11) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_mt_ui +-- ---------------------------- +INSERT INTO `sys_mt_ui` VALUES (5, '/data/mtui/5/20201111171430806651.jpg', 400, 320, 5); +INSERT INTO `sys_mt_ui` VALUES (6, '/data/mtui/5/20201111171436443523.jpg', 600, 310, 5); +INSERT INTO `sys_mt_ui` VALUES (8, '/data/mtui/8/20201111172245637416.jpg', 600, 310, 8); +INSERT INTO `sys_mt_ui` VALUES (9, '/data/mtui/9/20201111174106561114.jpg', 400, 320, 9); +INSERT INTO `sys_mt_ui` VALUES (10, '/data/mtui/9/20201111174116118997.jpg', 600, 310, 9); +INSERT INTO `sys_mt_ui` VALUES (12, '/data/mtui/8/20210109201740252613.jpg', 400, 320, 8); + +-- ---------------------------- +-- Table structure for sys_notice +-- ---------------------------- +DROP TABLE IF EXISTS `sys_notice`; +CREATE TABLE `sys_notice` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `context` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '0给管理员发送 1 商户 2用户', + `receive` int(11) NOT NULL COMMENT '接收者的id', + `create_time` bigint(20) NOT NULL COMMENT '通知发送时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 30 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_notice +-- ---------------------------- +INSERT INTO `sys_notice` VALUES (1, '测试标题', '测试内容', '0', 1, 1607238236877); +INSERT INTO `sys_notice` VALUES (2, '测试标题', '测试内容', '0', 2, 1607238236897); +INSERT INTO `sys_notice` VALUES (3, '测试标题', '测试内容', '1', 5, 1607238276845); +INSERT INTO `sys_notice` VALUES (4, '测试标题', '测试内容', '1', 8, 1607238276846); +INSERT INTO `sys_notice` VALUES (5, '测试标题', '测试内容', '1', 9, 1607238276847); +INSERT INTO `sys_notice` VALUES (7, '测试标题', '测试内容', '2', 2, 1607238284600); +INSERT INTO `sys_notice` VALUES (8, '测试标题', '测试内容', '2', 3, 1607238284601); +INSERT INTO `sys_notice` VALUES (9, '测试标题', '测试内容', '2', 4, 1607238284601); +INSERT INTO `sys_notice` VALUES (11, '测试标题2', '测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2', '2', 3, 1609926809535); +INSERT INTO `sys_notice` VALUES (12, '测试标题2', '测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2', '2', 4, 1609926809536); +INSERT INTO `sys_notice` VALUES (13, '测试标题2', '测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2', '2', 5, 1609926809536); +INSERT INTO `sys_notice` VALUES (14, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '2', 1, 1610251470774); +INSERT INTO `sys_notice` VALUES (15, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '2', 3, 1610251470775); +INSERT INTO `sys_notice` VALUES (16, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '2', 4, 1610251470776); +INSERT INTO `sys_notice` VALUES (17, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '2', 5, 1610251470776); +INSERT INTO `sys_notice` VALUES (18, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '0', 1, 1610251505029); +INSERT INTO `sys_notice` VALUES (19, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '0', 1, 1610251517513); +INSERT INTO `sys_notice` VALUES (20, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '0', 1, 1610251532490); +INSERT INTO `sys_notice` VALUES (21, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息', '0', 1, 1610251583253); +INSERT INTO `sys_notice` VALUES (22, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息', '2', 1, 1610251604151); +INSERT INTO `sys_notice` VALUES (23, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息', '2', 3, 1610251604152); +INSERT INTO `sys_notice` VALUES (24, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息', '2', 4, 1610251604153); +INSERT INTO `sys_notice` VALUES (25, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息', '2', 5, 1610251604153); +INSERT INTO `sys_notice` VALUES (26, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '2', 1, 1610251616814); +INSERT INTO `sys_notice` VALUES (27, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '2', 3, 1610251616814); +INSERT INTO `sys_notice` VALUES (28, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '2', 4, 1610251616815); +INSERT INTO `sys_notice` VALUES (29, '测试群发系统消息', '测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息测试群发系统消息', '2', 5, 1610251616815); + +-- ---------------------------- +-- Table structure for sys_order +-- ---------------------------- +DROP TABLE IF EXISTS `sys_order`; +CREATE TABLE `sys_order` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `order_id` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `create_time` bigint(19) NOT NULL, + `pay_time` bigint(19) NULL DEFAULT NULL, + `goods_num` int(11) NOT NULL COMMENT '商品数量', + `order_state` tinyint(3) NOT NULL DEFAULT 0 COMMENT '1已支付 0未支付', + `order_mark` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品标记', + `order_user` int(11) NOT NULL COMMENT '用户id', + `order_merchant` int(11) NOT NULL COMMENT '商户id', + `order_price` decimal(10, 2) NOT NULL COMMENT '订单总金额', + `goods_id` int(11) NOT NULL, + `order_notes` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '订单特殊注释', + `user_address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '地址', + `user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '收件人', + `user_phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '电话号码', + `coupon_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '优惠卷代码', + `pay_way` tinyint(3) NOT NULL COMMENT '1支付宝 0微信支付', + `pay_code_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '支付链接', + `cart_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '批量购买的商品', + `merchant_ratio` float(11, 1) NOT NULL DEFAULT 1.0 COMMENT '订单创建时商户的费率', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `order_id`(`order_id`) USING BTREE COMMENT '订单号唯一' +) ENGINE = InnoDB AUTO_INCREMENT = 95 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_order +-- ---------------------------- +INSERT INTO `sys_order` VALUES (67, 'EGW202012340213807244213', 1607175487598, 1607175743564, 1, 1, 'AXW202012340213807246245', 1, 5, 0.01, 23, '', '测试', '测试', '测试', '', 0, '/data/pay/AXW202012340213807246245.jpg', NULL, 0.1); +INSERT INTO `sys_order` VALUES (68, 'OXH202012340214627915466', 1607175987049, 1607183449712, 1, 1, 'MYV202012340214627324440', 1, 8, 0.01, 36, '', '测试', '测试', '测试', '', 0, '/data/pay/MYV202012340214627324440.jpg', NULL, 0.1); +INSERT INTO `sys_order` VALUES (69, 'RJF202012340215418785117', 1607176458511, 1607183916993, 1, 1, 'BHL202012340215418546511', 1, 5, 0.01, 19, '', '测试', '测试', '测试', '', 0, '/data/pay/BHL202012340215418546511.jpg', NULL, 0.1); +INSERT INTO `sys_order` VALUES (70, 'OHJ202012340215418723349', 1607176458511, 1607183916993, 1, 1, 'BHL202012340215418546511', 1, 8, 0.01, 34, '', '测试', '测试', '测试', '', 0, '/data/pay/BHL202012340215418546511.jpg', NULL, 0.1); +INSERT INTO `sys_order` VALUES (71, 'TCR202012340221129763691', 1607177489871, 1607183147374, 1, 1, 'ZLA202012340221129912783', 1, 8, 0.01, 34, '', '测试', '测试', '测试', '', 0, '/data/pay/ZLA202012340221129912783.jpg', NULL, 0.1); +INSERT INTO `sys_order` VALUES (72, 'PPI202012340221129185744', 1607177489871, 1607183147374, 1, 1, 'ZLA202012340221129912783', 1, 5, 0.01, 19, '', '测试', '测试', '测试', '', 0, '/data/pay/ZLA202012340221129912783.jpg', NULL, 0.1); +INSERT INTO `sys_order` VALUES (89, 'AVZ202012341002051747406', 1607185251976, 1607185263967, 1, 1, 'KQU202012341002051161208', 1, 9, 0.01, 40, '', '测试', '测试', '测试', '', 0, '/data/pay/KQU202012341002051161208.jpg', NULL, 0.1); +INSERT INTO `sys_order` VALUES (90, 'WVW202012341002151359796', 1607185311336, 1607185323819, 1, 1, 'SDW202012341002151596097', 1, 5, 0.01, 13, '', '测试', '测试', '测试', '', 0, '/data/pay/SDW202012341002151596097.jpg', NULL, 0.1); +INSERT INTO `sys_order` VALUES (91, 'QAK202012341002151746672', 1607185311336, 1607185323819, 1, 1, 'SDW202012341002151596097', 1, 5, 0.01, 19, '', '测试', '测试', '测试', '', 0, '/data/pay/SDW202012341002151596097.jpg', '1', 0.1); +INSERT INTO `sys_order` VALUES (92, 'YYT202012341004300490850', 1607186580573, 1607186595850, 1, 1, 'NFF202012341004300926613', 1, 8, 0.01, 34, '', '测试', '测试', '测试', '', 0, '/data/pay/NFF202012341004300926613.jpg', '13', 0.1); +INSERT INTO `sys_order` VALUES (93, 'LID202012341004300509122', 1607186580573, 1607186595850, 1, 1, 'NFF202012341004300926613', 1, 5, 0.01, 19, '', '测试', '测试', '测试', '', 0, '/data/pay/NFF202012341004300926613.jpg', '10', 0.1); + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色名', + `status` tinyint(3) NOT NULL DEFAULT 1 COMMENT '1已启用 0未启用', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO `sys_role` VALUES (1, '未定义角色', 1); +INSERT INTO `sys_role` VALUES (2, '超级管理员', 1); +INSERT INTO `sys_role` VALUES (3, '普通管理员', 1); + +-- ---------------------------- +-- Table structure for sys_role_access +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_access`; +CREATE TABLE `sys_role_access` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `role_id` int(11) NOT NULL, + `access_id` int(11) NOT NULL, + `status` tinyint(3) NOT NULL DEFAULT 1 COMMENT '1启用 0未启用', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_role_access +-- ---------------------------- +INSERT INTO `sys_role_access` VALUES (9, 2, 1, 1); +INSERT INTO `sys_role_access` VALUES (10, 2, 2, 1); +INSERT INTO `sys_role_access` VALUES (11, 2, 3, 1); +INSERT INTO `sys_role_access` VALUES (12, 2, 4, 1); +INSERT INTO `sys_role_access` VALUES (13, 2, 5, 1); + +-- ---------------------------- +-- Table structure for sys_ui +-- ---------------------------- +DROP TABLE IF EXISTS `sys_ui`; +CREATE TABLE `sys_ui` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `width` int(7) NOT NULL, + `height` int(7) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_ui +-- ---------------------------- +INSERT INTO `sys_ui` VALUES (2, '/data/library/20201106191900642246.jpg', 1920, 737); +INSERT INTO `sys_ui` VALUES (5, '/data/library/20201106192206806286.jpg', 1230, 535); +INSERT INTO `sys_ui` VALUES (6, '/data/library/20210109210243296422.jpg', 475, 570); +INSERT INTO `sys_ui` VALUES (10, '/data/library/20201130223715934619.jpg', 3151, 282); +INSERT INTO `sys_ui` VALUES (15, '/data/library/20201130222817664532.jpg', 674, 264); +INSERT INTO `sys_ui` VALUES (16, '/data/library/20201201130048784144.jpeg', 3152, 282); + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `mark` tinyint(3) NOT NULL COMMENT '0未启用 1已启用', + `header` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '/data/header/user/default.jpg', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `email`(`email`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` VALUES (1, 'test', 'e10adc3949ba59abbe56e057f20f883e', 'bosen_once@163.com', 1, '/data/header/user/1.jpg'); +INSERT INTO `sys_user` VALUES (3, 'bosen_once@qq.com', 'e10adc3949ba59abbe56e057f20f883e', 'bosen_once@qq.com', 1, '/data/header/user/default.jpg'); +INSERT INTO `sys_user` VALUES (4, 'test111', 'e10adc3949ba59abbe56e057f20f883e', '806317173@qq.com', 0, '/data/header/user/default.jpg'); +INSERT INTO `sys_user` VALUES (5, 'lalalal', 'e10adc3949ba59abbe56e057f20f883e', '2390025289@qq.com', 0, '/data/header/user/default.jpg'); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..a16b543 --- /dev/null +++ b/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..c8d4337 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..05340f2 --- /dev/null +++ b/pom.xml @@ -0,0 +1,221 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.3.5.RELEASE + + + com.example + jieyue + 0.0.1-SNAPSHOT + war + jieyue + Demo project for Spring Boot + + + UTF-8 + UTF-8 + 1.8 + 8.5.29 + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + com.alipay.sdk + alipay-sdk-java + 3.3.4.ALL + + + commons-logging + commons-logging + 1.1.1 + + + + commons-fileupload + commons-fileupload + 1.3.3 + + + + commons-io + commons-io + 2.6 + + + org.springframework.boot + spring-boot-starter-mail + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-devtools + true + + + mysql + mysql-connector-java + runtime + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.3 + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + org.jetbrains + annotations + RELEASE + compile + + + org.springframework.boot + spring-boot + 2.3.5.RELEASE + + + + + org.apache.httpcomponents + httpclient + 4.5.3 + + + + org.slf4j + slf4j-api + 1.7.21 + + + + + com.google.zxing + core + 3.3.0 + + + + net.glxn + qrgen + 1.4 + + + com.alibaba + fastjson + 1.2.47 + + + org.slf4j + slf4j-simple + 1.7.21 + + + org.springframework.data + spring-data-redis + 2.3.4.RELEASE + + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.apache.tomcat.embed + tomcat-embed-jasper + provided + + + + + ROOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + ${java.home}/lib/rt.jar${path.separator}${java.home}/lib/jce.jar + + + + + + + + + The BSD 3-Clause License + https://opensource.org/licenses/BSD-3-Clause + repo + + + + + + wxpay + https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=11_1 + + + + + + release + + + oss + https://oss.sonatype.org/content/repositories/snapshots/ + + + oss + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + + diff --git a/profiles.xml b/profiles.xml new file mode 100644 index 0000000..919941a --- /dev/null +++ b/profiles.xml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/example/jieyue/JieyueApplication.java b/src/main/java/com/example/jieyue/JieyueApplication.java new file mode 100644 index 0000000..ce5b63a --- /dev/null +++ b/src/main/java/com/example/jieyue/JieyueApplication.java @@ -0,0 +1,50 @@ +package com.example.jieyue; + +import org.apache.catalina.connector.Connector; +import org.apache.coyote.http11.AbstractHttp11Protocol; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.Bean; +import org.springframework.scheduling.annotation.EnableScheduling; + +@MapperScan("com.example.jieyue.common.mapper")// mapper扫描 +@SpringBootApplication +@ServletComponentScan +@EnableScheduling// 定时任务 +public class JieyueApplication extends SpringBootServletInitializer { + + public static void main(String[] args) { + SpringApplication.run(JieyueApplication.class, args); + } + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { + return builder.sources(JieyueApplication.class); + } + + /* + * 处理文件过大上传失败的问题 + */ + @Bean + public TomcatServletWebServerFactory containerFactory() { + return new TomcatServletWebServerFactory() { + protected void customizeConnector(Connector connector) { + int maxSize = 50000000; + super.customizeConnector(connector); + connector.setMaxPostSize(maxSize); + connector.setMaxSavePostSize(maxSize); + if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) { + + ((AbstractHttp11Protocol ) connector.getProtocolHandler()).setMaxSwallowSize(maxSize); + logger.info("Set MaxSwallowSize "+ maxSize); + } + } + }; + + } +} diff --git a/src/main/java/com/example/jieyue/admin/controller/AdminHomeController.java b/src/main/java/com/example/jieyue/admin/controller/AdminHomeController.java new file mode 100644 index 0000000..8651580 --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/controller/AdminHomeController.java @@ -0,0 +1,40 @@ +package com.example.jieyue.admin.controller; + +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.mapper.SysOrderMapper; +import com.example.jieyue.common.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +/** + *

后台主页

+ * @author Bosen + * 2020/11/3 20:38 + */ +@RestController +public class AdminHomeController { + @Autowired + SysOrderMapper orderMapper; + @Autowired + SysGoodsMapper goodsMapper; + @Autowired + SysUserMapper userMapper; + + @RequestMapping("/admin/home") + public ModelAndView index(ModelAndView modelAndView){ + float profit = orderMapper.websiteProfitCount(); + int orderCount = orderMapper.payCount(); + int goodsCount = goodsMapper.allGoodsCount(); + int userCount = userMapper.userCount(); + + modelAndView.addObject("profit",profit); + modelAndView.addObject("orderCount",orderCount); + modelAndView.addObject("goodsCount",goodsCount); + modelAndView.addObject("userCount",userCount); + + modelAndView.setViewName("admin/home/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/admin/controller/AdminLoginController.java b/src/main/java/com/example/jieyue/admin/controller/AdminLoginController.java new file mode 100644 index 0000000..3a99292 --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/controller/AdminLoginController.java @@ -0,0 +1,119 @@ +package com.example.jieyue.admin.controller; + +import com.example.jieyue.admin.service.AdminLoginService; +import com.example.jieyue.common.entity.SysAdmin; +import org.apache.ibatis.annotations.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +/** + *

后台登陆控制器

+ * @author Bosen + * 2020/11/3 14:03 + */ +@RestController +@RequestMapping("/admin") +public class AdminLoginController { + @Autowired + AdminLoginService service; + /* + * 登陆页面 + */ + @RequestMapping({"login",""}) + public ModelAndView index(ModelAndView modelAndView){ + modelAndView.setViewName("admin/login/index"); + return modelAndView; + } + + /* + * 登陆处理 + */ + @RequestMapping("do-login") + public ModelAndView doLogin(HttpSession session, ModelAndView modelAndView,String email, String password){ + int result = service.doLogin(email,password); + if (result==1){ + // 登陆成功 + SysAdmin admin = service.adminInfo(email); + session.setAttribute("admin",admin); + modelAndView.setViewName("redirect:/admin/home"); + }else if (result==-1){ + // 用户名或密码错误! + modelAndView.addObject("msg","用户名或密码错误!"); + modelAndView.setViewName("redirect:login"); + }else if (result==0){ + // 必填信息不能为空! + modelAndView.addObject("msg","必填信息不能为空!"); + modelAndView.setViewName("redirect:login"); + } + return modelAndView; + } + + /* + * 退出登录 + */ + @RequestMapping("logout") + public ModelAndView logout(ModelAndView modelAndView,HttpSession session){ + session.setAttribute("merchant",null); + modelAndView.setViewName("redirect:/admin/login"); + return modelAndView; + } + + /* + * 注册请求 + */ + @RequestMapping("sign-up") + public ModelAndView signUp(ModelAndView modelAndView,String name,String email,String password){ + int result = service.singup(email,email,password); + if (result==0){ + // 必填信息不能为空! + modelAndView.addObject("msg","必填信息不能为空!"); + } + if (result==4){ + // 该邮箱已被注册 + modelAndView.addObject("msg","该邮箱已被注册"); + } + if (result==3){ + // 邮箱格式不正确 + modelAndView.addObject("msg","邮箱格式不正确"); + } + if (result==2){ + // 两次密码输入不一致 + modelAndView.addObject("msg","两次密码输入不一致"); + } + if (result==1){ + // 验证邮件已发送,请留意您的邮箱 + modelAndView.addObject("msg","验证邮件已发送,请留意您的邮箱"); + } + if (result==-1){ + // 验证邮件发送失败,请重试 + modelAndView.addObject("msg","注册超时,请重试"); + } + modelAndView.setViewName("redirect:login"); + return modelAndView; + } + + /* + * 验证邮件确认注册 + */ + @RequestMapping("sign-check") + public ModelAndView singCheck(ModelAndView modelAndView,@Param("email") String email){ + int res = service.singCheck(email); + if (res==-1){ + modelAndView.setViewName("redirect:/error"); + } + if (res==0){ + modelAndView.addObject("网络超时请重试"); + modelAndView.setViewName("redirect:login"); + } + if (res==1){ + modelAndView.addObject("msg","注册成功"); + modelAndView.setViewName("redirect:login"); + } + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/admin/controller/AdminMerchantController.java b/src/main/java/com/example/jieyue/admin/controller/AdminMerchantController.java new file mode 100644 index 0000000..70ae479 --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/controller/AdminMerchantController.java @@ -0,0 +1,122 @@ +package com.example.jieyue.admin.controller; + +import com.example.jieyue.admin.service.AdminMerchantService; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.mapper.SysMtMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + *

商户管理页面

+ * @author Bosen + * 2020/11/8 10:50 + */ +@RestController +@RequestMapping("/admin/merchant") +public class AdminMerchantController { + @Autowired + AdminMerchantService merchantService; + @Autowired + SysMtMapper merchantMapper; + + @RequestMapping("") + public ModelAndView index(ModelAndView modelAndView, HttpServletRequest request){ + modelAndView.setViewName("/admin/merchant/index"); + + int pageSize = 10; + int pageCount = merchantService.getMtPage(pageSize); + int num = 1; + int preNum = 1; + int nextNum = 1; + if (request.getParameter("num")!=null){ + num = Integer.parseInt(request.getParameter("num")); + } + if (num <= 1){ + preNum = 1; + nextNum = 2; + }else{ + preNum = num-1; + if (num>=pageCount-1){ + nextNum = pageCount; + }else{ + nextNum = num+1; + } + } + List mtList = merchantService.getMtInfo(num,pageSize); + if (mtList.size()<=10){ + nextNum = num; + } + modelAndView.addObject("mtList",mtList); + modelAndView.addObject("pageCount",pageCount); + modelAndView.addObject("nextNum",nextNum); + modelAndView.addObject("preNum",preNum); + modelAndView.addObject("num",num); + + return modelAndView; + } + + @RequestMapping("update-ratio") + public ModelAndView updateRatio(ModelAndView modelAndView,String ratio,int id){ + try { + float ratioFloat = Float.valueOf(ratio); + if (ratioFloat > 1.0 || ratioFloat < 0.1 || !checkFloat(ratioFloat)){ + modelAndView.addObject("msg","费率应在0.1~1.0之间(一位小数)"); + }else{ + if (merchantMapper.updateRatio(id,ratioFloat)==1){ + modelAndView.addObject("msg","修改成功"); + }else{ + modelAndView.addObject("msg","修改失败"); + } + } + }catch (Exception e){ + modelAndView.addObject("msg","输入的费率不合法"); + } + + modelAndView.setViewName("redirect:/admin/merchant"); + return modelAndView; + } + + /* + * 删除商户 + */ + @RequestMapping("delete-merchant") + public ModelAndView deleteMerchant(ModelAndView modelAndView,int id){ + if (merchantService.deleteMerchant(id)==1){ + modelAndView.addObject("msg","删除商户成功!"); + }else{ + modelAndView.addObject("msg","删除商户失败!"); + } + modelAndView.setViewName("redirect:/admin/merchant"); + return modelAndView; + } + + /* + * 修改商户状态 + */ + @RequestMapping("update-merchant") + public ModelAndView updateMerchant(ModelAndView modelAndView,String email,int state){ + if (merchantService.updateMerchantState(email,state)==1){ + modelAndView.addObject("msg","操作成功!"); + }else{ + modelAndView.addObject("msg","操作失败!"); + } + modelAndView.setViewName("redirect:/admin/merchant"); + return modelAndView; + } + + /* + * 检查费率是否超过了一位小数 + */ + public boolean checkFloat(float ratio){ + char[] c = String.valueOf(ratio).split(".")[1].toCharArray(); + if (c.length > 1){ + return true; + } + return false; + } +} diff --git a/src/main/java/com/example/jieyue/admin/controller/AdminNoticeController.java b/src/main/java/com/example/jieyue/admin/controller/AdminNoticeController.java new file mode 100644 index 0000000..94302cb --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/controller/AdminNoticeController.java @@ -0,0 +1,37 @@ +package com.example.jieyue.admin.controller; + +import com.example.jieyue.admin.service.AdminNoticeService; +import com.example.jieyue.common.utils.IsEmptyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +@RestController +public class AdminNoticeController { + @Autowired + AdminNoticeService noticeService; + @Autowired + IsEmptyUtil isEmptyUtil; + + @RequestMapping("/admin/notice") + public ModelAndView index(ModelAndView modelAndView){ + modelAndView.setViewName("admin/notice/index"); + return modelAndView; + } + + /* + * 系统消息发送 利用redis异步发送 + */ + @RequestMapping("/admin/send-notice") + public ModelAndView sendNotice(ModelAndView modelAndView,String title,String context,int type){ + if (isEmptyUtil.strings(title,context)){ + modelAndView.addObject("msg","必填信息不能为空"); + }else{ + noticeService.send(title,context,type); + modelAndView.addObject("msg","系统消息发送成功"); + } + modelAndView.setViewName("redirect:/admin/notice"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/admin/controller/AdminOrderController.java b/src/main/java/com/example/jieyue/admin/controller/AdminOrderController.java new file mode 100644 index 0000000..e4a89e2 --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/controller/AdminOrderController.java @@ -0,0 +1,53 @@ +package com.example.jieyue.admin.controller; + +import com.example.jieyue.admin.service.AdminOrderService; +import com.example.jieyue.common.entity.SysOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import java.util.List; + +/** + *

订单管理控制器

+ * @author Bosen + * 2020/12/1 13:02 + */ +@RestController +public class AdminOrderController { + @Autowired + AdminOrderService orderService; + + @RequestMapping("/admin/order") + public ModelAndView index(ModelAndView modelAndView,@RequestParam(defaultValue = "2")int flag, @RequestParam(defaultValue = "1")int page){ + // 获取订单信息 + List orderList = orderService.getOrderList(page,18,flag); + modelAndView.addObject("orderList",orderList); + + // 获取订单总页数 + int allPage = orderService.getAllPage(flag,18); + modelAndView.addObject("page",page); + modelAndView.addObject("flag",flag); + modelAndView.addObject("allPage",allPage); + + modelAndView.setViewName("admin/order/index"); + return modelAndView; + } + + @RequestMapping("/admin/search-order") + public ModelAndView searchOrder(ModelAndView modelAndView,String order){ + // 获取订单信息 + List orderList = orderService.getOrderById(order); + modelAndView.addObject("orderList",orderList); + + // 获取订单总页数 + modelAndView.addObject("page",1); + modelAndView.addObject("flag",2); + modelAndView.addObject("allPage",1); + + modelAndView.setViewName("admin/order/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/admin/controller/AdminRbacController.java b/src/main/java/com/example/jieyue/admin/controller/AdminRbacController.java new file mode 100644 index 0000000..46b6ed3 --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/controller/AdminRbacController.java @@ -0,0 +1,291 @@ +package com.example.jieyue.admin.controller; + +import com.example.jieyue.admin.service.AdminRbacService; +import com.example.jieyue.common.entity.*; +import com.example.jieyue.common.mapper.*; +import com.example.jieyue.common.utils.IsEmptyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +public class AdminRbacController { + @Autowired + AdminRbacService rbacService; + @Autowired + SysAdminMapper adminMapper; + @Autowired + SysRoleMapper roleMapper; + @Autowired + SysAccessMapper accessMapper; + @Autowired + SysAdminRoleMapper adminRoleMapper; + @Autowired + SysRoleAccessMapper roleAccessMapper; + @Autowired + IsEmptyUtil isEmptyUtil; + + @RequestMapping("/admin/rbac") + public ModelAndView index(ModelAndView modelAndView){ + // 管理员列表 + List adminList = adminMapper.findAll(); + // 角色列表 + List roleList = roleMapper.findAll(); + // 权限列表 + List accessList = accessMapper.findAll(); + + modelAndView.addObject("adminList",adminList); + modelAndView.addObject("roleList",roleList); + modelAndView.addObject("accessList",accessList); + + modelAndView.setViewName("admin/rbac/index"); + return modelAndView; + } + + /* + * 编辑管理员的角色页面 + * todo + */ + @RequestMapping("/admin/rbac/update-admin-role") + public ModelAndView updateAdminRole(ModelAndView modelAndView,int adminId){ + // 获取管理员角色信息 + SysAdminRole adminRole = adminRoleMapper.findByAdminId(adminId); + + modelAndView.addObject("adminRole",adminRole); + modelAndView.setViewName("updateRoleAccess"); + return modelAndView; + } + + /* + * 执行编辑管理员的角色操作 + * todo + */ + @RequestMapping("/admin/rbac/update-admin-role-action") + public ModelAndView updateAdminRoleAction(ModelAndView modelAndView,int adminId,String roles){ + + modelAndView.setViewName("updateRoleAccess"); + return modelAndView; + } + + /* + * 添加角色 + */ + @RequestMapping("/admin/add-role") + public ModelAndView addRole(ModelAndView modelAndView,String name){ + if (isEmptyUtil.strings(name)){ + modelAndView.addObject("msg","请输入角色名"); + } + if (roleMapper.countByName(name)!=0){ + modelAndView.addObject("msg","此角色已存在"); + } + if (roleMapper.insert(name)!=1){ + modelAndView.addObject("msg","添加角色失败"); + }else{ + modelAndView.addObject("msg","添加角色成功"); + } + modelAndView.setViewName("redirect:/admin/rbac"); + return modelAndView; + } + + /* + * 添加权限 + */ + @RequestMapping("/admin/add-access") + public ModelAndView addAccess(ModelAndView modelAndView,String name,String url){ + if (isEmptyUtil.strings(name,url)){ + modelAndView.addObject("msg","必填信息不能为空"); + } + if (accessMapper.countByName(name)!=0){ + modelAndView.addObject("msg","此权限已存在"); + } + if (accessMapper.insert(name,url)!=1){ + modelAndView.addObject("msg","添加权限失败"); + }else{ + modelAndView.addObject("msg","添加权限成功"); + } + modelAndView.setViewName("redirect:/admin/rbac"); + return modelAndView; + } + + @RequestMapping("/admin/del-admin") + public ModelAndView delAdmin(ModelAndView modelAndView,int id){ + modelAndView.setViewName("redirect:/admin/rbac"); + if (id==1){ + modelAndView.addObject("msg","无法删除此管理员"); + return modelAndView; + } + if (adminMapper.deleteById(id)==1){ + modelAndView.addObject("msg","删除管理员成功"); + }else{ + modelAndView.addObject("msg","删除管理员失败"); + } + return modelAndView; + } + + @RequestMapping("/admin/del-role") + public ModelAndView delRole(ModelAndView modelAndView,int id){ + if (roleMapper.deleteById(id)==1){ + modelAndView.addObject("msg","删除角色成功"); + }else{ + modelAndView.addObject("msg","删除角色失败"); + } + modelAndView.setViewName("redirect:/admin/rbac"); + return modelAndView; + } + + @RequestMapping("/admin/del-access") + public ModelAndView delAccess(ModelAndView modelAndView,int id){ + if (accessMapper.deleteById(id)==1){ + modelAndView.addObject("msg","删除权限成功"); + }else{ + modelAndView.addObject("msg","删除权限失败"); + } + modelAndView.setViewName("redirect:/admin/rbac"); + return modelAndView; + } + + /* + * 停用管理员 + */ + @RequestMapping("/admin/off-admin") + public ModelAndView offAdmin(ModelAndView modelAndView,int id){ + modelAndView.setViewName("redirect:/admin/rbac"); + if (id==1){ + modelAndView.addObject("无法停用此管理员!"); + return modelAndView; + } + if (adminMapper.updateMarkById(id,0)==1){ + modelAndView.addObject("msg","停用成功!"); + }else{ + modelAndView.addObject("msg","停用失败!"); + } + return modelAndView; + } + + /* + * 启用管理员 + */ + @RequestMapping("/admin/on-admin") + public ModelAndView onAdmin(ModelAndView modelAndView,int id){ + modelAndView.setViewName("redirect:/admin/rbac"); + if (adminMapper.updateMarkById(id,1)==1){ + modelAndView.addObject("msg","启用成功!"); + }else{ + modelAndView.addObject("msg","启用失败!"); + } + return modelAndView; + } + + /* + * 停用角色 + */ + @RequestMapping("/admin/off-role") + public ModelAndView offRole(ModelAndView modelAndView,int id){ + modelAndView.setViewName("redirect:/admin/rbac"); + if (roleMapper.updateStatus(0,id)==1){ + modelAndView.addObject("msg","停用角色成功!"); + }else{ + modelAndView.addObject("msg","停用角色失败!"); + } + return modelAndView; + } + + /* + * 启用角色 + */ + @RequestMapping("/admin/on-role") + public ModelAndView onRole(ModelAndView modelAndView,int id){ + modelAndView.setViewName("redirect:/admin/rbac"); + if (roleMapper.updateStatus(1,id)==1){ + modelAndView.addObject("msg","启用角色成功!"); + }else{ + modelAndView.addObject("msg","启用角色失败!"); + } + return modelAndView; + } + + /* + * 启用权限 + */ + @RequestMapping("/admin/on-access") + public ModelAndView onAccess(ModelAndView modelAndView,int id){ + modelAndView.setViewName("redirect:/admin/rbac"); + if (accessMapper.updateStatus(1,id)==1){ + modelAndView.addObject("msg","启用权限成功!"); + }else{ + modelAndView.addObject("msg","启用权限失败!"); + } + return modelAndView; + } + + /* + * 停用权限 + */ + @RequestMapping("/admin/off-access") + public ModelAndView offAccess(ModelAndView modelAndView,int id){ + modelAndView.setViewName("redirect:/admin/rbac"); + if (accessMapper.updateStatus(0,id)==1){ + modelAndView.addObject("msg","停用权限成功!"); + }else{ + modelAndView.addObject("msg","停用权限失败!"); + } + return modelAndView; + } + + /* + * 修改权限信息 + */ + @RequestMapping("/admin/update-access") + public ModelAndView updateAccess(ModelAndView modelAndView,int id,String name,String url){ + modelAndView.setViewName("redirect:/admin/rbac"); + if (accessMapper.updateInfo(id,name,url)==1){ + modelAndView.addObject("msg","修改权限信息成功!"); + }else{ + modelAndView.addObject("msg","修改权限信息失败!"); + } + return modelAndView; + } + + /* + * 修改角儿权限信息页面 + */ + @RequestMapping("/admin/role-access") + public ModelAndView roleAccessIndex(ModelAndView modelAndView,int id){ + modelAndView.setViewName("/admin/rbac/role-access"); + // 获取角色信息 + SysRole role = roleMapper.findById(id); + // 获取角色的权限信息 + List roleAccessList = roleAccessMapper.findByRoleId(id); + Map roleAccessMap = new HashMap<>(); + for (SysRoleAccess sysRoleAccess : roleAccessList) { + roleAccessMap.put(sysRoleAccess.getAccessId(),sysRoleAccess); + } + // 获取全部权限信息 + List allAccessList = accessMapper.findAll(); + + modelAndView.addObject("role",role); + modelAndView.addObject("allAccessList",allAccessList); + modelAndView.addObject("roleAccessMap",roleAccessMap); + + return modelAndView; + } + + /* + * 修改角色的权限 + */ + @RequestMapping("/admin/role-access/action") + public ModelAndView action(ModelAndView modelAndView,int role,int ... ids){ + modelAndView.setViewName("redirect: /admin/role-access?id="+role); + if (rbacService.setRoleAccess(role,ids)){ + modelAndView.addObject("msg","设置成功"); + }else{ + modelAndView.addObject("msg","设置失败"); + } + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/admin/controller/AdminUiController.java b/src/main/java/com/example/jieyue/admin/controller/AdminUiController.java new file mode 100644 index 0000000..4a6a78e --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/controller/AdminUiController.java @@ -0,0 +1,71 @@ +package com.example.jieyue.admin.controller; + +import com.example.jieyue.admin.service.AdminUiService; +import com.example.jieyue.common.entity.SysUi; +import com.example.jieyue.user.service.UserHomeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +/** + *

网页图片UI设置

+ * @author Bosen + * 2020/11/4 21:00 + */ +@RestController +public class AdminUiController { + @Autowired + AdminUiService adminUiService; + @Autowired + UserHomeService userHomeService; + + @RequestMapping("/admin/ui") + public ModelAndView index(ModelAndView modelAndView){ + modelAndView.setViewName("admin/ui/index"); + Map imgMap = userHomeService.getImage(); + modelAndView.addObject("imgMap",imgMap); + return modelAndView; + } + + /** + *

文件上传操作

+ * @author Bosen + * 2020/11/5 18:56 + */ + @RequestMapping("/admin/up-image") + public ModelAndView upImage(ModelAndView modelAndView, MultipartFile file, RedirectAttributes redirectAttributes, HttpServletRequest request,int width,int height){ + if (file.getOriginalFilename().isEmpty()){ + modelAndView.addObject("msg","文件上传失败"); + }else{ + String upFileResult = adminUiService.upImage(file,redirectAttributes,request,"/data/library/",width,height); + if (upFileResult==null){ + modelAndView.addObject("msg","文件上传失败"); + }else{ + modelAndView.addObject("msg","文件上传成功"); + + } + } + modelAndView.setViewName("redirect:ui"); + return modelAndView; + } + + /* + * 删除海报 + */ + @RequestMapping("/admin/del-image") + public ModelAndView delImg(ModelAndView modelAndView,int width,int height){ + modelAndView.setViewName("redirect:ui"); + if (adminUiService.delImg(width,height)){ + modelAndView.addObject("msg","删除成功"); + }else{ + modelAndView.addObject("msg","删除失败"); + } + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/admin/controller/AdminUserController.java b/src/main/java/com/example/jieyue/admin/controller/AdminUserController.java new file mode 100644 index 0000000..821a1fe --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/controller/AdminUserController.java @@ -0,0 +1,33 @@ +package com.example.jieyue.admin.controller; + +import com.example.jieyue.admin.service.AdminUserService; +import com.example.jieyue.common.entity.SysUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import java.util.List; + +@RestController +public class AdminUserController { + @Autowired + AdminUserService userService; + + @RequestMapping("/admin/user") + public ModelAndView index(ModelAndView modelAndView, @RequestParam(defaultValue = "1")int page){ + // 获取订单信息 + List userList = userService.getUserList(page,10); + modelAndView.addObject("userList",userList); + + // 获取订单总页数 + int allPage = userService.getAllPage(10); + modelAndView.addObject("page",page); + modelAndView.addObject("allPage",allPage); + + modelAndView.setViewName("admin/user/index"); + return modelAndView; + } + +} diff --git a/src/main/java/com/example/jieyue/admin/service/AdminLoginService.java b/src/main/java/com/example/jieyue/admin/service/AdminLoginService.java new file mode 100644 index 0000000..6fa145a --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/service/AdminLoginService.java @@ -0,0 +1,145 @@ +package com.example.jieyue.admin.service; + +import com.example.jieyue.common.entity.SysAdmin; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.mapper.SysAdminMapper; +import com.example.jieyue.common.mapper.SysAdminRoleMapper; +import com.example.jieyue.common.service.MailService; +import com.example.jieyue.common.service.SysUserService; +import com.example.jieyue.common.utils.IsEmptyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.util.DigestUtils; + +/** + *

登陆逻辑处理

+ * @author Bosen + * 2020/11/3 19:06 + */ +@Service +public class AdminLoginService { + @Autowired + SysAdminMapper adminMapper; + @Autowired + MailService mailService; + @Autowired + SysAdminRoleMapper adminRoleMapper; + @Value("${site-url}") + String sitrUrl; + + // 判空工具类 + IsEmptyUtil isEmptyUtil = IsEmptyUtil.getInstance(); + /** + *

登陆验证逻辑处理

+ * @return int + * 1 登陆成功 + * 0 必填信息不能为空 + *-1 邮箱不存在或密码错误 + */ + public int doLogin(String email,String password){ + SysAdmin admin = adminMapper.selectByEmail(email); + // 用户名密码不能为空 + if (isEmptyUtil.strings(email,password)){ + return 0; + } + // 不存在该用户 + if (admin==null){ + return -1; + } + // 密码验证 + password = DigestUtils.md5DigestAsHex(password.getBytes()); + // 密码错误 + if (!admin.getPassword().equals(password)){ + return -1; + }else{ + return 1; + } + } + + /* + * 返回用户信息 + */ + public SysAdmin adminInfo(String email){ + return adminMapper.getAdminInfo(email); + } + + /** + *

注册逻辑处理

+ * @return int + *-1 注册超时请重试 + * 0 必填信息不能为空 + * 1 处理请求合理,已发送验证码 + * 2 两次密码不一致 + * 3 邮箱格式有误 + * 4 该邮箱已被注册 + */ + public int singup(String email,String name,String password){ + // 必填信息不能为空 + if (isEmptyUtil.strings(email,name,password)){ + return 0; + } + // 邮箱格式验证 + if(!mailService.checkEmail(email)){ + System.out.println(email); + return 3; + } + + // 该邮箱已被注册 + SysAdmin admin = adminMapper.selectByEmail(email); + password = DigestUtils.md5DigestAsHex(password.getBytes()); + if (admin!=null){ + if (admin.getMark()!=0){ + return 4; + }else{ + if (adminMapper.update(name,password,email)!=1){ + return -1; + } + } + }else{ + // 将信息保存,状态置为0未启用 + + // 添加信息未成功返回超时 + if (adminMapper.insert(name,password,email,0)!=1){ + return -1; + } + } + // 发送注册验证邮件 + boolean res = mailService.sendHtmlMail(email,"捷阅网管理员注册验证","点击此链接完成注册验证"); + if (res){ + return 1; + }else{ + return -1; + } + } + + /** + * 验证邮件确认注册 + * @return int + *-1 404页面 + * 0 网络超时请重试 + * 1 注册成功,跳转至登陆页面 + */ + @Transactional + public int singCheck(String email){ + SysAdmin admin = adminMapper.selectByEmail(email); + if (admin!=null && admin.getMark()==0){ + int res1 = adminMapper.updateMark(1,email); + if (res1==1){ + // 设置用户角色,设置失败则回滚 + if (adminRoleMapper.updateStatus(1,admin.getId()) != 1){ + // 执行回滚 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return 0; + } + return 1; + }else{ + return 0; + } + }else{ + return -1; + } + } +} diff --git a/src/main/java/com/example/jieyue/admin/service/AdminMerchantService.java b/src/main/java/com/example/jieyue/admin/service/AdminMerchantService.java new file mode 100644 index 0000000..a7232f3 --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/service/AdminMerchantService.java @@ -0,0 +1,59 @@ +package com.example.jieyue.admin.service; + +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.mapper.SysMtMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class AdminMerchantService { + @Autowired + SysMtMapper mtMapper; + /** + *

获取用户的信息

+ * + * @param curPage 当前页数 + * @param pageSize 一页的条数 + */ + public List getMtInfo(int curPage,int pageSize){ + int curRow = (curPage-1)*pageSize; + return mtMapper.findPage(curRow,pageSize); + } + + /* + * 删除商户 + */ + public int deleteMerchant(int merchantId){ + if (mtMapper.deleteById(merchantId)==1){ + return 1; + } + return -1; + } + + /* + * 修改用户状态 + */ + public int updateMerchantState(String email,int state){ + if (mtMapper.updateState(email,state)==1){ + return 1; + } + return -1; + } + + /* + * 获取商户列表总页数 + */ + public int getMtPage(int pageSize){ + if (mtMapper.count()==0){ + return 1; + }else{ + return (int)Math.ceil((double)mtMapper.count()/pageSize); + } + } + + public int updateRatio(float ratio,int id){ + return 1; + } +} diff --git a/src/main/java/com/example/jieyue/admin/service/AdminNoticeService.java b/src/main/java/com/example/jieyue/admin/service/AdminNoticeService.java new file mode 100644 index 0000000..baee366 --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/service/AdminNoticeService.java @@ -0,0 +1,72 @@ +package com.example.jieyue.admin.service; + +import com.example.jieyue.common.entity.SysAdmin; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.common.mapper.SysAdminMapper; +import com.example.jieyue.common.mapper.SysMtMapper; +import com.example.jieyue.common.mapper.SysNoticeMapper; +import com.example.jieyue.common.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class AdminNoticeService { + @Autowired + SysUserMapper userMapper; + @Autowired + SysMtMapper merchantMapper; + @Autowired + SysAdminMapper adminMapper; + @Autowired + SysNoticeMapper noticeMapper; + @Autowired + RedisTemplate redisTemplate; + + /* + * 将要发送的消息存入redis消息队列 + */ + public void send(String title,String context,int type){ + Map map = new HashMap<>(); + map.put("title",title); + map.put("context",context); + map.put("type",type+""); + switch (type){ + case 0: + // 获取信息 + List adminList = adminMapper.findAll(); + for (SysAdmin sysAdmin : adminList) { + long createTime = System.currentTimeMillis(); + map.put("createTime",createTime+""); + map.put("receive",sysAdmin.getId()+""); + redisTemplate.opsForList().leftPush("notice",map); + } + break; + case 1: + // 获取信息 + List merchantList = merchantMapper.findAll(); + for (SysMt sysMt : merchantList) { + long createTime = System.currentTimeMillis(); + map.put("createTime",createTime+""); + map.put("receive",sysMt.getId()+""); + redisTemplate.opsForList().leftPush("notice",map); + } + break; + case 2: + // 获取信息 + List userList = userMapper.findAll(); + for (SysUser sysUser : userList) { + long createTime = System.currentTimeMillis(); + map.put("createTime",createTime+""); + map.put("receive",sysUser.getId()+""); + redisTemplate.opsForList().leftPush("notice",map); + } + break; + } + } +} diff --git a/src/main/java/com/example/jieyue/admin/service/AdminOrderService.java b/src/main/java/com/example/jieyue/admin/service/AdminOrderService.java new file mode 100644 index 0000000..a74ca7e --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/service/AdminOrderService.java @@ -0,0 +1,59 @@ +package com.example.jieyue.admin.service; + +import com.example.jieyue.common.entity.SysOrder; +import com.example.jieyue.common.mapper.SysOrderMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class AdminOrderService { + @Autowired + SysOrderMapper orderMapper; + + /* + * 获取订单信息 + */ + public List getOrderList(int page,int num,int flag){ + switch (flag){ + case 0:// 未支付 + return orderMapper.findNotPayLimit((page-1)*num,num); + case 1:// 已支付 + return orderMapper.findPayLimit((page-1)*num,num); + case 2:// 全部订单 + return orderMapper.findLimit((page-1)*num,num); + } + return null; + } + + /* + * 通过订单号查找 + */ + public List getOrderById(String orderId){ + SysOrder order = orderMapper.findByOrderId(orderId); + List list = new ArrayList<>(); + if (order!=null){ + list.add(order); + } + return list; + } + + /* + * 获取总页数 + */ + public int getAllPage(int flag,int num){ + switch (flag){ + case 0:// 未支付 + return (int)Math.ceil((double)orderMapper.notPayCount()/(double)num); + case 1:// 已支付 + return (int)Math.ceil((double)orderMapper.payCount()/(double)num); + case 2:// 全部订单 + return (int)Math.ceil((double)orderMapper.orderCount()/(double)num); + case 3: + return 1; + } + return 1; + } +} diff --git a/src/main/java/com/example/jieyue/admin/service/AdminRbacService.java b/src/main/java/com/example/jieyue/admin/service/AdminRbacService.java new file mode 100644 index 0000000..b07fa4c --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/service/AdminRbacService.java @@ -0,0 +1,44 @@ +package com.example.jieyue.admin.service; + +import com.example.jieyue.common.mapper.SysRoleAccessMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; + +@Service +public class AdminRbacService { + + @Autowired + SysRoleAccessMapper roleAccessMapper; + + /** + *

修改管理员的角色

+ * @return 1 成功 -1 失败 + * @author Bosen + * 2020/12/30 5:19 + * TODO TODO TODO TODO + */ + public int updateAdminRoleAction(int adminId,String roles){ + // 对使用json封装的js数组进行解析 + return -1; + } + + /* + * 修改角色的权限 + */ + @Transactional + public boolean setRoleAccess(int role,int[] ids){ + // 删除角色原权限 + roleAccessMapper.deleteByRoleId(role); + for (int id : ids) { + if (roleAccessMapper.insert(role,id)!=1){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return false; + } + } + return true; + } + + +} diff --git a/src/main/java/com/example/jieyue/admin/service/AdminUiService.java b/src/main/java/com/example/jieyue/admin/service/AdminUiService.java new file mode 100644 index 0000000..8a65586 --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/service/AdminUiService.java @@ -0,0 +1,80 @@ +package com.example.jieyue.admin.service; + +import com.example.jieyue.common.mapper.SysUiMapper; +import com.example.jieyue.common.utils.DateUtil; +import com.example.jieyue.common.utils.FileUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import org.thymeleaf.util.StringUtils; + +import javax.servlet.http.HttpServletRequest; + +@Service +public class AdminUiService { + @Autowired + FileUtil fileUtil; + @Autowired + DateUtil dateUtil; + @Autowired + SysUiMapper uiMapper; + /** + * 文件上传逻辑处理 + * + * @return + * null 上传失败 + * 文件名 上传成功 + */ + public String upImage(MultipartFile file,RedirectAttributes redirectAttributes, + HttpServletRequest request,String url,int weight,int height) { + // 设置filename 文件名由年月日时分秒以及六位随机数组成 + String filename = dateUtil.getNMDHIS()+Math.round(Math.random()*(999999-100000)+100000); + // 接收文件工具类返回的文件位置 + String result = fileUtil.upFile(file,redirectAttributes,request,url,filename); + if (result==null){ + return null; + }else{ + if (uiMapper.findByMark(weight,height) == null) { + int insertRes = uiMapper.insert(result, weight, height); + if (insertRes == 1) { + return filename; + } else { + // sql语句执行失败,将已上传的图片移除 + fileUtil.deleteFile(result); + return null; + } + }else{ + // 删除旧图片 + fileUtil.deleteFile(uiMapper.findByMark(weight,height).getUrl()); + // 更改图片 + int updateRes = uiMapper.updateUrl(result,weight,height); + if (updateRes == 1) { + return filename; + } else { + // sql语句执行失败,将已上传的图片移除 + fileUtil.deleteFile(result); + return null; + } + } + } + } + + /* + * 删除海报逻辑处理 + */ + public boolean delImg(int width,int height){ + if (uiMapper.findByMark(width,height)==null){ + return false; + }else{ + fileUtil.deleteFile(uiMapper.findByMark(width,height).getUrl()); + int delResult = uiMapper.deleteByMark(width,height); + if (delResult == 1) { + return true; + } else { + // sql语句执行失败 + return false; + } + } + } +} diff --git a/src/main/java/com/example/jieyue/admin/service/AdminUserService.java b/src/main/java/com/example/jieyue/admin/service/AdminUserService.java new file mode 100644 index 0000000..acae6ee --- /dev/null +++ b/src/main/java/com/example/jieyue/admin/service/AdminUserService.java @@ -0,0 +1,28 @@ +package com.example.jieyue.admin.service; + +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.common.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class AdminUserService { + @Autowired + SysUserMapper userMapper; + + /* + * 获取用户信息 + */ + public List getUserList(int page, int num){ + return userMapper.findLimit((page-1)*num,num); + } + + /* + * 获取总页数 + */ + public int getAllPage(int num){ + return (int)Math.ceil((double)userMapper.userCount()/(double)num); + } +} diff --git a/src/main/java/com/example/jieyue/alipay/config/AlipayConfig.java b/src/main/java/com/example/jieyue/alipay/config/AlipayConfig.java new file mode 100644 index 0000000..c939a00 --- /dev/null +++ b/src/main/java/com/example/jieyue/alipay/config/AlipayConfig.java @@ -0,0 +1,96 @@ +package com.example.jieyue.alipay.config; + +/* * + *类名:AlipayConfig1 + *功能:基础配置类 + *详细:设置帐户有关信息及返回路径 + *修改日期:2017-04-05 + *说明: + *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。 + *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。 + */ + +import java.io.FileWriter; +import java.io.IOException; + +public class AlipayConfig { + +//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ + + // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 + public static String app_id = "2021002114695818"; + + // 商户私钥,您的PKCS8格式RSA2私钥 + public static String merchant_private_key = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC/0lWCv81WoVbU\n" + + "yOTJ7jM9AV6YRmIOUhLqWHGA1wSXAG57NSkK7SifBcit61hdfZaYzDatmQQn5t4D\n" + + "S+gQ4rQwnerKzoTmWY6EKXV3BAawdLG30SRJhX0739l7Ul+X3giTIUG5R4fG9gTN\n" + + "XnmhGX4yTa2yir/IOeWJ0lqXoKRyxRclaMFsF8gW4EBk5S7PVzMhdjh7EV1D+2QB\n" + + "5baNIFaZvfByMr7V+q2+awlBH7ZoDbviyV+vHmZCC/dOLPaWLTkW+t+ih/z9rqaN\n" + + "fZIOTgaLB7g7hca7dnzCM/G1i2UNHWzU2mRfALK/ppvJKe7J7GTOSu92iVF5Yryr\n" + + "CUv6TcjDAgMBAAECggEAQtqStOwWK8A1XBncK0iakQN+LYIyQJ14PDaw8F+AGQSs\n" + + "fMJtWIKJassAQyVH+eWAbCaYU+6FlUaQUAPPkLsCZANVxnMtvH6v/f3ZE67SigNR\n" + + "wSfiBsHAgPKmgKWX7X0T7ftkRafZeY1a5RytNWmGIxARnq1e4/DRwDQRINF7HwhZ\n" + + "Crp/JXZYOYv/0dSRyV5l/S3J13m7NgimG7nejFc7rRhMS9gXQohD9pXcL8N1F+Af\n" + + "zpSf1AFyCvFA41cQO+SNPbpjXHv2k2WuBOFMt08Rxfn4DKiDhhK9eHN0nB9RVeWl\n" + + "DOY/6RiMketWvMqx5TCltE5WtGchEqYHVwNK6Tfe+QKBgQDt50tdoxisr+kj2JAA\n" + + "BQXZmz5isQpeUt3JruNOnw2hVSbMO60iftLTeB+GHX6hGvD5ViFEDgZotgjYL/p+\n" + + "AW7Dm0+D+ecWvVUhySrab/sMso/B33OCqYfPNdj780+fmqVRrRjnK/J4V0n5AoaC\n" + + "Rx0vfXfJUXonPZ+Jn8RSiW8CNwKBgQDOaa9ljnO6mcSr+k/I7Biq0e4ZFvl10M4G\n" + + "aMDE9AyiGUWn0JIERpLCZ0VIgOqtDXuJo5JwPfIHVppobBqaWdlKBuA2rIwynjls\n" + + "+jfplnVlAQKxkdRUM+8nXW24q0qsNFro+KsCE5y6tevxsHyXihmElv9AhRcsXY2g\n" + + "LM7BDzIX1QKBgQDTM2P38+Pi4qRB+28TZWIlJioDKZK/3Ccjdkw7rv5FvLed1ljE\n" + + "5/w4Wkr6IFMbqTRG1kzgAudzrC875ZQmqxTvOIEl9ARQbrMWNGYD2CfyxM7U2Y/N\n" + + "br2vmelQ+1czpPGhCd+y0pQGe8+i7bgGDiX91BA0vE2Kaq2oWxrJ/1J6jwKBgQCh\n" + + "RffRzHRllmEQ0dlmrfkz9iQnHEk6oTNn1I7RE7GPMVm4HYEIsC9YjyGV3Yv+O+uL\n" + + "Be+TnQKucx7feZ9re8oHScoDTduYbQGHQRVQf8snaJu3K66PP6iaxCfHQqZsV9ez\n" + + "8R6D19j8FMnNo8wlBrSbYPL8cUBC3LGcNYYxV3MXJQKBgQDbh5oML1AJ1FYvkMew\n" + + "v/xCNMvrsJDNPty4oZD3lXAqq2/rbHKxDqsB9PkVcd4xdHrYuHU+MbYeb96hHAyv\n" + + "seYiUCWF/XryBGI/7AcHTKpgBA9TXqudCyPUhz0ewC5vKnYdcqXXTjjL1WqILegj\n" + + "cSLF6WzY1X1kw7j9IuP6wyZQZg=="; + + // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。 + public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuaRqJqDOBRNsIa1MkgyiR6kRUk+M8cbNmGFN0RDy1NJmxyaR/iqIi5k8vQZ+qnVelXTVVEEYKiYaIxj6co8ERKPXlrnk/GiRxn410jX35iLnm/BgwXaiVP1Fx6kusiXiCGWgrvEsbAMFvbZqyqT/z8m+ogQ7JPTkoauzzu16JJxpcSPEf7SPnbuiBjHbUqRGP1pAa1yVun0eVFHaFeqi+cRfGDhwym2xEAMokJh+aFlU3AnCg/f7fBek4UNi6anAadoX3dKcB8cNeIMzg5FaplZP2V0ztLg2Qvw4ezKSWUFB4hFD0d6De61zwpGjgl+ouobyL4prsUA3qlT48E8d8wIDAQAB"; + + // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 + public static String notify_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp"; + + // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 + public static String return_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp"; + + // 签名方式 + public static String sign_type = "RSA2"; + + // 字符编码格式 + public static String charset = "utf-8"; + + // 支付宝网关 + public static String gatewayUrl = "https://openapi.alipay.com/gateway.do"; + + // 支付宝网关 + public static String log_path = "C:\\"; + + +//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ + + /** + * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库) + * @param sWord 要写入日志里的文本内容 + */ + public static void logResult(String sWord) { + FileWriter writer = null; + try { + writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt"); + writer.write(sWord); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (writer != null) { + try { + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/src/main/java/com/example/jieyue/alipay/readme.txt b/src/main/java/com/example/jieyue/alipay/readme.txt new file mode 100644 index 0000000..8590330 --- /dev/null +++ b/src/main/java/com/example/jieyue/alipay/readme.txt @@ -0,0 +1,42 @@ +л + +Eclipse+JDK1.6+Tomcat6.0 + + +ʹ÷ + +SDKصַ +https://doc.open.alipay.com/docs/doc.htm?treeId=193&articleId=103419&docType=1 + +һءJAVAԴSDK + +ڶϺ󣬰ѹѹ + +ѹalipay-sdk-javaXXX.jarcommons-logging-1.1.1.jarܰļ빤Ŀalipay.trade.page.pay-PHP-UTF-8\WebContent\WEB-INF\libС + +IJAlipayConfig.javaļϢ棬ϢУapp_idmerchant_private_keyalipay_public_keyreturn_urlnotify_url +bizContentĸ÷ƴӷʽĵhttps://doc.open.alipay.com/docs/doc.htm?treeId=270&articleId=105899&docType=1 + +岽index.jspļ + +֧̣Чȡ + + +ҵע + +notify_urlļreturn_urlļУnotify_urlļҪдҵ߼룬д + +֤첽֪ͨݣ + +1̻Ҫ֤֪ͨеout_trade_noǷΪ̻ϵͳдĶ + +2жtotal_amountǷȷʵΪöʵʽ̻ʱĽ + +3У֪ͨеseller_idseller_email) ǷΪñʽ׶ӦIJһ̻жseller_id/seller_email + +4֤ӿڵ÷app_id + + +˵ + +demoΪѧϰοʹãʵпѹǶĿƽ̨С \ No newline at end of file diff --git a/src/main/java/com/example/jieyue/common/component/LoginHandlerInterceptor.java b/src/main/java/com/example/jieyue/common/component/LoginHandlerInterceptor.java new file mode 100644 index 0000000..8385802 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/component/LoginHandlerInterceptor.java @@ -0,0 +1,91 @@ +package com.example.jieyue.common.component; + +import com.example.jieyue.common.mapper.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + *

+ * 访问网页地址时的过滤器, + * 查看用户是否登陆, + * 未登陆返回至指定页面 + *

+ * @author Bosen + * 2020/11/2 14:07 + */ +@Component +public class LoginHandlerInterceptor implements HandlerInterceptor { + @Autowired + SysAdminMapper adminMapper; + @Autowired + SysRoleMapper roleMapper; + @Autowired + SysAccessMapper accessMapper; + @Autowired + SysAdminRoleMapper adminRoleMapper; + @Autowired + SysRoleAccessMapper roleAccessMapper; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + // 判断请求 + String uri = request.getRequestURI(); + String admin = "/admin[\\d\\w\\S]*"; + String merchant = "/mer[\\d\\w\\S]*"; + Pattern adminPattern = Pattern.compile(admin); + Pattern merchantPattern = Pattern.compile(merchant); + if(adminPattern.matcher(uri).matches()){ + // admin + Object user = request.getSession().getAttribute("admin"); + if (user == null) { + // 获取request返回页面到登录页 + request.getRequestDispatcher("/admin/login").forward(request, response); + return false; + } + }else if (merchantPattern.matcher(uri).matches()){ + // merchant + Object user = request.getSession().getAttribute("merchant"); + if (user == null) { + // 获取request返回页面到登录页 + request.getRequestDispatcher("/merchant/login").forward(request, response); + return false; + } + }else{ + // user + Object user = request.getSession().getAttribute("user"); + if (user == null) { + // 获取request返回页面到登录页 + request.getRequestDispatcher("/user/login").forward(request, response); + return false; + } + } + return true; + } + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + + } + + /** + *

管理员权限判断

+ * @author Bosen + * 2020/12/7 7:09 + */ + public boolean checkAdminAccess(int adminId,String url){ + int roleId = adminRoleMapper.findByAdminId(adminId).getRoleId(); + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/jieyue/common/config/AdminWebMvcConfigurer.java b/src/main/java/com/example/jieyue/common/config/AdminWebMvcConfigurer.java new file mode 100644 index 0000000..eae9046 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/config/AdminWebMvcConfigurer.java @@ -0,0 +1,35 @@ +package com.example.jieyue.common.config; + +import com.example.jieyue.common.component.LoginHandlerInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + *

后台登陆拦截器

+ * @author Bosen + * 2020/11/2 14:08 + */ +@Configuration +public class AdminWebMvcConfigurer implements WebMvcConfigurer { + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/index.html").setViewName("/admin/login"); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + /* + * 网站主页,静态资源,网站作者页面,以及登陆注册所需页面外,未登录时的访问 统一跳转至登陆注册页面 + */ + registry.addInterceptor(new LoginHandlerInterceptor()) + .addPathPatterns("/admin/**") + .excludePathPatterns( + "/admin/login","/admin/do-login","/admin/sign-up","/admin/sign-check", + "/css/**","/js/**","/image/**","/fonts/**","/mapping/**","/data/**", + "/lib/*/*/**" + ); + } + +} diff --git a/src/main/java/com/example/jieyue/common/config/MerchantWebMvcConfigurer.java b/src/main/java/com/example/jieyue/common/config/MerchantWebMvcConfigurer.java new file mode 100644 index 0000000..15828da --- /dev/null +++ b/src/main/java/com/example/jieyue/common/config/MerchantWebMvcConfigurer.java @@ -0,0 +1,34 @@ +package com.example.jieyue.common.config; + +import com.example.jieyue.common.component.LoginHandlerInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + *

商户登陆拦截器

+ * @author Bosen + * 2020/11/2 14:08 + */ +@Configuration +public class MerchantWebMvcConfigurer implements WebMvcConfigurer { + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/index.html").setViewName("/merchant/login"); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + /* + * 网站主页,静态资源,网站作者页面,以及登陆注册所需页面外,未登录时的访问 统一跳转至登陆注册页面 + */ + registry.addInterceptor(new LoginHandlerInterceptor()) + .addPathPatterns("/mer*/**") + .excludePathPatterns( + "/merchant/login","/merchant/do-login","/merchant/sign-up","/merchant/sign-check", + "/css/**","/js/**","/image/**","/fonts/**","/mapping/**","/data/**", + "/lib/*/*/**" + ); + } +} diff --git a/src/main/java/com/example/jieyue/common/config/RedisConfigurer.java b/src/main/java/com/example/jieyue/common/config/RedisConfigurer.java new file mode 100644 index 0000000..8dd61f2 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/config/RedisConfigurer.java @@ -0,0 +1,48 @@ +package com.example.jieyue.common.config; + +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + *

redis配置类

+ * @author Bosen + * 2020/12/6 13:54 + */ +@Configuration +@EnableCaching +public class RedisConfigurer extends CachingConfigurerSupport { + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(connectionFactory); + // 使用Jackson2JsonRedisSerializer来序列化/反序列化redis的value值 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer( + Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, + com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY); + objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(objectMapper); + // value + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); + + // 使用StringRedisSerializer来序列化/反序列化redis的key值 + RedisSerializer redisSerializer = new StringRedisSerializer(); + // key + redisTemplate.setKeySerializer(redisSerializer); + redisTemplate.setHashKeySerializer(redisSerializer); + + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/jieyue/common/config/TransactionManagerConfiguration.java b/src/main/java/com/example/jieyue/common/config/TransactionManagerConfiguration.java new file mode 100644 index 0000000..182715c --- /dev/null +++ b/src/main/java/com/example/jieyue/common/config/TransactionManagerConfiguration.java @@ -0,0 +1,20 @@ +package com.example.jieyue.common.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.TransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import javax.sql.DataSource; + +@EnableTransactionManagement +@Configuration +public class TransactionManagerConfiguration { + @Autowired + private DataSource dataSource; + + public TransactionManager createTransactionManager(){ + return new DataSourceTransactionManager(dataSource); + } +} diff --git a/src/main/java/com/example/jieyue/common/config/UserWebMvcConfigurer.java b/src/main/java/com/example/jieyue/common/config/UserWebMvcConfigurer.java new file mode 100644 index 0000000..662f9c1 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/config/UserWebMvcConfigurer.java @@ -0,0 +1,36 @@ +package com.example.jieyue.common.config; + +import com.example.jieyue.common.component.LoginHandlerInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + *

用户登陆拦截器

+ * @author Bosen + * 2020/11/2 14:08 + */ +@Configuration +public class UserWebMvcConfigurer implements WebMvcConfigurer { + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/index.html").setViewName("/user/login"); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + /* + * 网站主页,静态资源,网站作者页面,以及登陆注册所需页面外,未登录时的访问 统一跳转至登陆注册页面 + */ + registry.addInterceptor(new LoginHandlerInterceptor()) + .addPathPatterns("/user/**") + .excludePathPatterns( + "/","/user/home","/user/login","/user/do-login","/user/sign-up","/user/sign-check", + "/css/**","/js/**","/image/**","/fonts/**","/mapping/**","/data/**","/user/check-order-status", + "/lib/*/*/**","/user/about","/user/product","/user/shop","/user/search","/user/wxpay/notify", + "/user/pay/test" + ); + } + +} diff --git a/src/main/java/com/example/jieyue/common/controller/TestController.java b/src/main/java/com/example/jieyue/common/controller/TestController.java new file mode 100644 index 0000000..c328613 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/controller/TestController.java @@ -0,0 +1,22 @@ +package com.example.jieyue.common.controller; + +import org.springframework.util.ResourceUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.FileNotFoundException; + +@RestController +public class TestController { + @RequestMapping("test") + public String test() throws FileNotFoundException { + + return ResourceUtils.getFile("classpath:/static").getPath()+"\\"; + } + + @RequestMapping("/test/check") + public String check(int id){ + System.out.println("id="+id); + return "This is test/check"; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysAccess.java b/src/main/java/com/example/jieyue/common/entity/SysAccess.java new file mode 100644 index 0000000..c167981 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysAccess.java @@ -0,0 +1,40 @@ +package com.example.jieyue.common.entity; + +public class SysAccess { + private int id; + private String name; + private String url; + private int status; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysAdmin.java b/src/main/java/com/example/jieyue/common/entity/SysAdmin.java new file mode 100644 index 0000000..6c60b75 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysAdmin.java @@ -0,0 +1,60 @@ +package com.example.jieyue.common.entity; + +public class SysAdmin { + private int id; + private String name; + private String password; + private String email; + private int mark; + + @Override + public String toString() { + return "SysAdmin{" + + "id=" + id + + ", name='" + name + '\'' + + ", password='" + password + '\'' + + ", email='" + email + '\'' + + ", mark=" + mark + + '}'; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public int getMark() { + return mark; + } + + public void setMark(int mark) { + this.mark = mark; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysAdminRole.java b/src/main/java/com/example/jieyue/common/entity/SysAdminRole.java new file mode 100644 index 0000000..0e9e3e5 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysAdminRole.java @@ -0,0 +1,40 @@ +package com.example.jieyue.common.entity; + +public class SysAdminRole { + private int id; + private int adminId; + private int roleId; + private int status; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getAdminId() { + return adminId; + } + + public void setAdminId(int adminId) { + this.adminId = adminId; + } + + public int getRoleId() { + return roleId; + } + + public void setRoleId(int roleId) { + this.roleId = roleId; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysCart.java b/src/main/java/com/example/jieyue/common/entity/SysCart.java new file mode 100644 index 0000000..f1afe62 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysCart.java @@ -0,0 +1,40 @@ +package com.example.jieyue.common.entity; + +public class SysCart { + private int id; + private int goodsId; + private int userId; + private int goodsNum; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getGoodsId() { + return goodsId; + } + + public void setGoodsId(int goodsId) { + this.goodsId = goodsId; + } + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getGoodsNum() { + return goodsNum; + } + + public void setGoodsNum(int goodsNum) { + this.goodsNum = goodsNum; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysComment.java b/src/main/java/com/example/jieyue/common/entity/SysComment.java new file mode 100644 index 0000000..0a3cb0d --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysComment.java @@ -0,0 +1,58 @@ +package com.example.jieyue.common.entity; + +public class SysComment { + private int id; + private int user; + private int goods; + private int merchant; + private String context; + private long createTime; + + public int getMerchant() { + return merchant; + } + + public void setMerchant(int merchant) { + this.merchant = merchant; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getUser() { + return user; + } + + public void setUser(int user) { + this.user = user; + } + + public int getGoods() { + return goods; + } + + public void setGoods(int goods) { + this.goods = goods; + } + + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysGoods.java b/src/main/java/com/example/jieyue/common/entity/SysGoods.java new file mode 100644 index 0000000..31bf0e3 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysGoods.java @@ -0,0 +1,91 @@ +package com.example.jieyue.common.entity; + +import java.math.BigDecimal; + +public class SysGoods { + private int id; + private String name; + private String describe; + private String img; + private BigDecimal price; + private int state; + private int merchant; + private int stock; + + @Override + public String toString() { + return "SysGoods{" + + "id=" + id + + ", name='" + name + '\'' + + ", describe='" + describe + '\'' + + ", img='" + img + '\'' + + ", price=" + price + + ", state=" + state + + ", merchant=" + merchant + + '}'; + } + + public int getStock() { + return stock; + } + + public void setStock(int stock) { + this.stock = stock; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescribe() { + return describe; + } + + public void setDescribe(String describe) { + this.describe = describe; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + public int getMerchant() { + return merchant; + } + + public void setMerchant(int merchant) { + this.merchant = merchant; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysMt.java b/src/main/java/com/example/jieyue/common/entity/SysMt.java new file mode 100644 index 0000000..a80cc4b --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysMt.java @@ -0,0 +1,67 @@ +package com.example.jieyue.common.entity; + +public class SysMt { + private int id; + private String name; + private String email; + private String password; + private float ratio; + private int state; + private String header; + + public String getHeader() { + return header; + } + + public void setHeader(String header) { + this.header = header; + } + + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public float getRatio() { + return ratio; + } + + public void setRatio(float ratio) { + this.ratio = ratio; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysMtUi.java b/src/main/java/com/example/jieyue/common/entity/SysMtUi.java new file mode 100644 index 0000000..2375604 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysMtUi.java @@ -0,0 +1,61 @@ +package com.example.jieyue.common.entity; + +public class SysMtUi { + private int id; + private String url; + private int width; + private int height; + private int merchant; + + @Override + public String toString() { + return "SysMtUi{" + + "id=" + id + + ", url='" + url + '\'' + + ", width=" + width + + ", height=" + height + + ", merchant=" + merchant + + '}'; + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + + public int getMerchant() { + return merchant; + } + + public void setMerchant(int merchant) { + this.merchant = merchant; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysNotice.java b/src/main/java/com/example/jieyue/common/entity/SysNotice.java new file mode 100644 index 0000000..1da8245 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysNotice.java @@ -0,0 +1,58 @@ +package com.example.jieyue.common.entity; + +public class SysNotice { + private int id; + private int type; + private String title; + private String context; + private int receive; + private long createTime; + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + + public int getReceive() { + return receive; + } + + public void setReceive(int receive) { + this.receive = receive; + } + + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysOrder.java b/src/main/java/com/example/jieyue/common/entity/SysOrder.java new file mode 100644 index 0000000..0785d06 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysOrder.java @@ -0,0 +1,187 @@ +package com.example.jieyue.common.entity; + +import java.math.BigDecimal; + +public class SysOrder { + private int id; + private String orderId; + private long createTime; + private long payTime; + private int goodsNum; + private int orderState; + private String orderMark; + private int orderMerchant; + private int orderUser; + private int goodsId; + private BigDecimal orderPrice; + private String orderNotes; + private String userAddress; + private String userName; + private String couponCode; + private int payWay; + private String payCodeUrl; + private int cartId; + private float merchantRatio; + + public float getMerchantRatio() { + return merchantRatio; + } + + public void setMerchantRatio(float merchantRatio) { + this.merchantRatio = merchantRatio; + } + + public int getCartId() { + return cartId; + } + + public void setCartId(int cartId) { + this.cartId = cartId; + } + + public String getPayCodeUrl() { + return payCodeUrl; + } + + public void setPayCodeUrl(String payCodeUrl) { + this.payCodeUrl = payCodeUrl; + } + + public int getPayWay() { + return payWay; + } + + public void setPayWay(int payWay) { + this.payWay = payWay; + } + + public String getCouponCode() { + return couponCode; + } + + public void setCouponCode(String couponCode) { + this.couponCode = couponCode; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } + + public long getPayTime() { + return payTime; + } + + public void setPayTime(long payTime) { + this.payTime = payTime; + } + + public int getGoodsNum() { + return goodsNum; + } + + public void setGoodsNum(int goodsNum) { + this.goodsNum = goodsNum; + } + + public int getOrderState() { + return orderState; + } + + public void setOrderState(int orderState) { + this.orderState = orderState; + } + + public String getOrderMark() { + return orderMark; + } + + public void setOrderMark(String orderMark) { + this.orderMark = orderMark; + } + + public int getOrderMerchant() { + return orderMerchant; + } + + public void setOrderMerchant(int orderMerchant) { + this.orderMerchant = orderMerchant; + } + + public int getOrderUser() { + return orderUser; + } + + public void setOrderUser(int orderUser) { + this.orderUser = orderUser; + } + + public int getGoodsId() { + return goodsId; + } + + public void setGoodsId(int goodsId) { + this.goodsId = goodsId; + } + + public BigDecimal getOrderPrice() { + return orderPrice; + } + + public void setOrderPrice(BigDecimal orderPrice) { + this.orderPrice = orderPrice; + } + + public String getOrderNotes() { + return orderNotes; + } + + public void setOrderNotes(String orderNotes) { + this.orderNotes = orderNotes; + } + + public String getUserAddress() { + return userAddress; + } + + public void setUserAddress(String userAddress) { + this.userAddress = userAddress; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserPhone() { + return userPhone; + } + + public void setUserPhone(String userPhone) { + this.userPhone = userPhone; + } + + private String userPhone; +} \ No newline at end of file diff --git a/src/main/java/com/example/jieyue/common/entity/SysRole.java b/src/main/java/com/example/jieyue/common/entity/SysRole.java new file mode 100644 index 0000000..c2f0d13 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysRole.java @@ -0,0 +1,31 @@ +package com.example.jieyue.common.entity; + +public class SysRole { + private int id; + private String name; + private int status; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysRoleAccess.java b/src/main/java/com/example/jieyue/common/entity/SysRoleAccess.java new file mode 100644 index 0000000..d97fa8b --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysRoleAccess.java @@ -0,0 +1,40 @@ +package com.example.jieyue.common.entity; + +public class SysRoleAccess { + private int id; + private int roleId; + private int accessId; + private int status; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getRoleId() { + return roleId; + } + + public void setRoleId(int roleId) { + this.roleId = roleId; + } + + public int getAccessId() { + return accessId; + } + + public void setAccessId(int accessId) { + this.accessId = accessId; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysUi.java b/src/main/java/com/example/jieyue/common/entity/SysUi.java new file mode 100644 index 0000000..0c40031 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysUi.java @@ -0,0 +1,35 @@ +package com.example.jieyue.common.entity; + +public class SysUi { + private int id; + private String url; + private int width; + private int height; + + @Override + public String toString() { + return "SysUi{" + + "id=" + id + + ", url='" + url + '\'' + + ", width=" + width + + ", height=" + height + + '}'; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + +} diff --git a/src/main/java/com/example/jieyue/common/entity/SysUser.java b/src/main/java/com/example/jieyue/common/entity/SysUser.java new file mode 100644 index 0000000..fcb8439 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/entity/SysUser.java @@ -0,0 +1,70 @@ +package com.example.jieyue.common.entity; + +public class SysUser { + private int id; + private String username; + private String password; + private String email; + private int mark; + private String header; + + @Override + public String toString() { + return "SysUser{" + + "id=" + id + + ", username='" + username + '\'' + + ", password='" + password + '\'' + + ", email='" + email + '\'' + + ", mark=" + mark + + ", header='" + header + '\'' + + '}'; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public int getMark() { + return mark; + } + + public void setMark(int mark) { + this.mark = mark; + } + + public String getHeader() { + return header; + } + + public void setHeader(String header) { + this.header = header; + } +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysAccessMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysAccessMapper.java new file mode 100644 index 0000000..4d98e39 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysAccessMapper.java @@ -0,0 +1,21 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysAccess; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysAccessMapper { + List findAll(); + + int countByName(String name); + + int insert(String name,String url); + + int deleteById(int id); + + int updateStatus(int status,int id); + + int updateInfo(int id,String name,String url); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysAdminMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysAdminMapper.java new file mode 100644 index 0000000..92894aa --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysAdminMapper.java @@ -0,0 +1,20 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysAdmin; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysAdminMapper { + List findAll(); + int insert(@Param("name") String name, @Param("password") String password, + @Param("email") String email, @Param("mark") int mark); + SysAdmin selectByEmail(String email); + SysAdmin getAdminInfo(String email); + int deleteById(int id); + int updateMark(int mark,String email); + int updateMarkById(int id,int mark); + int update(String name,String password,String email); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysAdminRoleMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysAdminRoleMapper.java new file mode 100644 index 0000000..7653773 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysAdminRoleMapper.java @@ -0,0 +1,23 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysAdminRole; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysAdminRoleMapper { + List findAll(); + + SysAdminRole findByAdminId(int adminId); + + int insert(int adminId,int roleId); + + int deleteById(int id); + + int deleteByAdminId(int adminId); + + int deleteByRoleId(int roleId); + + int updateStatus(int status,int id); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysCartMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysCartMapper.java new file mode 100644 index 0000000..d30bc39 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysCartMapper.java @@ -0,0 +1,19 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysCart; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysCartMapper { + List findByUserIdLimit(int userId); + + List findAll(); + + int insert(int userId,int goodsId,int goodsNum); + + int deleteById(int id); + + int countByUserIdAndGoodsId(int userId,int goodsId); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysCommentMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysCommentMapper.java new file mode 100644 index 0000000..346a358 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysCommentMapper.java @@ -0,0 +1,20 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysComment; +import org.apache.ibatis.annotations.Insert; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysCommentMapper { + SysComment findById(int id); + int getAllCountByGoods(int id); + int getAllCountByMt(int merchant); + + List findByGoodsLimit(int goods,int preNum,int sufNum); + + int insert(int user,int goods,int merchant,String context,long createTime); + + int deleteById(int id); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysGoodsMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysGoodsMapper.java new file mode 100644 index 0000000..721766d --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysGoodsMapper.java @@ -0,0 +1,32 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysGoods; +import org.springframework.stereotype.Repository; + +import java.math.BigDecimal; +import java.util.List; + +@Repository +public interface SysGoodsMapper { + SysGoods findById(int id); + List findByMt(int merchant); + List findByMtLimit(int merchant,int preNum,int sufNum); + List findAll(); + List findLimitByMt(int merchant,int preNum,int sufNum); + List findAllEsc(int num); + List findRand(int num); + List findMerchantRand(int merchant,int num); + List findAllDesc(int num); + List search(String keyword); + int goodsCount(int merchant); + int allGoodsCount(); + int countByMerchant(int merchant); + int deleteById(int id); + int addStock(int id,int stock); + int delStock(int id,int stock); + int updateState(int id,int state); + int updateGoods1(String name,String describe,BigDecimal price,int merchant,int stock,int id); + int updateGoods2(String name,String describe,BigDecimal price,int merchant,int stock,int id,String imgUrl); + int insert1(String name,String describe,BigDecimal price,int merchant,int stock); + int insert2(String name, String describe, BigDecimal price, int merchant,int stock, String img); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysMtMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysMtMapper.java new file mode 100644 index 0000000..ac6abbe --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysMtMapper.java @@ -0,0 +1,31 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysMt; +import com.sun.xml.internal.bind.v2.TODO; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysMtMapper { + int insert(String name,String email,String password,float ratio,int state); + SysMt findByEmail(String email); + SysMt findById(int id); + + int count(); + + List findPage(int curRow,int pageSize); + List findAll(); + int deleteById(int id); + + int updateRatio(int id,float ratio); + + int updateState(String email,int state); + + int updateHeader(int id,String header); + + int update(String name,String password,String email); + // todo + int updateName(String name); + +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysMtUiMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysMtUiMapper.java new file mode 100644 index 0000000..3e7401a --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysMtUiMapper.java @@ -0,0 +1,17 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysMtUi; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysMtUiMapper { + SysMtUi findByMark(int width, int height, int merchant); + SysMtUi findById(int id); + List findLimit(int width, int height, int num); + int updateUrl(String url, int width, int height,int merchant); + int insert(String url, int width, int height,int merchant); + int deleteByMark(int width, int height,int merchant); + int deleteById(int id); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysNoticeMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysNoticeMapper.java new file mode 100644 index 0000000..8d87111 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysNoticeMapper.java @@ -0,0 +1,15 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysNotice; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysNoticeMapper { + List findByReceiveTypeLimit(int receive,int type,int preNum,int sufNum); + + int deleteById(int id); + + int insert(String title,String context,int type,int receive,long createTime); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysOrderMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysOrderMapper.java new file mode 100644 index 0000000..00f8d91 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysOrderMapper.java @@ -0,0 +1,54 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysOrder; +import org.springframework.stereotype.Repository; + +import java.math.BigDecimal; +import java.util.List; + +@Repository +public interface SysOrderMapper { + List findLimit(int preNum,int sufNum); + List findPayLimit(int preNum,int sufNum); + List findNotPayLimit(int preNum,int sufNum); + + List findLimitByMt(int merchantId,int preNum,int sufNum); + List findPayLimitByMt(int merchantId,int preNum,int sufNum); + List findNotPayLimitByMt(int merchantId,int preNum,int sufNum); + + List findAll(); + List findByUser(int user,int preNum,int sufNum); + List findByMerchant(int merchant,int num); + List findByState(int state); + SysOrder findByOrderId(String orderId); + SysOrder findByOrderIdAndMt(String orderId,int merchant); + List findByOrderMark(String orderMark); + + int orderCount(); + int payCount(); + int notPayCount(); + + int orderCountByUser(int userId); + int orderCountByMt(int merchantId); + int payCountByMt(int merchantId); + int notPayCountByMt(int merchantId); + + // 修改订单状态 + int updateState(long pay_time,String orderMark); + + int updateCodeUrl(String codeUrl,String orderMark); + + int deleteById(int id); + + // 添加订单 + int insert1(String orderId, long createTime, int goodsNum, String orderMark, int orderUser, int orderMerchant, + BigDecimal orderPrice,int goodsId,String orderNotes,String userAddress,String userName, + String userPhone,String couponCode,int payWay,float merchantRatio); + int insert2(String orderId, long createTime, int goodsNum, String orderMark, int orderUser, int orderMerchant, + BigDecimal orderPrice,int goodsId,String orderNotes,String userAddress,String userName, + String userPhone,String couponCode,int payWay,String cartId,float merchantRatio); + + // 收益 + float websiteProfitCount(); + float merchantProfitCount(int merchantId); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysRoleAccessMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysRoleAccessMapper.java new file mode 100644 index 0000000..85beee9 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysRoleAccessMapper.java @@ -0,0 +1,23 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysRoleAccess; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysRoleAccessMapper { + List findAll(); + + List findByRoleId(int roleId); + + int insert(int roleId,int accessId); + + int deleteById(int id); + + int deleteByRoleId(int roleId); + + int deleteByAccessId(int accessId); + + int updateStatus(int status,int id); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysRoleMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysRoleMapper.java new file mode 100644 index 0000000..4c0c8bf --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysRoleMapper.java @@ -0,0 +1,21 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysRole; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysRoleMapper { + List findAll(); + + SysRole findById(int id); + + int countByName(String name); + + int insert(String name); + + int deleteById(int id); + + int updateStatus(int status,int id); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysUiMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysUiMapper.java new file mode 100644 index 0000000..854b588 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysUiMapper.java @@ -0,0 +1,12 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysUi; +import org.springframework.stereotype.Repository; + +@Repository +public interface SysUiMapper { + SysUi findByMark(int width,int height); + int updateUrl(String url,int width,int height); + int insert(String url,int width,int height); + int deleteByMark(int width,int height); +} diff --git a/src/main/java/com/example/jieyue/common/mapper/SysUserMapper.java b/src/main/java/com/example/jieyue/common/mapper/SysUserMapper.java new file mode 100644 index 0000000..0159d80 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/mapper/SysUserMapper.java @@ -0,0 +1,22 @@ +package com.example.jieyue.common.mapper; + +import com.example.jieyue.common.entity.SysUser; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysUserMapper { + SysUser selectById(int id); + List findLimit(int preNum,int sufNum); + int userCount(); + List findAll(); + int insert(@Param("username") String username,@Param("password") String password, + @Param("email") String email,@Param("mark") int mark); + SysUser selectByEmail(String email); + SysUser getUserInfo(String email); + int updateMark(int mark,String email); + int update(String username,String password,String email); + int updateById(String username,String password,String header,String email,int id); +} diff --git a/src/main/java/com/example/jieyue/common/service/MailService.java b/src/main/java/com/example/jieyue/common/service/MailService.java new file mode 100644 index 0000000..8271726 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/service/MailService.java @@ -0,0 +1,123 @@ +package com.example.jieyue.common.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.FileSystemResource; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import java.io.File; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Service +public class MailService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口,这里直接注入即可使用 + */ + @Autowired + private JavaMailSender mailSender; + + /** + * 配置文件中我的qq邮箱 + */ + @Value("${spring.mail.from}") + private String from; + + /** + * 简单文本邮件 + * @param to 收件人 + * @param subject 主题 + * @param content 内容 + */ + public void sendSimpleMail(String to, String subject, String content) { + //创建SimpleMailMessage对象 + SimpleMailMessage message = new SimpleMailMessage(); + //邮件发送人 + message.setFrom(from); + //邮件接收人 + message.setTo(to); + //邮件主题 + message.setSubject(subject); + //邮件内容 + message.setText(content); + //发送邮件 + mailSender.send(message); + } + + /** + * html邮件 + * @param to 收件人 + * @param subject 主题 + * @param content 内容 + */ + public boolean sendHtmlMail(String to, String subject, String content) { + //获取MimeMessage对象 + MimeMessage message = mailSender.createMimeMessage(); + MimeMessageHelper messageHelper; + try { + messageHelper = new MimeMessageHelper(message, true); + //邮件发送人 + messageHelper.setFrom(from); + //邮件接收人 + messageHelper.setTo(to); + //邮件主题 + message.setSubject(subject); + //邮件内容,html格式 + messageHelper.setText(content, true); + //发送 + mailSender.send(message); + //日志信息 + logger.info("邮件已经发送。"); + return true; + } catch (MessagingException e) { + logger.error("发送邮件时发生异常!", e); + return false; + } + } + + /** + * 带附件的邮件 + * @param to 收件人 + * @param subject 主题 + * @param content 内容 + * @param filePath 附件 + */ + public void sendAttachmentsMail(String to, String subject, String content, String filePath) { + MimeMessage message = mailSender.createMimeMessage(); + try { + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(to); + helper.setSubject(subject); + helper.setText(content, true); + + FileSystemResource file = new FileSystemResource(new File(filePath)); + String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); + helper.addAttachment(fileName, file); + mailSender.send(message); + //日志信息 + logger.info("邮件已经发送。"); + } catch (MessagingException e) { + logger.error("发送邮件时发生异常!", e); + } + } + + /* + * 邮箱格式验证 + */ + public boolean checkEmail(String email){ + String check = "^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$"; + Pattern regex = Pattern.compile(check); + Matcher matcher = regex.matcher(email); + return matcher.matches(); + } +} diff --git a/src/main/java/com/example/jieyue/common/service/SysUserService.java b/src/main/java/com/example/jieyue/common/service/SysUserService.java new file mode 100644 index 0000000..6dfc0a3 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/service/SysUserService.java @@ -0,0 +1,42 @@ +package com.example.jieyue.common.service; + +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.common.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class SysUserService { + @Autowired + SysUserMapper userMapper; + + public SysUser selectById(int id){ + return userMapper.selectById(id); + } + + public SysUser selectByEmail(String email){ + return userMapper.selectByEmail(email); + } + + public SysUser getUserInfo(String email){ + return userMapper.getUserInfo(email); + } + + public List findAll(){ + return userMapper.findAll(); + } + + public int insert(String username,String password,String email,int mark){ + return userMapper.insert(username,password,email,mark); + } + + public int updateMark(int mark,String email){ + return userMapper.updateMark(mark,email); + } + + public int update(String username,String password,String email){ + return userMapper.update(username,password,email); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/jieyue/common/task/SchedulerTask.java b/src/main/java/com/example/jieyue/common/task/SchedulerTask.java new file mode 100644 index 0000000..a87b7e8 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/task/SchedulerTask.java @@ -0,0 +1,111 @@ +package com.example.jieyue.common.task; + +import com.example.jieyue.common.entity.SysOrder; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.mapper.SysNoticeMapper; +import com.example.jieyue.common.mapper.SysOrderMapper; +import com.example.jieyue.common.service.MailService; +import com.example.jieyue.common.utils.FileUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + *

定时任务执行类

+ * @author Bosen + * 2020/11/13 13:41 + */ +@Component +public class SchedulerTask { + @Autowired + SysOrderMapper orderMapper; + @Autowired + SysGoodsMapper goodsMapper; + @Autowired + FileUtil fileUtil; + @Autowired + RedisTemplate redisTemplate; + @Autowired + SysNoticeMapper noticeMapper; + @Autowired + MailService mailService; + + /* + * 每分钟执行一次,检查是否有过期的订单,若过期将其删除,并恢复库存 + */ + @Scheduled(cron="* */1 * * * ?") + @Transactional + public void delOverOrder(){ + long time = 2*60*60*1000;// 订单过期时间,两小时 + List list = orderMapper.findByState(0); + for (SysOrder sysOrder : list) { + if (System.currentTimeMillis() > sysOrder.getCreateTime()+time){ + if (orderMapper.deleteById(sysOrder.getId())!=1 || + goodsMapper.addStock(sysOrder.getGoodsId(),sysOrder.getGoodsNum()) != 1){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + }else{ + fileUtil.deleteFile(sysOrder.getPayCodeUrl()); + } + } + } + } + + /* + * 每分钟执行一次,对已创建了两小时订单的二维码进行删除 + */ + @Scheduled(cron="* */1 * * * ?") + public void delQRCode(){ + long time = 2*60*60*1000;// 订单过期时间,两小时 + List list = orderMapper.findAll(); + for (SysOrder sysOrder : list) { + if (System.currentTimeMillis() > sysOrder.getCreateTime()+time){ + fileUtil.deleteFile(sysOrder.getPayCodeUrl()); + } + } + } + + /* + * 每分钟执行一次,对消息队列的消息执行发送 + */ + @Scheduled(cron="* */1 * * * ?") + public void sendNotice(){ + while (redisTemplate.opsForList().size("notice")!=0){ + Map map = (Map)redisTemplate.opsForList().rightPop("notice"); + String title = map.get("title"); + String context = map.get("context"); + int type = Integer.valueOf(map.get("type")); + int receive = Integer.valueOf(map.get("receive")); + long createTime = Long.valueOf(map.get("createTime")); + switch (type){ + case 0: + noticeMapper.insert(title,context,type,receive,createTime); + break; + case 1: + noticeMapper.insert(title,context,type,receive,createTime); + break; + case 2: + noticeMapper.insert(title,context,type,receive,createTime); + break; + } + } + } + + /* + * 每分钟执行一次,邮箱发送队列的执行发送 + */ + @Scheduled(cron="* */1 * * * ?") + public void sendEmail(){ + while (redisTemplate.opsForList().size("email")!=0){ + Map map = (Map)redisTemplate.opsForList().rightPop("email"); + mailService.sendHtmlMail(map.get("email"),map.get("title"),map.get("context")); + } + } + +} diff --git a/src/main/java/com/example/jieyue/common/utils/DateUtil.java b/src/main/java/com/example/jieyue/common/utils/DateUtil.java new file mode 100644 index 0000000..b1430a1 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/utils/DateUtil.java @@ -0,0 +1,22 @@ +package com.example.jieyue.common.utils; + +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + *

时间工具类

+ * @author Bosen + * 2020/11/6 10:36 + */ +@Component +public class DateUtil { + /* + * 获取纯年月日时分秒的字符串 + */ + public String getNMDHIS(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + return sdf.format(new Date()); + } +} diff --git a/src/main/java/com/example/jieyue/common/utils/FileUtil.java b/src/main/java/com/example/jieyue/common/utils/FileUtil.java new file mode 100644 index 0000000..668efb7 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/utils/FileUtil.java @@ -0,0 +1,79 @@ +package com.example.jieyue.common.utils; + +import org.apache.commons.io.FileUtils; +import org.springframework.stereotype.Component; +import org.springframework.util.ResourceUtils; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +/** + *

文件操作工具类

+ * @author Bosen + * 2020/11/5 22:55 + */ +@Component +public class FileUtil { + + String classpath; + public FileUtil() throws FileNotFoundException { + this.classpath = ResourceUtils.getFile("classpath:/static").getPath()+"\\"; + } + + /** + * 文件上传逻辑处理 + * + * @return + * null 上传失败 + * 文件名 上传成功 + */ + public String upFile(MultipartFile file, RedirectAttributes redirectAttributes, + HttpServletRequest request,String url,String filename) { + // MultipartFile是对当前上传的文件的封装,当要同时上传多个文件时,可以给定多个MultipartFile参数(数组) + if (file.isEmpty()) { + redirectAttributes.addFlashAttribute("message", "Please select a file to upload"); + return null; + } + // 取文件格式后缀名 + // String type = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".")); + + File savefile1 = new File(classpath+url); + //判断上传文件的保存目录是否存在 + if (!savefile1.exists() && !savefile1.isDirectory()) { + System.out.println(classpath+"目录不存在,需要创建"); + //创建目录 + savefile1.mkdir(); + } + String suffix = this.getSuffixName(file.getOriginalFilename()); + try { + // FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流 + // 加入原工程static目录 + FileUtils.copyInputStreamToFile(file.getInputStream(), new File(savefile1+"/"+filename+"."+suffix));// 复制临时文件到指定目录下 + } catch (IOException e) { + e.printStackTrace(); + } + return url+filename+"."+suffix; + } + + /* + * 获取文件后缀名 + */ + public String getSuffixName(String filename){ + String[] strArray = filename.split("\\."); + int suffixIndex = strArray.length -1; + return strArray[suffixIndex]; + } + + /* + * 删除文件 + */ + public void deleteFile(String url){ + File file1 = new File(classpath+url); + file1.delete(); + } + +} diff --git a/src/main/java/com/example/jieyue/common/utils/IsEmptyUtil.java b/src/main/java/com/example/jieyue/common/utils/IsEmptyUtil.java new file mode 100644 index 0000000..be8c18d --- /dev/null +++ b/src/main/java/com/example/jieyue/common/utils/IsEmptyUtil.java @@ -0,0 +1,68 @@ +package com.example.jieyue.common.utils; + +import org.springframework.stereotype.Component; + +/** + *

判空工具类

+ * @author Bosen + * 2020/10/31 16:03 + */ +@Component +public class IsEmptyUtil { + /* + * 单例模式 + */ + private static class IsEmptyUtilHoler{ + private static IsEmptyUtil INSTANCE = new IsEmptyUtil(); + } + + public static IsEmptyUtil getInstance(){ + return IsEmptyUtilHoler.INSTANCE; + } + + /* + * 多个字符串判空操作,当存在有空字符时返回true + */ + public boolean strings(String ... strings){ + for (String string : strings) { + if (string==null || string.equals("")){ + return true; + } + } + return false; + } + + /* + * 单个字符串判空操作 + */ + public boolean string(String string){ + if (string==null || string.equals("")){ + return true; + }else{ + return false; + } + } + + /* + * 单个对象判空操作 + */ + public boolean object(Object object){ + if (object==null){ + return true; + }else{ + return false; + } + } + + /* + * 多个对象判空操作,当存在有null对象时返回true + */ + public boolean objects(Object ... objects){ + for (Object object : objects) { + if (object==null){ + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/example/jieyue/common/utils/JsonUtil.java b/src/main/java/com/example/jieyue/common/utils/JsonUtil.java new file mode 100644 index 0000000..51df419 --- /dev/null +++ b/src/main/java/com/example/jieyue/common/utils/JsonUtil.java @@ -0,0 +1,21 @@ +package com.example.jieyue.common.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import org.springframework.stereotype.Component; + +@Component +public class JsonUtil { + /** + * 字符串转整数型数组 + * todo + */ + public int[] jsonToIntArray(String json){ + JSONArray jsonArray = JSON.parseArray(json); + int[] array = new int[jsonArray.size()]; + for (int i = 0;i < jsonArray.size();i++){ + array[i] = (Integer) jsonArray.get(i); + } + return array; + } +} diff --git a/src/main/java/com/example/jieyue/common/utils/QRCodeUtil.java b/src/main/java/com/example/jieyue/common/utils/QRCodeUtil.java new file mode 100644 index 0000000..8a865bb --- /dev/null +++ b/src/main/java/com/example/jieyue/common/utils/QRCodeUtil.java @@ -0,0 +1,226 @@ +package com.example.jieyue.common.utils; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.*; +import javax.imageio.ImageIO; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.Binarizer; +import com.google.zxing.BinaryBitmap; +import com.google.zxing.EncodeHintType; +import com.google.zxing.LuminanceSource; +import com.google.zxing.MultiFormatReader; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.NotFoundException; +import com.google.zxing.Result; +import com.google.zxing.WriterException; +import com.google.zxing.client.j2se.BufferedImageLuminanceSource; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.common.HybridBinarizer; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; + +/** + * 二维码生成解析工具类 + * + * @data 2018-11-2 10:23:14 + */ +public class QRCodeUtil { + + // 二维码颜色==黑色 + private static final int BLACK = 0xFF000000; + // 二维码颜色==白色 + private static final int WHITE = 0xFFFFFFFF; + // 二维码图片格式==jpg和png两种 + private static final List IMAGE_TYPE = new ArrayList<>(); + + static { + IMAGE_TYPE.add("jpg"); + IMAGE_TYPE.add("png"); + } + + /** + * zxing方式生成二维码 + * 注意: + * 1,文本生成二维码的方法独立出来,返回image流的形式,可以输出到页面 + * 2,设置容错率为最高,一般容错率越高,图片越不清晰, 但是只有将容错率设置高一点才能兼容logo图片 + * 3,logo图片默认占二维码图片的20%,设置太大会导致无法解析 + * + * @param content 二维码包含的内容,文本或网址 + * @param path 生成的二维码图片存放位置 + * @param filename 生成的二维码图片存放位置 + * @param size 生成的二维码图片尺寸 可以自定义或者默认(250) + * @param logoPath logo的存放位置 + */ + public static boolean zxingCodeCreate(String content, String path, String filename,Integer size, String logoPath) { + try { + //图片类型 + String imageType = "jpg"; + //获取二维码流的形式,写入到目录文件中 + BufferedImage image = getBufferedImage(content, size, logoPath); + + //生成二维码存放文件 + File file = new File(path+filename+".jpg"); + if (!file.exists()) { + file.mkdirs(); + } + ImageIO.write(image, imageType, file); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + /** + * 二维码流的形式,包含文本内容 + * + * @param content 二维码文本内容 + * @param size 二维码尺寸 + * @param logoPath logo的存放位置 + * @return + */ + public static BufferedImage getBufferedImage(String content, Integer size, String logoPath) { + if (size == null || size <= 0) { + size = 250; + } + BufferedImage image = null; + try { + // 设置编码字符集 + Map hints = new HashMap<>(); + //设置编码 + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + //设置容错率最高 + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); + hints.put(EncodeHintType.MARGIN, 1); + // 1、生成二维码 + MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); + BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, size, size, hints); + // 2、获取二维码宽高 + int codeWidth = bitMatrix.getWidth(); + int codeHeight = bitMatrix.getHeight(); + // 3、将二维码放入缓冲流 + image = new BufferedImage(codeWidth, codeHeight, BufferedImage.TYPE_INT_RGB); + for (int i = 0; i < codeWidth; i++) { + for (int j = 0; j < codeHeight; j++) { + // 4、循环将二维码内容定入图片 + image.setRGB(i, j, bitMatrix.get(i, j) ? BLACK : WHITE); + } + } + //判断是否写入logo图片 + if (logoPath != null && !"".equals(logoPath)) { + File logoPic = new File(logoPath); + if (logoPic.exists()) { + Graphics2D g = image.createGraphics(); + BufferedImage logo = ImageIO.read(logoPic); + int widthLogo = logo.getWidth(null) > image.getWidth() * 2 / 10 ? (image.getWidth() * 2 / 10) : logo.getWidth(null); + int heightLogo = logo.getHeight(null) > image.getHeight() * 2 / 10 ? (image.getHeight() * 2 / 10) : logo.getHeight(null); + int x = (image.getWidth() - widthLogo) / 2; + int y = (image.getHeight() - heightLogo) / 2; + // 开始绘制图片 + g.drawImage(logo, x, y, widthLogo, heightLogo, null); + g.drawRoundRect(x, y, widthLogo, heightLogo, 15, 15); + //边框宽度 + g.setStroke(new BasicStroke(2)); + //边框颜色 + g.setColor(Color.WHITE); + g.drawRect(x, y, widthLogo, heightLogo); + g.dispose(); + logo.flush(); + image.flush(); + } + } + } catch (WriterException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return image; + } + + /** + * 给二维码图片添加Logo + * + * @param qrPic 二维码图片 + * @param logoPic logo图片 + * @param path 合成后的图片存储目录 + */ + public static boolean zxingCodeCreate(File qrPic, File logoPic, String path) { + try { + String imageType = path.substring(path.lastIndexOf(".") + 1).toLowerCase(); + if (!IMAGE_TYPE.contains(imageType)) { + return false; + } + + if (!qrPic.isFile() && !logoPic.isFile()) { + return false; + } + + //读取二维码图片,并构建绘图对象 + + BufferedImage image = ImageIO.read(qrPic); + Graphics2D g = image.createGraphics(); + //读取Logo图片 + BufferedImage logo = ImageIO.read(logoPic); + //设置logo的大小,最多20%0 + int widthLogo = logo.getWidth(null) > image.getWidth() * 2 / 10 ? (image.getWidth() * 2 / 10) : logo.getWidth(null); + int heightLogo = logo.getHeight(null) > image.getHeight() * 2 / 10 ? (image.getHeight() * 2 / 10) : logo.getHeight(null); + // 计算图片放置位置,默认在中间 + int x = (image.getWidth() - widthLogo) / 2; + int y = (image.getHeight() - heightLogo) / 2; + // 开始绘制图片 + g.drawImage(logo, x, y, widthLogo, heightLogo, null); + g.drawRoundRect(x, y, widthLogo, heightLogo, 15, 15); + //边框宽度 + g.setStroke(new BasicStroke(2)); + //边框颜色 + g.setColor(Color.WHITE); + g.drawRect(x, y, widthLogo, heightLogo); + g.dispose(); + logo.flush(); + image.flush(); + File newFile = new File(path); + if (!newFile.exists()) { + newFile.mkdirs(); + } + ImageIO.write(image, imageType, newFile); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 二维码的解析方法 + * + * @param path 二维码图片目录 + * @return + */ + public static Result zxingCodeAnalyze(String path) { + try { + MultiFormatReader formatReader = new MultiFormatReader(); + File file = new File(path); + if (file.exists()) { + BufferedImage image = ImageIO.read(file); + LuminanceSource source = new BufferedImageLuminanceSource(image); + Binarizer binarizer = new HybridBinarizer(source); + BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer); + Map hints = new HashMap(); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + Result result = formatReader.decode(binaryBitmap, hints); + return result; + } + } catch (IOException e) { + e.printStackTrace(); + } catch (NotFoundException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/example/jieyue/common/utils/StringUtil.java b/src/main/java/com/example/jieyue/common/utils/StringUtil.java new file mode 100644 index 0000000..270a52c --- /dev/null +++ b/src/main/java/com/example/jieyue/common/utils/StringUtil.java @@ -0,0 +1,20 @@ +package com.example.jieyue.common.utils; + +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +public class StringUtil { + public static String GetMapToXML(Map param){ + StringBuffer sb = new StringBuffer(); + sb.append(""); + for (Map.Entry entry : param.entrySet()) { + sb.append("<"+ entry.getKey() +">"); + sb.append(entry.getValue()); + sb.append(""); + } + sb.append(""); + return sb.toString(); + } +} diff --git a/src/main/java/com/example/jieyue/merchant/controller/MerchantGoodsController.java b/src/main/java/com/example/jieyue/merchant/controller/MerchantGoodsController.java new file mode 100644 index 0000000..81bfed9 --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/controller/MerchantGoodsController.java @@ -0,0 +1,176 @@ +package com.example.jieyue.merchant.controller; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.merchant.service.MerchantGoodsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.math.BigDecimal; +import java.util.List; + +/** + *

商户商品管理页面

+ * @author Bosen + * 2020/11/8 16:27 + */ +@RestController +public class MerchantGoodsController { + @Autowired + MerchantGoodsService goodsService; + + /* + * 商品管理页面 + */ + @RequestMapping("/merchant/goods") + public ModelAndView index(ModelAndView modelAndView, HttpSession session, @RequestParam(defaultValue = "1")int page){ + + List goodsList = goodsService.getMtGoods(session,page,10); + modelAndView.addObject("goodsList",goodsList); + // 获取订单总页数 + int allPage = goodsService.getAllPage(10,(SysMt)session.getAttribute("merchant")); + modelAndView.addObject("page",page); + modelAndView.addObject("allPage",allPage); + + modelAndView.setViewName("merchant/goods/index"); + return modelAndView; + } + + /* + * 增加商品 + */ + @RequestMapping("/merchant/add-goods") + public ModelAndView addGoods(ModelAndView modelAndView, String name, String describe, + String price, MultipartFile img,String stock, + RedirectAttributes redirectAttributes, + HttpServletRequest request){ + // 类型转换 + BigDecimal priceRes = null; + int stockTemp = 0; + try { + stockTemp = Integer.valueOf(stock); + if (stockTemp==0){ + throw new Exception(); + } + priceRes = new BigDecimal(price); + }catch (Exception e){ + modelAndView.addObject("msg","输入的金额或库存不合法"); + modelAndView.setViewName("redirect:goods"); + return modelAndView; + } + + // 添加商品 + int res = goodsService.addGoods(name, describe,priceRes,img,redirectAttributes,stockTemp,request); + switch (res){ + case -1: + modelAndView.addObject("msg","图片上传失败"); + break; + case 0: + modelAndView.addObject("msg","网络超时"); + break; + case 1: + modelAndView.addObject("msg","添加商品成功"); + break; + case 2: + modelAndView.addObject("msg","必填信息不能为空"); + break; + } + modelAndView.setViewName("redirect:goods"); + return modelAndView; + } + + /* + * 通过id值删除商品 + */ + @RequestMapping("/merchant/del-goods") + public ModelAndView delGoods(ModelAndView modelAndView,int id){ + int res = goodsService.delGoods(id); + if (res == 1){ + modelAndView.addObject("msg","删除成功"); + }else{ + modelAndView.addObject("msg","删除失败"); + } + modelAndView.setViewName("redirect:goods"); + return modelAndView; + } + + /* + * 上架商品 + */ + @RequestMapping("/merchant/put-goods") + public ModelAndView putGoods(ModelAndView modelAndView,int id){ + if (goodsService.putGoods(id)){ + modelAndView.addObject("msg","上架商品成功"); + }else{ + modelAndView.addObject("msg","上架商品成功"); + } + modelAndView.setViewName("redirect:goods"); + return modelAndView; + } + + /* + * 下架商品 + */ + @RequestMapping("/merchant/off-goods") + public ModelAndView OffGoods(ModelAndView modelAndView,int id){ + if (goodsService.OffGoods(id)){ + modelAndView.addObject("msg","下架商品成功"); + }else{ + modelAndView.addObject("msg","下架商品成功"); + } + modelAndView.setViewName("redirect:goods"); + return modelAndView; + } + + /* + * 修改商品信息 + */ + @RequestMapping("/merchant/update-goods") + public ModelAndView updateGoods(ModelAndView modelAndView, String name, String describe, + String price, MultipartFile img,String stock, + RedirectAttributes redirectAttributes, + HttpServletRequest request,int id){ + // 类型转换 + BigDecimal priceRes = null; + int stockTemp = 0; + try { + stockTemp = Integer.valueOf(stock); + if (stockTemp==0){ + throw new Exception(); + } + priceRes = new BigDecimal(price); + }catch (Exception e){ + modelAndView.addObject("msg","输入的金额或库存不合法"); + modelAndView.setViewName("redirect:goods"); + return modelAndView; + } + + // 修改商品信息 + int res = goodsService.updateGoods(name, describe,priceRes,img,redirectAttributes,stockTemp,request,id); + switch (res){ + case -1: + modelAndView.addObject("msg","图片上传失败"); + break; + case 0: + modelAndView.addObject("msg","网络超时"); + break; + case 1: + modelAndView.addObject("msg","修改商品成功"); + break; + case 2: + modelAndView.addObject("msg","必填信息不能为空"); + break; + } + + modelAndView.setViewName("redirect:goods"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/merchant/controller/MerchantHomeController.java b/src/main/java/com/example/jieyue/merchant/controller/MerchantHomeController.java new file mode 100644 index 0000000..3b1f907 --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/controller/MerchantHomeController.java @@ -0,0 +1,42 @@ +package com.example.jieyue.merchant.controller; + +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.mapper.SysOrderMapper; +import com.example.jieyue.merchant.service.MerchantHomeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpSession; + +/** + *

商户主页

+ * @author Bosen + * 2020/11/8 14:27 + */ +@RestController +public class MerchantHomeController { + @Autowired + MerchantHomeService homeService; + @Autowired + SysOrderMapper orderMapper; + + @RequestMapping({"/merchant/home","/merchant/"}) + public ModelAndView index(ModelAndView modelAndView, HttpSession session){ + SysMt merchant = (SysMt) session.getAttribute("merchant"); + + int commentCount = homeService.getCommandCount(merchant.getId()); + int userCount = homeService.getUserCount(merchant.getId()); + int orderCount = homeService.getOrderCount(merchant.getId()); + float profit = orderMapper.merchantProfitCount(merchant.getId()); + + modelAndView.addObject("commentCount",commentCount); + modelAndView.addObject("profit",profit); + modelAndView.addObject("userCount",userCount); + modelAndView.addObject("orderCount",orderCount); + + modelAndView.setViewName("merchant/home/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/merchant/controller/MerchantLoginController.java b/src/main/java/com/example/jieyue/merchant/controller/MerchantLoginController.java new file mode 100644 index 0000000..4dbafae --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/controller/MerchantLoginController.java @@ -0,0 +1,112 @@ +package com.example.jieyue.merchant.controller; + +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.merchant.service.MerchantLoginService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import javax.xml.ws.Service; + +/** + *

商户登录控制器

+ * @author Bosen + * 2020/11/8 12:43 + */ +@RestController +@RequestMapping("/merchant") +public class MerchantLoginController { + @Autowired + MerchantLoginService loginService; + + @RequestMapping({"login",""}) + public ModelAndView index(ModelAndView modelAndView){ + modelAndView.setViewName("merchant/login/index"); + return modelAndView; + } + + /* + * 登录 + */ + @RequestMapping("do-login") + public ModelAndView doLogin(ModelAndView modelAndView, String email, String password, HttpSession session){ + modelAndView.setViewName("redirect:/merchant/home"); + int serviceRes = loginService.doLogin(email,password); + switch (serviceRes){ + case 0: + modelAndView.addObject("msg","必填信息不能为空"); + break; + case -1: + modelAndView.addObject("msg","邮箱或密码错误"); + break; + case 1: + // 登陆成功 + SysMt merchant = loginService.getMerchantInfo(email); + session.setAttribute("merchant",merchant); + break; + } + return modelAndView; + } + + /* + * 退出登录 + */ + @RequestMapping("logout") + public ModelAndView logout(ModelAndView modelAndView,HttpServletRequest request){ + request.getSession().setAttribute("merchant",null); + modelAndView.setViewName("redirect:/merchant/login"); + return modelAndView; + } + + /* + * 注册 + */ + @RequestMapping("sign-up") + public ModelAndView signUp(ModelAndView modelAndView,String email,String name,String password){ + modelAndView.setViewName("redirect:/merchant/login"); + int serviceRes = loginService.signUp(email,name,password); + switch (serviceRes){ + case -1: + modelAndView.addObject("msg","验证邮件发送失败,请重试"); + break; + case 0: + modelAndView.addObject("msg","必填信息不能为空"); + break; + case 1: + modelAndView.addObject("msg","验证信息已发送至邮箱,请留意接收"); + break; + case 2: + modelAndView.addObject("msg","该邮箱已被注册"); + break; + case 3: + modelAndView.addObject("msg","邮箱格式不正确"); + break; + } + return modelAndView; + } + + /* + * 邮箱验证 + */ + @RequestMapping("sign-check") + public ModelAndView singCheck(ModelAndView modelAndView,String email){ + int serviceRes = loginService.singCheck(email); + switch (serviceRes){ + case -1: + modelAndView.setViewName("redirect:/error"); + break; + case 0: + modelAndView.setViewName("redirect:/merchant/login"); + modelAndView.addObject("msg","网络超时请重试"); + break; + case 1: + modelAndView.setViewName("redirect:/merchant/login"); + modelAndView.addObject("msg","注册成功"); + break; + } + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/merchant/controller/MerchantOrderController.java b/src/main/java/com/example/jieyue/merchant/controller/MerchantOrderController.java new file mode 100644 index 0000000..be4c1a3 --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/controller/MerchantOrderController.java @@ -0,0 +1,54 @@ +package com.example.jieyue.merchant.controller; + +import com.example.jieyue.admin.service.AdminMerchantService; +import com.example.jieyue.admin.service.AdminOrderService; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.entity.SysOrder; +import com.example.jieyue.merchant.service.MerchantOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +@RestController +public class MerchantOrderController { + @Autowired + MerchantOrderService orderService; + + @RequestMapping("/merchant/order") + public ModelAndView index(HttpServletRequest request,ModelAndView modelAndView, @RequestParam(defaultValue = "2")int flag, @RequestParam(defaultValue = "1")int page){ + SysMt merchant = (SysMt) request.getSession().getAttribute("merchant"); + // 获取订单信息 + List orderList = orderService.getOrderList(merchant.getId(),page,18,flag); + modelAndView.addObject("orderList",orderList); + + // 获取订单总页数 + int allPage = orderService.getAllPage(merchant.getId(),flag,18); + modelAndView.addObject("page",page); + modelAndView.addObject("flag",flag); + modelAndView.addObject("allPage",allPage); + + modelAndView.setViewName("merchant/order/index"); + return modelAndView; + } + + @RequestMapping("/merchant/search-order") + public ModelAndView searchOrder(HttpServletRequest request,ModelAndView modelAndView,String order){ + SysMt merchant = (SysMt) request.getSession().getAttribute("merchant"); + // 获取订单信息 + List orderList = orderService.getOrderById(order,merchant.getId()); + modelAndView.addObject("orderList",orderList); + + // 获取订单总页数 + modelAndView.addObject("page",1); + modelAndView.addObject("flag",2); + modelAndView.addObject("allPage",1); + + modelAndView.setViewName("merchant/order/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/merchant/controller/MerchantUiController.java b/src/main/java/com/example/jieyue/merchant/controller/MerchantUiController.java new file mode 100644 index 0000000..ae38b8f --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/controller/MerchantUiController.java @@ -0,0 +1,92 @@ +package com.example.jieyue.merchant.controller; + +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.entity.SysMtUi; +import com.example.jieyue.merchant.service.MerchantUiService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpServletRequest; + +/** + *

店铺样式设计

+ * @author Bosen + * 2020/11/8 16:29 + */ +@RestController +public class MerchantUiController { + @Autowired + MerchantUiService uiService; + + @RequestMapping("/merchant/ui") + public ModelAndView index(ModelAndView modelAndView, HttpServletRequest request){ + modelAndView.setViewName("merchant/ui/index"); + // 商户用于商城首页宣传的海报图片路径 + SysMtUi homeImg = uiService.getHomeImg(400,320,request.getSession()); + modelAndView.addObject("homeImg",homeImg); + SysMtUi lowImg = uiService.getHomeImg(600,310,request.getSession()); + modelAndView.addObject("lowImg",lowImg); + + return modelAndView; + } + + /* + * 删除 + */ + @RequestMapping("/merchant/del-home-img") + public ModelAndView delHomeImg(ModelAndView modelAndView,int id){ + int res = uiService.delHomeImg(id); + switch (res){ + case 1: + modelAndView.addObject("msg","图片删除成功"); + break; + case 0: + modelAndView.addObject("msg","图片删除失败"); + break; + } + modelAndView.setViewName("redirect:ui"); + return modelAndView; + } + + /* + * 修改或添加商户在商城主页的宣传海报 + */ + @RequestMapping("/merchant/update-home-img") + public ModelAndView updateHomeImg(ModelAndView modelAndView, HttpServletRequest request, MultipartFile img, RedirectAttributes redirectAttributes,int width,int height){ + + int res = uiService.updateHomeImg(width,height,request.getSession(),img,redirectAttributes,request); + switch (res){ + case 1: + modelAndView.addObject("msg","图片修改成功"); + break; + case 0: + modelAndView.addObject("msg","图片修改失败"); + break; + } + modelAndView.setViewName("redirect:ui"); + return modelAndView; + } + + /* + * 修改用户头像 + */ + @RequestMapping("/merchant/update-header") + public ModelAndView updateHeader(RedirectAttributes redirectAttributes,HttpServletRequest request,ModelAndView modelAndView,MultipartFile img){ + if (img.isEmpty()){ + modelAndView.addObject("msg","未选择要修改的头像"); + }else{ + int result = uiService.updateHeard(redirectAttributes,request,img); + if (result==1){ + modelAndView.addObject("msg","修改logo成功"); + }else{ + modelAndView.addObject("msg","修改logo失败"); + } + } + modelAndView.setViewName("redirect:/merchant/ui"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/merchant/controller/MerchantUserController.java b/src/main/java/com/example/jieyue/merchant/controller/MerchantUserController.java new file mode 100644 index 0000000..f8d47bd --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/controller/MerchantUserController.java @@ -0,0 +1,32 @@ +package com.example.jieyue.merchant.controller; + +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.merchant.service.MerchantUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import java.util.List; + +@RestController +public class MerchantUserController { + @Autowired + MerchantUserService userService; + + @RequestMapping("/merchant/user") + public ModelAndView index(ModelAndView modelAndView, @RequestParam(defaultValue = "1")int page){ + // 获取订单信息 + List userList = userService.getUserList(page,10); + modelAndView.addObject("userList",userList); + + // 获取订单总页数 + int allPage = userService.getAllPage(10); + modelAndView.addObject("page",page); + modelAndView.addObject("allPage",allPage); + + modelAndView.setViewName("merchant/user/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/merchant/service/MerchantGoodsService.java b/src/main/java/com/example/jieyue/merchant/service/MerchantGoodsService.java new file mode 100644 index 0000000..c01f0a4 --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/service/MerchantGoodsService.java @@ -0,0 +1,207 @@ +package com.example.jieyue.merchant.service; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.utils.DateUtil; +import com.example.jieyue.common.utils.FileUtil; +import com.example.jieyue.common.utils.IsEmptyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.annotation.Id; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.math.BigDecimal; +import java.util.List; + +@Service +public class MerchantGoodsService { + @Autowired + SysGoodsMapper goodsMapper; + @Autowired + FileUtil fileUtil; + @Autowired + DateUtil dateUtil; + + IsEmptyUtil isEmptyUtil = new IsEmptyUtil(); + + /* + * 获取全部商品 + */ + public List getAllGoods(){ + return goodsMapper.findAll(); + } + + /* + * 通过id获取商品 + */ + public SysGoods getGoodsById(int id){ + return goodsMapper.findById(id); + } + + /* + * 获取当前商户的商品列表 + */ + public List getMtGoods(HttpSession session,int page,int num){ + SysMt sysMt = (SysMt) session.getAttribute("merchant"); + return goodsMapper.findByMtLimit(sysMt.getId(),(page-1)*num,num); + } + + /** + *

添加商品

+ * + * @return + *-1 图片上传失败 + * 0 sql语句执行失败 + * 1 添加商品成功 + * 2 必填信息不能为空 + */ + public int addGoods(String name, String describe, BigDecimal price,MultipartFile img, + RedirectAttributes redirectAttributes,int stock, + HttpServletRequest request){ + if (isEmptyUtil.strings(name,describe)){ + return 2; + } + if (price == null){ + return 2; + } + int goodsMapperResult = 0; + // 获取当前商户id + SysMt sysMt = (SysMt)request.getSession().getAttribute("merchant"); + int merchant = sysMt.getId(); + + if (img.getOriginalFilename().equals("")){ + // 执行插入 + goodsMapperResult = goodsMapper.insert1(name,describe,price,merchant,stock); + if(goodsMapperResult != 1){ + return 0; + } + }else{ + // 设置filename 文件名由年月日时分秒以及六位随机数组成 + String filename = dateUtil.getNMDHIS()+Math.round(Math.random()*(999999-100000)+100000); + // 获取商户id,一个商户对应一个文件夹 + int id = ((SysMt) request.getSession().getAttribute("merchant")).getId(); + // 接收文件工具类返回的文件位置 + String imgUrl = fileUtil.upFile(img,redirectAttributes,request, + "/data/goods/"+id+"/",filename); + // 文件上传失败 + if (imgUrl == null){ + return -1; + } + // 执行插入 + goodsMapperResult = goodsMapper.insert2(name,describe,price,merchant,stock,imgUrl); + if (goodsMapperResult != 1){ + // sql语句执行失败,将已上传的图片移除 + fileUtil.deleteFile(imgUrl); + return 0; + } + } + return 1; + } + + /** + *

通过id值删除商品逻辑处理

+ * + * @return + *-1 删除失败 + * 1 删除成功 + */ + public int delGoods(int id){ + // 获取goods示例图片的地址 + String imgUrl = goodsMapper.findById(id).getImg(); + // 删除数据库中goods的数据 + int sql = goodsMapper.deleteById(id); + if (sql!=1){ + return -1; + }else{ + // 当文件路径在/data下时,才执行文件的删除 + if (imgUrl.indexOf("/data") == 0){ + // 删除源文件,与编译文件中对应的goods图片信息 + fileUtil.deleteFile(imgUrl); + } + return 1; + } + } + + /* + * 获取总页数 + */ + public int getAllPage(int num,SysMt merchant){ + return (int)Math.ceil((double)goodsMapper.goodsCount(merchant.getId())/(double)num); + } + + /* + * 上架商品 + */ + public boolean putGoods(int goodId){ + return goodsMapper.updateState(goodId, 1) == 1; + } + + /* + * 下架商品 + */ + public boolean OffGoods(int goodId){ + return goodsMapper.updateState(goodId, 0) == 1; + } + + /** + *

修改商品信息

+ * + * @return + *-1 图片上传失败 + * 0 sql语句执行失败 + * 1 修改商品成功 + * 2 必填信息不能为空 + */ + public int updateGoods(String name, String describe, BigDecimal price,MultipartFile img, + RedirectAttributes redirectAttributes,int stock, + HttpServletRequest request,int goodsId){ + if (isEmptyUtil.strings(name,describe)){ + return 2; + } + if (price == null){ + return 2; + } + int goodsMapperResult = 0; + // 获取当前商户id + SysMt sysMt = (SysMt)request.getSession().getAttribute("merchant"); + int merchant = sysMt.getId(); + + if (img.getOriginalFilename().equals("")){ + // 执行插入 + goodsMapperResult = goodsMapper.updateGoods1(name,describe,price,merchant,stock, goodsId); + if(goodsMapperResult != 1){ + return 0; + } + }else{ + // 设置filename 文件名由年月日时分秒以及六位随机数组成 + String filename = dateUtil.getNMDHIS()+Math.round(Math.random()*(999999-100000)+100000); + // 获取商户id,一个商户对应一个文件夹 + int id = ((SysMt) request.getSession().getAttribute("merchant")).getId(); + // 接收文件工具类返回的文件位置 + String imgUrl = fileUtil.upFile(img,redirectAttributes,request, + "/data/goods/"+id+"/",filename); + // 文件上传失败 + if (imgUrl == null){ + return -1; + } + // 执行插入 + SysGoods tempGoods = goodsMapper.findById(goodsId); + goodsMapperResult = goodsMapper.updateGoods2(name,describe,price,merchant,stock,goodsId,imgUrl); + if (goodsMapperResult != 1){ + // sql语句执行失败,将已上传的图片移除 + fileUtil.deleteFile(imgUrl); + return 0; + }else{ + // 新图片已插入,将旧图删除 + fileUtil.deleteFile(tempGoods.getImg()); + } + } + return 1; + } +} diff --git a/src/main/java/com/example/jieyue/merchant/service/MerchantHomeService.java b/src/main/java/com/example/jieyue/merchant/service/MerchantHomeService.java new file mode 100644 index 0000000..e57a169 --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/service/MerchantHomeService.java @@ -0,0 +1,30 @@ +package com.example.jieyue.merchant.service; + +import com.example.jieyue.common.mapper.SysCommentMapper; +import com.example.jieyue.common.mapper.SysOrderMapper; +import com.example.jieyue.common.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class MerchantHomeService { + @Autowired + SysCommentMapper commentMapper; + @Autowired + SysUserMapper userMapper; + @Autowired + SysOrderMapper orderMapper; + + public int getCommandCount(int merchant){ + return commentMapper.getAllCountByMt(merchant); + } + + public int getUserCount(int merchant){ + return userMapper.userCount(); + } + + public int getOrderCount(int merchant){ + return orderMapper.payCountByMt(merchant); + } + +} diff --git a/src/main/java/com/example/jieyue/merchant/service/MerchantLoginService.java b/src/main/java/com/example/jieyue/merchant/service/MerchantLoginService.java new file mode 100644 index 0000000..33357ea --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/service/MerchantLoginService.java @@ -0,0 +1,121 @@ +package com.example.jieyue.merchant.service; + +import com.example.jieyue.common.entity.SysAdmin; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.mapper.SysMtMapper; +import com.example.jieyue.common.service.MailService; +import com.example.jieyue.common.utils.IsEmptyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.DigestUtils; + +@Service +public class MerchantLoginService { + IsEmptyUtil isEmptyUtil = new IsEmptyUtil(); + @Autowired + SysMtMapper mtMapper; + @Autowired + MailService mailService; + @Value("${site-url}") + String sitrUrl; + + /** + * 登录逻辑处理 + * @return + * 0 必填信息不能为空 + *-1 邮箱或密码错误 + * 1 登录成功 + */ + public int doLogin(String email,String password){ + if (isEmptyUtil.strings(email,password)){ + return 0; + } + SysMt merchant = mtMapper.findByEmail(email); + if (merchant==null){ + return -1; + }else{ + password = DigestUtils.md5DigestAsHex(password.getBytes()); + if (merchant.getPassword().equals(password)){ + return 1; + }else{ + return -1; + } + } + + } + + /** + * 注册逻辑处理 + * @return + * 0 必填信息不能为空 + *-1 验证邮件发送失败,请重试 + * 1 验证信息已发送至邮箱,请留意接收 + * 2 该邮箱已被注册 + * 3 邮箱格式不正确 + */ + public int signUp(String email,String name,String password){ + if (isEmptyUtil.strings(email,name,password)){ + return 0; + } + // 邮箱格式验证 + if(!mailService.checkEmail(email)){ + System.out.println(email); + return 3; + } + // 该邮箱已被注册 + SysMt merchant = mtMapper.findByEmail(email); + password = DigestUtils.md5DigestAsHex(password.getBytes()); + if (merchant!=null){ + if (merchant.getState()!=2){ + return 2; + }else{ + if (mtMapper.update(name,password,email)!=1){ + return -1; + } + } + }else{ + // 将信息保存,状态置为2未通过注册,ratio=1 + + // 添加信息未成功返回超时 + if (mtMapper.insert(name,email,password,1,2)!=1){ + return -1; + } + } + // 发送注册验证邮件 + boolean res = mailService.sendHtmlMail(email,"捷阅网商户注册验证","点击此链接完成注册验证"); + if (res){ + return 1; + }else{ + return -1; + } + } + + /** + * 验证邮件确认注册 + * @return int + *-1 404页面 + * 0 网络超时请重试 + * 1 注册成功,跳转至登陆页面 + */ + public int singCheck(String email){ + SysMt merchant = mtMapper.findByEmail(email); + if (merchant!=null && merchant.getState()==2){ + int res = mtMapper.updateState(email,0); + if (res==1){ + return 1; + }else{ + return 0; + } + }else{ + return -1; + } + } + + /* + * 获取商户信息 + */ + public SysMt getMerchantInfo(String email){ + return mtMapper.findByEmail(email); + } +} diff --git a/src/main/java/com/example/jieyue/merchant/service/MerchantOrderService.java b/src/main/java/com/example/jieyue/merchant/service/MerchantOrderService.java new file mode 100644 index 0000000..a120303 --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/service/MerchantOrderService.java @@ -0,0 +1,57 @@ +package com.example.jieyue.merchant.service; + +import com.example.jieyue.common.entity.SysOrder; +import com.example.jieyue.common.mapper.SysOrderMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class MerchantOrderService { + @Autowired + SysOrderMapper orderMapper; + + /* + * 获取订单信息 + */ + public List getOrderList(int merchantId,int page, int num, int flag){ + switch (flag){ + case 0:// 未支付 + return orderMapper.findNotPayLimitByMt(merchantId,(page-1)*num,num); + case 1:// 已支付 + return orderMapper.findPayLimitByMt(merchantId,(page-1)*num,num); + case 2:// 全部订单 + return orderMapper.findLimitByMt(merchantId,(page-1)*num,num); + } + return null; + } + + /* + * 获取总页数 + */ + public int getAllPage(int merchantId,int flag,int num){ + switch (flag){ + case 0:// 未支付 + return (int)Math.ceil((double)orderMapper.notPayCountByMt(merchantId)/(double)num); + case 1:// 已支付 + return (int)Math.ceil((double)orderMapper.payCountByMt(merchantId)/(double)num); + case 2:// 全部订单 + return (int)Math.ceil((double)orderMapper.orderCountByMt(merchantId)/(double)num); + } + return 1; + } + + /* + * 通过订单号查找 + */ + public List getOrderById(String orderId,int merchant){ + SysOrder order = orderMapper.findByOrderIdAndMt(orderId,merchant); + List list = new ArrayList<>(); + if (order!=null){ + list.add(order); + } + return list; + } +} diff --git a/src/main/java/com/example/jieyue/merchant/service/MerchantUiService.java b/src/main/java/com/example/jieyue/merchant/service/MerchantUiService.java new file mode 100644 index 0000000..a233989 --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/service/MerchantUiService.java @@ -0,0 +1,126 @@ +package com.example.jieyue.merchant.service; + +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.entity.SysMtUi; +import com.example.jieyue.common.mapper.SysMtMapper; +import com.example.jieyue.common.mapper.SysMtUiMapper; +import com.example.jieyue.common.utils.DateUtil; +import com.example.jieyue.common.utils.FileUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +@Service +public class MerchantUiService { + @Autowired + SysMtUiMapper mtUiMapper; + @Autowired + FileUtil fileUtil; + @Autowired + DateUtil dateUtil; + @Autowired + SysMtMapper merchantMapper; + + /** + *

获取当前商户的id值

+ * + * @return + * -1 无用户的session信息 + */ + public int getMtId(HttpSession session){ + SysMt mtUi = (SysMt) session.getAttribute("merchant"); + if (mtUi == null){ + return -1; + } + return mtUi.getId(); + } + + /* + * 获取商户用于商城首页宣传的海报图片对象 + */ + public SysMtUi getHomeImg(int width,int height,HttpSession session){ + return mtUiMapper.findByMark(width,height,getMtId(session)); + } + + /* + * 删除 + */ + public int delHomeImg(int id){ + String url = mtUiMapper.findById(id).getUrl(); + int sql = mtUiMapper.deleteById(id); + if (sql==1){ + fileUtil.deleteFile(url); + return 1; + }else{ + return 0; + } + } + + /* + * 商户商城首页的宣传海报 + */ + public int updateHomeImg(int width, int height, HttpSession session, MultipartFile img,RedirectAttributes redirectAttributes, + HttpServletRequest request){ + // 获取当前商户id + int id = ((SysMt)request.getSession().getAttribute("merchant")).getId(); + SysMtUi sysMtUi = mtUiMapper.findByMark(width,height,id); + + // 设置filename 文件名由年月日时分秒以及六位随机数组成 + String filename = dateUtil.getNMDHIS()+Math.round(Math.random()*(999999-100000)+100000); + // 接收文件工具类返回的文件位置 + String imgUrl = fileUtil.upFile(img,redirectAttributes,request, + "/data/mtui/"+id+"/",filename); + if (imgUrl==null){ + // 上传图片失败 + return 0; + } + if (sysMtUi==null){ + return addHomeImg(imgUrl,width,height,id); + }else{ + int sql = mtUiMapper.updateUrl(imgUrl,width,height,id); + if (sql==1){ + // sql语句执行成功,将旧图删除,加入新图 + fileUtil.deleteFile(sysMtUi.getUrl()); + }else{ + // sql语句执行失败,将已上传的新图删除 + fileUtil.deleteFile(imgUrl); + } + return sql; + } + } + + /* + * 增加商户商城首页的宣传海报 + */ + public int addHomeImg(String url,int width, int height,int id){ + return mtUiMapper.insert(url,width,height,id); + } + + /* + * 修改商户头像 + */ + public int updateHeard(RedirectAttributes redirectAttributes,HttpServletRequest request, MultipartFile img){ + // 获取商户信息 + SysMt merchant = (SysMt) request.getSession().getAttribute("merchant"); + // 设置filename 文件名由年月日时分秒以及六位随机数组成 + String filename = dateUtil.getNMDHIS()+Math.round(Math.random()*(999999-100000)+100000); + String headerUrl = fileUtil.upFile(img,redirectAttributes,request,"/data/header/merchant/",filename); + int sql = merchantMapper.updateHeader(merchant.getId(),headerUrl); + if (sql!=1){ + fileUtil.deleteFile(headerUrl); + return -1; + }else{ + if (!merchant.getHeader().equals("/lib/merchant/images/2.png")){ + fileUtil.deleteFile(merchant.getHeader()); + } + // 修改会话信息 + merchant.setHeader(headerUrl); + request.getSession().setAttribute("merchant",merchant); + } + return 1; + } +} diff --git a/src/main/java/com/example/jieyue/merchant/service/MerchantUserService.java b/src/main/java/com/example/jieyue/merchant/service/MerchantUserService.java new file mode 100644 index 0000000..d7a0c6b --- /dev/null +++ b/src/main/java/com/example/jieyue/merchant/service/MerchantUserService.java @@ -0,0 +1,28 @@ +package com.example.jieyue.merchant.service; + +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.common.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class MerchantUserService { + @Autowired + SysUserMapper userMapper; + + /* + * 获取用户信息 + */ + public List getUserList(int page, int num){ + return userMapper.findLimit((page-1)*num,num); + } + + /* + * 获取总页数 + */ + public int getAllPage(int num){ + return (int)Math.ceil((double)userMapper.userCount()/(double)num); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/jieyue/user/controller/UserAboutController.java b/src/main/java/com/example/jieyue/user/controller/UserAboutController.java new file mode 100644 index 0000000..b33664c --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserAboutController.java @@ -0,0 +1,19 @@ +package com.example.jieyue.user.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +/** + *

关于我们页面

+ * @author Bosen + * 2020/11/2 21:00 + */ +@RestController +public class UserAboutController { + @RequestMapping("/user/about") + public ModelAndView index(ModelAndView modelAndView){ + modelAndView.setViewName("user/about/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserCartController.java b/src/main/java/com/example/jieyue/user/controller/UserCartController.java new file mode 100644 index 0000000..e91b54a --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserCartController.java @@ -0,0 +1,73 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.mapper.SysCartMapper; +import com.example.jieyue.user.service.UserCartService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + *

购物车功能

+ * @author Bosen + * 2020/11/3 13:06 + */ +@RestController +public class UserCartController { + @Autowired + UserCartService cartService; + @Autowired + SysCartMapper cartMapper; + + @RequestMapping("/user/cart") + public ModelAndView index(ModelAndView modelAndView, HttpServletRequest request){ + List cartList = cartService.getCartList(request); + modelAndView.addObject("cartList",cartList); + + modelAndView.setViewName("user/cart/index"); + return modelAndView; + } + + /* + * 添加至购物车 + */ + @RequestMapping("/user/add-cart") + public ModelAndView addCart(ModelAndView modelAndView, String id, @RequestParam(defaultValue = "1") int num, HttpServletRequest request){ + if (num<=0){ + modelAndView.addObject("msg","商品数量不合法"); + }else{ + int result = cartService.addCart(Integer.valueOf(id),num,request); + if (result == 1){ + modelAndView.addObject("msg","已成功添加至购物车"); + } + if (result == -1){ + modelAndView.addObject("msg","添加至购物车失败"); + } + if (result == 2){ + modelAndView.addObject("msg","您在此前已将此商品添加至购物车"); + } + } + modelAndView.setViewName("redirect:/user/product?id="+id); + return modelAndView; + } + + /* + * 移除购物车商品 + */ + @RequestMapping("/user/del-cart") + public ModelAndView delCart(ModelAndView modelAndView,int id){ + int sql = cartMapper.deleteById(id); + if (sql == 1){ + modelAndView.addObject("msg","移除购物车商品成功"); + }else{ + modelAndView.addObject("msg","移除购物车商品失败"); + } + modelAndView.setViewName("redirect:/user/cart"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserCheckOutController.java b/src/main/java/com/example/jieyue/user/controller/UserCheckOutController.java new file mode 100644 index 0000000..c998fb2 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserCheckOutController.java @@ -0,0 +1,46 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.user.service.UserCheckOutService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.bind.DefaultValue; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + *

支付页面

+ * @author Bosen + * 2020/11/3 9:53 + */ +@RestController +public class UserCheckOutController { + @Autowired + UserCheckOutService checkOutService; + + @RequestMapping("/user/checkout") + public ModelAndView index(ModelAndView modelAndView,String ids,@RequestParam(defaultValue = "-1")int num){ + if(ids == null || ids.equals("")){ + modelAndView.addObject("msg","请选择您要结算的商品"); + modelAndView.setViewName("redirect:/user/cart"); + }else{ + // 获取商品信息 + Map goodsMap = checkOutService.getGoodsInfo(ids); + modelAndView.addObject("goodsMap",goodsMap); + // 获取对应的购物车id + List carts = checkOutService.getCartIds(ids); + modelAndView.addObject("carts",carts); + // 总金额计算 + BigDecimal allPrice = checkOutService.getGoodsNumPrice(goodsMap); + modelAndView.addObject("allPrice",allPrice); + + modelAndView.setViewName("/user/checkout/index"); + } + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserHomeController.java b/src/main/java/com/example/jieyue/user/controller/UserHomeController.java new file mode 100644 index 0000000..b9dc4fb --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserHomeController.java @@ -0,0 +1,86 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysMtUi; +import com.example.jieyue.common.entity.SysUi; +import com.example.jieyue.user.service.UserHomeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import java.util.Map; + +/** + *

网页主页控制器类

+ * @author Bosen + * 2020/11/2 20:03 + */ +@RestController +public class UserHomeController{ + @Autowired + UserHomeService homeService; + @Autowired + RedisTemplate redisTemplate; + + @RequestMapping({"/user/home","/"}) + public ModelAndView home(ModelAndView modelAndView){ + Map imgMap = null; + // 获取热卖商品列表 + Map escGoodsMap = null; + // 获取新出商品列表 + Map descGoodsMap = null; + // 随机获取商品列表 + Map randGoodsMap = null; + // 获取商户宣传店铺的海报 + Map homeImg = null; + Map lowImg = null; + + if (redisTemplate.opsForHash().entries("homePageCache").size() != 0){ + + Map map = redisTemplate.opsForHash().entries("homePageCache"); + + // 商城主页宣传海报 + imgMap = (Map) map.get("imgMap"); + // 获取热卖商品列表 + escGoodsMap = (Map) map.get("escGoodsMap"); + // 获取新出商品列表 + descGoodsMap = (Map) map.get("descGoodsMap"); + // 随机获取商品列表 + randGoodsMap = (Map) map.get("randGoodsMap"); + // 获取商户宣传店铺的海报 + homeImg = (Map) map.get("homeImg"); + lowImg = (Map) map.get("lowImg"); + + }else{ + + // 商城主页宣传海报 + imgMap = homeService.getImage(); + // 获取热卖商品列表 + escGoodsMap = homeService.getEsc(13); + // 获取新出商品列表 + descGoodsMap = homeService.getDesc(6); + // 随机获取商品列表 + randGoodsMap = homeService.getRand(12); + // 获取商户宣传店铺的海报 + homeImg = homeService.getMtImg(400,320,3); + lowImg = homeService.getMtImg(600,310,3); + } + + modelAndView.addObject("imgMap",imgMap); + modelAndView.addObject("escGoodsMap",escGoodsMap); + modelAndView.addObject("descGoodsMap",descGoodsMap); + modelAndView.addObject("randGoodsMap",randGoodsMap); + modelAndView.addObject("homeImg",homeImg); + modelAndView.addObject("lowImg",lowImg); + + if (redisTemplate.opsForHash().entries("homePageCache").size() == 0){ + // 设置缓存 十分钟内有效 + homeService.setHomeCache(modelAndView); + } + + modelAndView.setViewName("user/home/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserInfoController.java b/src/main/java/com/example/jieyue/user/controller/UserInfoController.java new file mode 100644 index 0000000..5f5eafc --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserInfoController.java @@ -0,0 +1,58 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.user.service.UserInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpServletRequest; + +/** + *

用户信息页面

+ * @author Bosen + * 2020/11/24 21:29 + */ +@RestController +public class UserInfoController { + @Autowired + UserInfoService userInfoService; + + @RequestMapping("/user/info") + public ModelAndView index(ModelAndView modelAndView, HttpServletRequest request){ + SysUser user = (SysUser) request.getSession().getAttribute("user"); + modelAndView.addObject("user",user); + modelAndView.setViewName("user/info/index"); + return modelAndView; + } + + @RequestMapping("/user/update-info") + public ModelAndView updateInfo(RedirectAttributes redirectAttributes,HttpServletRequest request,ModelAndView modelAndView, MultipartFile img, int id, String username, String email, String oldPwd, String newPwd, String rePwd){ + int result = userInfoService.updateInfo(redirectAttributes,request,img,id,username,email,oldPwd,newPwd,rePwd); + switch (result){ + case -1: + modelAndView.addObject("msg","修改信息失败"); + break; + case 0: + modelAndView.addObject("msg","必填信息不能为空"); + break; + case 1: + modelAndView.addObject("msg","修改信息成功"); + break; + case 2: + modelAndView.addObject("msg","邮箱格式不正确"); + break; + case 3: + modelAndView.addObject("msg","原密码错误"); + break; + case 4: + modelAndView.addObject("msg","两次输入的密码不一致"); + break; + } + modelAndView.setViewName("redirect:/user/info"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserLoginController.java b/src/main/java/com/example/jieyue/user/controller/UserLoginController.java new file mode 100644 index 0000000..fdab3ac --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserLoginController.java @@ -0,0 +1,122 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.user.service.UserLoginService; +import org.apache.ibatis.annotations.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +/** + *

登陆接口控制器类

+ * @author Bosen + * 2020/10/30 17:42 + */ +@RestController +@RequestMapping("/user") +public class UserLoginController { + @Autowired + private UserLoginService service; + /* + * 登陆页面 + */ + @RequestMapping("login") + public ModelAndView index(ModelAndView modelAndView){ + modelAndView.setViewName("user/login/index"); + return modelAndView; + } + + /* + * 退出登陆 + */ + @RequestMapping("logout") + public ModelAndView logout(ModelAndView modelAndView,HttpServletRequest request){ + request.getSession().setAttribute("user",null); + modelAndView.setViewName("redirect:/"); + return modelAndView; + } + + /* + * 登陆请求 + */ + @RequestMapping("do-login") + public ModelAndView doLogin(HttpSession session, ModelAndView modelAndView, String email, String password){ + int result = service.dologin(email,password); + if (result==1){ + // 登陆成功 + SysUser user = service.userInfo(email); + session.setAttribute("user",user); + modelAndView.setViewName("redirect:/"); + }else if (result==-1){ + // 用户名或密码错误! + modelAndView.addObject("msg","用户名或密码错误!"); + modelAndView.setViewName("redirect:login"); + }else if (result==0){ + // 必填信息不能为空! + modelAndView.addObject("msg","必填信息不能为空!"); + modelAndView.setViewName("redirect:login"); + } + return modelAndView; + } + + /* + * 注册请求 + */ + @RequestMapping("sign-up") + public ModelAndView signUp(ModelAndView modelAndView,String email,String username,String password,String repwd){ + int result = service.singup(email,username,password,repwd); + if (result==0){ + // 必填信息不能为空! + modelAndView.addObject("msg","必填信息不能为空!"); + } + if (result==4){ + // 该邮箱已被注册 + modelAndView.addObject("msg","该邮箱已被注册"); + } + if (result==3){ + // 邮箱格式不正确 + modelAndView.addObject("msg","邮箱格式不正确"); + } + if (result==2){ + // 两次密码输入不一致 + modelAndView.addObject("msg","两次密码输入不一致"); + } + if (result==1){ + // 验证邮件已发送,请留意您的邮箱 + modelAndView.addObject("msg","验证邮件已发送,请留意您的邮箱"); + } + if (result==-1){ + // 验证邮件发送失败,请重试 + modelAndView.addObject("msg","注册超时,请重试"); + } + modelAndView.setViewName("redirect:login"); + return modelAndView; + } + + /* + * 验证邮件确认注册 + */ + @RequestMapping("sign-check") + public ModelAndView singCheck(ModelAndView modelAndView,@Param("email") String email){ + int res = service.singCheck(email); + if (res==-1){ + modelAndView.setViewName("redirect:/error"); + } + if (res==0){ + modelAndView.addObject("网络超时请重试"); + modelAndView.setViewName("redirect:login"); + } + if (res==1){ + modelAndView.addObject("msg","注册成功"); + modelAndView.setViewName("redirect:login"); + + } + return modelAndView; + } + +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserNoticeController.java b/src/main/java/com/example/jieyue/user/controller/UserNoticeController.java new file mode 100644 index 0000000..61e44b6 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserNoticeController.java @@ -0,0 +1,46 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysNotice; +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.common.mapper.SysNoticeMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpSession; +import java.util.List; + +@RestController +public class UserNoticeController { + @Autowired + SysNoticeMapper noticeMapper; + + @RequestMapping("/user/notice") + public ModelAndView index(ModelAndView modelAndView, HttpSession session,@RequestParam(defaultValue = "1") int page){ + SysUser user = (SysUser)session.getAttribute("user"); + + List noticeList = + noticeMapper.findByReceiveTypeLimit(user.getId(),2,(page-1)*8,8); + modelAndView.addObject("noticeList",noticeList); + + modelAndView.setViewName("user/notice/index"); + return modelAndView; + } + + /* + * 删除通知信息 + */ + @RequestMapping("/user/del-notice") + public ModelAndView delNotice(ModelAndView modelAndView,int id){ + if (noticeMapper.deleteById(id)==1){ + modelAndView.addObject("msg","删除通知信息成功"); + }else{ + modelAndView.addObject("msg","删除通知信息成功失败"); + } + + modelAndView.setViewName("redirect:/user/notice"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserOrderController.java b/src/main/java/com/example/jieyue/user/controller/UserOrderController.java new file mode 100644 index 0000000..0d1768a --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserOrderController.java @@ -0,0 +1,41 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysOrder; +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.user.service.UserOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + *

我的收藏列表

+ * @author Bosen + * 2020/11/3 12:57 + */ +@RestController +public class UserOrderController { + @Autowired + UserOrderService orderService; + + @RequestMapping("/user/order") + public ModelAndView index(HttpServletRequest request,ModelAndView modelAndView,@RequestParam(defaultValue = "1") int page){ + SysUser user = (SysUser) request.getSession().getAttribute("user"); + List orderList = orderService.getOrderList(user.getId(),page,10); + List goodsList = orderService.getGoodsList(orderList); + int allPage = orderService.getAllPage(user.getId(),10); + + modelAndView.addObject("orderList",orderList); + modelAndView.addObject("goodsList",goodsList); + modelAndView.addObject("page",page); + modelAndView.addObject("allPage",allPage); + + modelAndView.setViewName("user/order/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserPayController.java b/src/main/java/com/example/jieyue/user/controller/UserPayController.java new file mode 100644 index 0000000..06acf88 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserPayController.java @@ -0,0 +1,124 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.entity.SysOrder; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.mapper.SysMtMapper; +import com.example.jieyue.common.mapper.SysOrderMapper; +import com.example.jieyue.user.service.WxPayService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +@RestController +public class UserPayController { + @Autowired + WxPayService wxPayService; + @Autowired + SysOrderMapper orderMapper; + + /* + * 微信支付 + */ + @RequestMapping("/user/pay/wx") + public ModelAndView wx(ModelAndView modelAndView, String nums, String users, String merchants, String goods, String prices, + String notes, String address, String name, String phone, String code,String carts) { + // 生成orderMark + String orderMark = wxPayService.getOrderId(); + // 添加订单 + String res = wxPayService.addOrder(nums,orderMark,users,merchants,prices,notes,goods,address,name,phone,code,0,carts); + if(!res.equals("-1") && !res.equals("0") && !res.equals("")){ + modelAndView.addObject("orderMark",orderMark); + modelAndView.setViewName("redirect:/user/wxpay/index?mark="+orderMark); + } + return modelAndView; + } + + /** + *

微信支付回调地址

+ * @author Bosen + * 2020/12/4 20:58 + */ + @RequestMapping("/user/wxpay/notify") + public String wxNotify(HttpServletRequest request) throws Exception { + return wxPayService.wxNotify(request); + } + + /* + * 检查订单状态 + */ + @RequestMapping("/user/check-order-status") + public boolean checkOrderStatus(String orderMark){ + List orderList = orderMapper.findByOrderMark(orderMark); + if (orderList.size()==0){ + return false; + }else{ + for (SysOrder order : orderList) { + if (order.getOrderState() != 1){ + return false; + } + } + return true; + } + } + + /* + * 订单未支付,重新显示二维码给用户支付 + */ + @RequestMapping("/user/wxpay/index") + public ModelAndView wxNotify(ModelAndView modelAndView,String mark) { + String codeUrl = orderMapper.findByOrderMark(mark).get(0).getPayCodeUrl(); + + modelAndView.addObject("codeUrl",codeUrl); + modelAndView.addObject("orderMark",mark); + + modelAndView.setViewName("user/pay/wx"); + return modelAndView; + } + + /* + * 订单并发安全测试 + */ + @Autowired + SysGoodsMapper goodsMapper; + @Autowired + SysMtMapper merchantMapper; + @RequestMapping("/user/pay/test") + @Transactional + public String test() { + // 用于测试商品的id值 + int goodsId = 44; + SysGoods goods = goodsMapper.findById(goodsId); + if (goods.getStock() > 0){ + // 生成orderMark + String orderMark = wxPayService.getOrderId(); + // 生成订单号 + String orderId = wxPayService.getOrderId(); + // 获取商户信息 + SysMt merchant = merchantMapper.findById(goods.getMerchant()); + // 执行sql语句 + int sql = orderMapper.insert1(orderId, System.currentTimeMillis(), 1, orderMark, 99, + goods.getMerchant(), goods.getPrice(), goodsId, "test", "test", + "test", "123456", "test", 0,merchant.getRatio()); + + // 将商品库存做相应的减少 + int delStock = goodsMapper.delStock(goodsId,1); + + // 库存检查,库存少于零时回滚 + if (sql != 1 || delStock != 1 || goodsMapper.findById(goodsId).getStock() < 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + + return "SUCCESS This is /user/pay/test"; + } + return "ERROR This is /user/pay/test"; + + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserProductController.java b/src/main/java/com/example/jieyue/user/controller/UserProductController.java new file mode 100644 index 0000000..80c2c28 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserProductController.java @@ -0,0 +1,87 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysComment; +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.mapper.SysCommentMapper; +import com.example.jieyue.user.service.UserHomeService; +import com.example.jieyue.user.service.UserProductService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + *

商品详情页面

+ * @author Bosen + * 2020/11/2 23:13 + */ +@RestController +public class UserProductController { + @Autowired + UserProductService productService; + @Autowired + UserHomeService homeService; + @Autowired + SysCommentMapper commentMapper; + + @RequestMapping("/user/product") + public ModelAndView index(ModelAndView modelAndView,int id,@RequestParam(defaultValue = "1") int page){ + // 通过id值获取商品对象 + SysGoods goods = productService.getGoods(id); + modelAndView.addObject("goods",goods); + // 随机获取商品列表 + Map randGoodsMap = homeService.getRand(8); + modelAndView.addObject("randGoodsMap",randGoodsMap); + // 获取商品评论信息 + List commentList = productService.getCommentList(id,page,3); + modelAndView.addObject("commentList",commentList); + // 评论当前页数 + modelAndView.addObject("page",page); + // 评论的总页数 + int allPage = productService.getAllCountPage(id,3); + modelAndView.addObject("allPage",allPage); + + modelAndView.setViewName("user/product/index"); + return modelAndView; + } + + /* + * 添加评论 + */ + @RequestMapping("/user/product/add-comment") + public ModelAndView addComment(ModelAndView modelAndView,int goods,int merchant,String context,HttpServletRequest request){ + if (context.equals("")){ + modelAndView.addObject("msg","评论内容不能为空"); + }else{ + int result = productService.addComment(goods,merchant,context,request); + if (result==1){ + modelAndView.addObject("msg","发表评论成功"); + } + if (result==-1){ + modelAndView.addObject("msg","发表评论失败"); + } + } + modelAndView.setViewName("redirect:/user/product?id="+goods); + return modelAndView; + } + + /* + * 删除评论 + */ + @RequestMapping("/user/product/del-comment") + public ModelAndView delComment(ModelAndView modelAndView,int id,int goods){ + int sql = commentMapper.deleteById(id); + if (sql==1){ + modelAndView.addObject("msg","删除评论成功"); + }else{ + modelAndView.addObject("msg","删除评论失败"); + } + modelAndView.setViewName("redirect:/user/product?id="+goods); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserSearchController.java b/src/main/java/com/example/jieyue/user/controller/UserSearchController.java new file mode 100644 index 0000000..c3bec64 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserSearchController.java @@ -0,0 +1,31 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.user.service.UserSearchService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import java.util.List; + +/** + *

关键字模糊查找

+ * @author Bosen + * 2020/11/29 19:48 + */ +@RestController +public class UserSearchController { + @Autowired + UserSearchService searchService; + + @RequestMapping("/user/search") + public ModelAndView index(ModelAndView modelAndView,String keyword){ + // 获取返回的商品列表 + List goodsList = searchService.searchGoods(keyword); + modelAndView.addObject("goodsList",goodsList); + + modelAndView.setViewName("user/search/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/controller/UserShopController.java b/src/main/java/com/example/jieyue/user/controller/UserShopController.java new file mode 100644 index 0000000..a8363ca --- /dev/null +++ b/src/main/java/com/example/jieyue/user/controller/UserShopController.java @@ -0,0 +1,46 @@ +package com.example.jieyue.user.controller; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.user.service.UserShopService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import java.util.List; +import java.util.Map; + +/** + *

店铺页面控制器类

+ * @author Bosen + * 2020/11/2 20:26 + */ +@RestController +public class UserShopController { + @Autowired + UserShopService shopService; + + /* + * 店铺首页 + */ + @RequestMapping("/user/shop") + public ModelAndView index(ModelAndView modelAndView,int id,@RequestParam(defaultValue = "1") int page){ + // 获取商户信息 + SysMt merchant = shopService.getMerchantInfo(id); + modelAndView.addObject("merchant",merchant); + // 获取商户商品信息 + Map goodsMap = shopService.getGoodsList(id,page,12); + modelAndView.addObject("goodsMap",goodsMap); + // 获取随机商品信息 + Map randGoodsMap = shopService.getRandGoodsMap(id,12); + modelAndView.addObject("randGoodsMap",randGoodsMap); + // 当前页数和总页数 + modelAndView.addObject("page",page); + modelAndView.addObject("allPage",shopService.getAllPage(id,12)); + + modelAndView.setViewName("user/shop/index"); + return modelAndView; + } +} diff --git a/src/main/java/com/example/jieyue/user/service/UserCartService.java b/src/main/java/com/example/jieyue/user/service/UserCartService.java new file mode 100644 index 0000000..fb1aea7 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/service/UserCartService.java @@ -0,0 +1,81 @@ +package com.example.jieyue.user.service; + +import com.example.jieyue.common.entity.SysCart; +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.common.mapper.SysCartMapper; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.mapper.SysMtMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class UserCartService { + @Autowired + SysCartMapper cartMapper; + @Autowired + SysGoodsMapper goodsMapper; + @Autowired + SysMtMapper merchantMapper; + + /** + *

添加至购物车

+ * @return + *-1 添加至购物车失败 + * 1 添加至购物车成功 + * 2 用户在此前已添加至购物车 + * @author Bosen + * 2020/11/29 10:44 + */ + public int addCart(int id, int num, HttpServletRequest request){ + // 获取用户信息 + SysUser user = (SysUser)request.getSession().getAttribute("user"); + // 判断用户是否已将此商品添加至购物车 + int count = cartMapper.countByUserIdAndGoodsId(user.getId(),id); + if (count == 0){ + int sql = cartMapper.insert(user.getId(),id,num); + if (sql == 1){ + return 1; + } + }else{ + return 2; + } + return -1; + } + + /* + * 整合购物车完整信息 + */ + public List getCartList(HttpServletRequest request){ + // 获取用户信息 + SysUser user = (SysUser) request.getSession().getAttribute("user"); + List list = new ArrayList<>(); + List cartList = cartMapper.findByUserIdLimit(user.getId()); + for (SysCart cart : cartList) { + SysGoods goods = goodsMapper.findById(cart.getGoodsId()); + SysMt merchant = merchantMapper.findById(goods.getMerchant()); + Map map = new HashMap<>(); + map.put("goodsImg",goods.getImg()); + map.put("cartId",cart.getId()+""); + map.put("goodsId",goods.getId()+""); + map.put("goodsPrice",goods.getPrice().toPlainString()); + map.put("goodsName",goods.getName()); + map.put("goodsNum",cart.getGoodsNum()+""); + map.put("goodsStock",goods.getStock()+""); + map.put("goodsState",goods.getState()+""); + map.put("goodsMerchant",merchant.getName()); + + list.add(map); + } + return list; + } + +} diff --git a/src/main/java/com/example/jieyue/user/service/UserCheckOutService.java b/src/main/java/com/example/jieyue/user/service/UserCheckOutService.java new file mode 100644 index 0000000..3743b10 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/service/UserCheckOutService.java @@ -0,0 +1,70 @@ +package com.example.jieyue.user.service; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class UserCheckOutService { + @Autowired + SysGoodsMapper goodsMapper; + + /* + * 获取商品信息 + */ + public Map getGoodsInfo(String ids){ + Map map = new HashMap<>(); + Map idsMap = getIdsMap(ids); + for (Integer id : idsMap.keySet()) { + map.put(goodsMapper.findById(id),idsMap.get(id)); + } + return map; + } + + /* + * 获取总金额 + */ + public BigDecimal getGoodsNumPrice(Map goodsMap){ + BigDecimal allPrice = new BigDecimal(0.00); + for (SysGoods goods : goodsMap.keySet()) { + allPrice = allPrice.add(goods.getPrice().multiply(new BigDecimal(goodsMap.get(goods)))); + } + return allPrice; + } + + /* + * 将前端发送的ids字符串切割为哈希表 + */ + public Map getIdsMap(String ids){ + String[] idsAndNumArray = ids.split(","); + Map map = new HashMap<>(); + for (String idsAndNumA : idsAndNumArray) { + String[] idsAndNum = idsAndNumA.split(":"); + int id = Integer.valueOf(idsAndNum[0]); + int num = Integer.valueOf(idsAndNum[1]); + map.put(id,num); + } + return map; + } + + /* + * 获取对应的cart id + */ + public List getCartIds(String ids){ + String[] idsAndNumArray = ids.split(","); + List list = new ArrayList<>(); + for (int i = 0;i < idsAndNumArray.length;i++) { + String[] idsAndNum = idsAndNumArray[i].split(":"); + int cart = Integer.valueOf(idsAndNum[2]); + list.add(cart); + } + return list; + } +} diff --git a/src/main/java/com/example/jieyue/user/service/UserHomeService.java b/src/main/java/com/example/jieyue/user/service/UserHomeService.java new file mode 100644 index 0000000..71602ef --- /dev/null +++ b/src/main/java/com/example/jieyue/user/service/UserHomeService.java @@ -0,0 +1,115 @@ +package com.example.jieyue.user.service; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysMtUi; +import com.example.jieyue.common.entity.SysUi; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.mapper.SysMtUiMapper; +import com.example.jieyue.common.mapper.SysUiMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.ui.ModelMap; +import org.springframework.web.servlet.ModelAndView; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +@Service +public class UserHomeService { + @Autowired + RedisTemplate redisTemplate; + @Autowired + SysUiMapper uiMapper; + @Autowired + SysGoodsMapper goodsMapper; + @Autowired + SysMtUiMapper mtUiMapper; + + /* + * 设置缓存 十分钟内有效 + */ + public void setHomeCache(ModelAndView modelAndView){ + redisTemplate.opsForHash().put("homePageCache","imgMap",modelAndView.getModelMap().get("imgMap")); + redisTemplate.opsForHash().put("homePageCache","escGoodsMap",modelAndView.getModelMap().get("escGoodsMap")); + redisTemplate.opsForHash().put("homePageCache","descGoodsMap",modelAndView.getModelMap().get("descGoodsMap")); + redisTemplate.opsForHash().put("homePageCache","randGoodsMap",modelAndView.getModelMap().get("randGoodsMap")); + redisTemplate.opsForHash().put("homePageCache","homeImg",modelAndView.getModelMap().get("homeImg")); + redisTemplate.opsForHash().put("homePageCache","lowImg",modelAndView.getModelMap().get("lowImg")); + + redisTemplate.expire("homePageCache",10, TimeUnit.MINUTES); + } + + /* + * 获取商城网页的宣传海报 + */ + public Map getImage(){ + Map map = new HashMap<>(); + + SysUi img1920 = uiMapper.findByMark(1920,737); + SysUi img1230 = uiMapper.findByMark(1230,535); + SysUi img475 = uiMapper.findByMark(475,570); + SysUi img674 = uiMapper.findByMark(674,264); + SysUi img3151 = uiMapper.findByMark(3151,282); + SysUi img3152 = uiMapper.findByMark(3152,282); + + map.put(1920+"",img1920); + map.put(1230+"",img1230); + map.put(475+"",img475); + map.put(674+"",img674); + map.put(3151+"",img3151); + map.put(3152+"",img3152); + + return map; + } + + /* + * 获取热卖商品 + */ + public Map getEsc(int num){ + List list = goodsMapper.findAllEsc(num); + Map map = new HashMap<>(); + for (int i=0;i < list.size();i++) { + map.put(i+"",list.get(i)); + } + return map; + } + + /* + * 获取新出商品 + */ + public Map getDesc(int num){ + List list = goodsMapper.findAllDesc(num); + Map map = new HashMap<>(); + for (int i=0;i < list.size();i++) { + map.put(i+"",list.get(i)); + } + return map; + } + + /* + * 随机获取商品 + */ + public Map getRand(int num){ + List list = goodsMapper.findRand(num); + Map map = new HashMap<>(); + for (int i=0;i < list.size();i++) { + map.put(i+"",list.get(i)); + } + return map; + } + + /* + * 获取商户宣传店铺的海报 + */ + public Map getMtImg(int width,int height,int num){ + Map map = new HashMap<>(); + List list = mtUiMapper.findLimit(width,height,num); + for (int i=0;i修改用户信息

+ * + * @return + *-1 修改信息失败 + * 1 修改信息成功 + * 0 必填信息不能为空 + * 2 邮箱格式不正确 + * 3 原密码错误 + * 4 两次输入的密码不一致 + */ + public int updateInfo(RedirectAttributes redirectAttributes, HttpServletRequest request,MultipartFile img, int id, String username, String email, String oldPwd, String newPwd, String rePwd){ + if (isEmptyUtil.strings(username,email)){ + return 0; + } + if (!mailService.checkEmail(email)){ + return 2; + } + + SysUser user = sysUserMapper.selectById(id); + + if (!oldPwd.equals("") || !newPwd.equals("") || !rePwd.equals("")){ + oldPwd = DigestUtils.md5DigestAsHex(oldPwd.getBytes()); + if (!user.getPassword().equals(oldPwd)){ + return 3; + } + if (!newPwd.equals(rePwd)){ + return 4; + } + } + if (newPwd.equals("")){ + newPwd = oldPwd; + }else{ + newPwd = DigestUtils.md5DigestAsHex(newPwd.getBytes()); + } + // 更新头像 + String header = user.getHeader(); + if (!img.isEmpty()){ + if (!user.getHeader().equals("/data/header/user/default.jpg")){ + fileUtil.deleteFile(user.getHeader()); + } + header = fileUtil.upFile(img,redirectAttributes,request,"/data/header/user/",""+id); + } + int sql = sysUserMapper.updateById(username,newPwd,header,email,id); + if (sql==1){ + // 更新用户信息 + request.getSession().setAttribute("user",sysUserMapper.selectById(id)); + return 1; + } + return -1; + } +} diff --git a/src/main/java/com/example/jieyue/user/service/UserLoginService.java b/src/main/java/com/example/jieyue/user/service/UserLoginService.java new file mode 100644 index 0000000..9a8ba64 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/service/UserLoginService.java @@ -0,0 +1,137 @@ +package com.example.jieyue.user.service; + +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.common.service.MailService; +import com.example.jieyue.common.service.SysUserService; +import com.example.jieyue.common.utils.IsEmptyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.DigestUtils; + +import java.util.HashMap; +import java.util.Map; + +@Service +public class UserLoginService { + @Autowired + SysUserService service; + @Value("${site-url}") + String sitrUrl; + @Autowired + MailService mailService; + @Autowired + RedisTemplate redisTemplate; + + // 判空工具类 + IsEmptyUtil isEmptyUtil = IsEmptyUtil.getInstance(); + /** + *

登陆验证逻辑处理

+ * @return int + * 1 登陆成功 + * 0 必填信息不能为空 + *-1 邮箱不存在或密码错误 + */ + public int dologin(String email,String password){ + SysUser user = service.selectByEmail(email); + // 用户名密码不能为空 + if (isEmptyUtil.strings(email,password)){ + return 0; + } + // 不存在该用户 + if (user==null){ + return -1; + } + // 密码验证 + password = DigestUtils.md5DigestAsHex(password.getBytes()); + // 密码错误 + if (!user.getPassword().equals(password)){ + return -1; + }else{ + return 1; + } + } + + /* + * 返回用户信息 + */ + public SysUser userInfo(String email){ + return service.getUserInfo(email); + } + + /** + *

注册逻辑处理

+ * @return int + *-1 注册超时请重试 + * 0 必填信息不能为空 + * 1 处理请求合理,已发送验证码 + * 2 两次密码不一致 + * 3 邮箱格式有误 + * 4 该邮箱已被注册 + */ + public int singup(String email,String username,String password,String repwd){ + // 必填信息不能为空 + if (isEmptyUtil.strings(email,username,password,repwd)){ + return 0; + } + // 邮箱格式验证 + if(!mailService.checkEmail(email)){ + System.out.println(email); + return 3; + } + // 两次密码不一致 + if (!password.equals(repwd)){ + return 2; + } + // 该邮箱已被注册 + SysUser user = service.selectByEmail(email); + password = DigestUtils.md5DigestAsHex(password.getBytes()); + if (user!=null){ + if (user.getMark()!=0){ + return 4; + }else{ + if (service.update(username,password,email)!=1){ + return -1; + } + } + }else{ + // 将信息保存,状态置为0未启用 + + // 添加信息未成功返回超时 + if (service.insert(username,password,email,0)!=1){ + return -1; + } + } + // 发送注册验证邮件 + Map map = new HashMap<>(); + map.put("email",email); + map.put("title","捷阅网用户注册验证"); + map.put("context","点击此链接完成注册验证"); + + redisTemplate.opsForList().leftPush("email",map); + + return 1; + } + + /** + * 验证邮件确认注册 + * @return int + *-1 404页面 + * 0 网络超时请重试 + * 1 注册成功,跳转至登陆页面 + */ + public int singCheck(String email){ + SysUser user = service.selectByEmail(email); + if (user!=null && user.getMark()==0){ + int res = service.updateMark(1,email); + if (res==1){ + return 1; + }else{ + return 0; + } + }else{ + return -1; + } + } +} diff --git a/src/main/java/com/example/jieyue/user/service/UserOrderService.java b/src/main/java/com/example/jieyue/user/service/UserOrderService.java new file mode 100644 index 0000000..8ba9a52 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/service/UserOrderService.java @@ -0,0 +1,44 @@ +package com.example.jieyue.user.service; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysOrder; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.mapper.SysOrderMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class UserOrderService { + @Autowired + SysOrderMapper orderMapper; + @Autowired + SysGoodsMapper goodsMapper; + + /* + * 获取用户订单 + */ + public List getOrderList(int userId,int page,int num){ + return orderMapper.findByUser(userId,(page-1)*num,num); + } + + /* + * 获取订单中的商品信息 + */ + public List getGoodsList(List orderList){ + List list = new ArrayList<>(); + for (SysOrder order : orderList) { + list.add(goodsMapper.findById(order.getGoodsId())); + } + return list; + } + + /* + * 获取总页数 + */ + public int getAllPage(int userId,int num){ + return (int)Math.ceil((double)orderMapper.orderCountByUser(userId)/(double)num); + } +} diff --git a/src/main/java/com/example/jieyue/user/service/UserProductService.java b/src/main/java/com/example/jieyue/user/service/UserProductService.java new file mode 100644 index 0000000..2072537 --- /dev/null +++ b/src/main/java/com/example/jieyue/user/service/UserProductService.java @@ -0,0 +1,101 @@ +package com.example.jieyue.user.service; + +import com.example.jieyue.common.entity.SysComment; +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysUser; +import com.example.jieyue.common.mapper.SysCommentMapper; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class UserProductService { + @Autowired + SysGoodsMapper goodsMapper; + @Autowired + SysCommentMapper commentMapper; + @Autowired + SysUserMapper userMapper; + + /* + * 整合用户信息和评论信息 + */ + public List getCommentList(int goods, int page, int num){ + List commentInfo = getCommentInfo(goods,page,num); + List list = new ArrayList<>(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (SysComment comment : commentInfo) { + Map commentMap = new HashMap<>(); + SysUser user = getUserInfo(comment.getUser()); + commentMap.put("userHeader",user.getHeader()); + commentMap.put("userId",user.getId()+""); + commentMap.put("commentId",comment.getId()+""); + commentMap.put("userName",user.getUsername()); + commentMap.put("createTime",sdf.format(new Date(comment.getCreateTime()))); + commentMap.put("context",comment.getContext()); + + list.add(commentMap); + } + return list; + } + + /* + * 获取当前商品总评论页数 + */ + public int getAllCountPage(int goods,int num){ + int count = commentMapper.getAllCountByGoods(goods); + return (int)Math.ceil((double)count/(double)num); + } + + /* + * 通过id值获取商品对象 + */ + public SysGoods getGoods(int id){ + return goodsMapper.findById(id); + } + + /** + *

获取商品评论列表

+ * + * @param goods 商品id + * @param page 评论的页数 + * @param num 一页评论的条数 + */ + public List getCommentInfo(int goods, int page, int num){ + return commentMapper.findByGoodsLimit(goods,(page-1)*num,page*num); + } + + /* + * 获取评论对应的商户信息 + */ + public SysUser getUserInfo(int userId){ + return userMapper.selectById(userId); + } + + /** + *

添加商品评论

+ * + * @return + *-1 添加失败 + * 1 添加成功 + * + * @author Bosen + * 2020/11/28 14:32 + */ + public int addComment(int goodsId,int merchant,String context,HttpServletRequest request){ + // 获取发表评论的用户信息 + SysUser user = (SysUser)request.getSession().getAttribute("user"); + // 生成时间 + long time = System.currentTimeMillis(); + int sql = commentMapper.insert(user.getId(),goodsId,merchant,context,time); + if (sql == 1){ + return 1; + } + return -1; + } +} diff --git a/src/main/java/com/example/jieyue/user/service/UserSearchService.java b/src/main/java/com/example/jieyue/user/service/UserSearchService.java new file mode 100644 index 0000000..60e42cc --- /dev/null +++ b/src/main/java/com/example/jieyue/user/service/UserSearchService.java @@ -0,0 +1,20 @@ +package com.example.jieyue.user.service; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class UserSearchService { + @Autowired + SysGoodsMapper goodsMapper; + /* + * 通过关键字模糊查找商品 + */ + public List searchGoods(String keyword){ + return goodsMapper.search(keyword); + } +} diff --git a/src/main/java/com/example/jieyue/user/service/UserShopService.java b/src/main/java/com/example/jieyue/user/service/UserShopService.java new file mode 100644 index 0000000..eabdbfb --- /dev/null +++ b/src/main/java/com/example/jieyue/user/service/UserShopService.java @@ -0,0 +1,61 @@ +package com.example.jieyue.user.service; + +import com.example.jieyue.common.entity.SysGoods; +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.mapper.SysMtMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class UserShopService { + @Autowired + SysMtMapper merchantMapper; + @Autowired + SysGoodsMapper goodsMapper; + + /* + * 获取商户信息 + */ + public SysMt getMerchantInfo(int merchantId){ + return merchantMapper.findById(merchantId); + } + + /* + * 获取商户商品信息 + */ + public Map getGoodsList(int merchantId, int page, int num){ + List list = goodsMapper.findByMtLimit(merchantId,(page-1)*num,page*num); + Map map = new HashMap<>(); + for (int i = 0;i < list.size();i++){ + map.put(i,list.get(i)); + } + return map; + } + + /* + * 随机获取商品 + */ + public Map getRandGoodsMap(int merchant,int num){ + List list = goodsMapper.findMerchantRand(merchant,num); + Map map = new HashMap<>(); + for (int i = 0;i < list.size();i++) { + map.put(i,list.get(i)); + } + return map; + } + + /* + * 获取总页数 + */ + public int getAllPage(int merchantId,int num){ + int all = goodsMapper.countByMerchant(merchantId); + return (int)Math.ceil((double)all/(double)num); + } + +} + diff --git a/src/main/java/com/example/jieyue/user/service/WxPayService.java b/src/main/java/com/example/jieyue/user/service/WxPayService.java new file mode 100644 index 0000000..bea542f --- /dev/null +++ b/src/main/java/com/example/jieyue/user/service/WxPayService.java @@ -0,0 +1,267 @@ +package com.example.jieyue.user.service; + +import com.example.jieyue.common.entity.SysMt; +import com.example.jieyue.common.entity.SysOrder; +import com.example.jieyue.common.mapper.SysCartMapper; +import com.example.jieyue.common.mapper.SysGoodsMapper; +import com.example.jieyue.common.mapper.SysMtMapper; +import com.example.jieyue.common.mapper.SysOrderMapper; +import com.example.jieyue.common.utils.IsEmptyUtil; +import com.example.jieyue.common.utils.QRCodeUtil; +import com.example.jieyue.common.utils.StringUtil; +import com.example.jieyue.wxpay.config.MyWXPayConfig; +import com.example.jieyue.wxpay.sdk.WXPay; +import com.example.jieyue.wxpay.sdk.WXPayConstants; +import com.example.jieyue.wxpay.sdk.WXPayUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.util.ResourceUtils; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + *

微信支付服务类

+ * @author Bosen + * 2020/12/4 20:53 + */ +@Service +public class WxPayService { + @Autowired + StringUtil stringUtil; + @Autowired + SysOrderMapper orderMapper; + @Autowired + SysGoodsMapper goodsMapper; + @Autowired + SysMtMapper merchantMapper; + @Autowired + SysCartMapper cartMapper; + @Value("${site-url}") + String siteUrl; + + MyWXPayConfig config = new MyWXPayConfig(); + WXPay wxPay = new WXPay(config); + + String staticPath; + String classPath; + + IsEmptyUtil isEmptyUtil = new IsEmptyUtil(); + + public WxPayService() throws Exception { + this.classPath = ResourceUtils.getURL("classpath:static/").getPath(); + } + + /** + * 添加订单 + * + * @return + *-1 sql语句执行失败 + * 0 必填信息不能为空 + * 1 添加成功 + */ + @Transactional + public String addOrder(String nums,String mark, String users, String merchants, String prices, String notes, + String goods,String address,String name,String phone,String code,int way,String carts) { + if (isEmptyUtil.strings(address,name,phone)){ + return "0"; + } + // 获取当前时间戳 + long createTime = System.currentTimeMillis(); + DecimalFormat dfPrice = new DecimalFormat("#.00"); + String[] numArr = getStringArray(nums); + String[] userArr = getStringArray(users); + String[] cartArr = getStringArray(carts); + String[] goodsArr = getStringArray(goods); + String[] pricesArr = getStringArray(prices); + String[] merchantsArr = getStringArray(merchants); + for (int i = 0; i < numArr.length;i++){ + // 生成订单号 + String orderId = getOrderId(); + // 获取商户信息 + SysMt merchant = merchantMapper.findById(Integer.valueOf(merchantsArr[i])); + // 执行sql语句 + int sql = -1; + if (cartArr[i].equals("0")){ + sql = orderMapper.insert1(orderId,createTime,Integer.valueOf(numArr[i]),mark,Integer.valueOf(userArr[i]), + Integer.valueOf(merchantsArr[i]),new BigDecimal(dfPrice.format(Double.valueOf(pricesArr[i]))), + Integer.valueOf(goodsArr[i]),notes,address,name,phone,code,way,merchant.getRatio()); + }else{ + sql = orderMapper.insert2(orderId,createTime,Integer.valueOf(numArr[i]),mark,Integer.valueOf(userArr[i]), + Integer.valueOf(merchantsArr[i]),new BigDecimal(dfPrice.format(Double.valueOf(pricesArr[i]))), + Integer.valueOf(goodsArr[i]),notes,address,name,phone,code,way,cartArr[i],merchant.getRatio()); + } + + // 将商品库存做相应的减少 + int delStock = goodsMapper.delStock(Integer.valueOf(goodsArr[i]),Integer.valueOf(numArr[i])); + + // 库存检查,库存少于零时回滚 + if (sql != 1 || delStock != 1 || goodsMapper.findById(Integer.valueOf(goodsArr[i])).getStock() < 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + } + String allPrice = getAllPrice(pricesArr,numArr); + return wxCodeUrl(mark,allPrice); + } + + /* + * 分割js传递的数组 + */ + public String[] getStringArray(String array){ + List list = new ArrayList<>(); + return array.split(","); + } + + /* + * 总金额运算 + */ + public String getAllPrice(String[] prices,String[] nums){ + DecimalFormat dfPrice = new DecimalFormat("#.00"); + DecimalFormat dfNum = new DecimalFormat("#"); + BigDecimal allPrice = new BigDecimal(0.00); + + for (int i = 0;i < prices.length;i++){ + BigDecimal price = new BigDecimal(dfPrice.format(Double.valueOf(prices[i]))); + BigDecimal num = new BigDecimal(dfNum.format(Double.valueOf(nums[i]))); + allPrice = allPrice.add(price.multiply(num)); + } + return allPrice.multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString(); + } + + /* + * 生成二维码 + */ + public String wxCodeUrl(String orderMark,String price){ + Map data = new HashMap<>(); + data.put("body", "捷阅网商品"); + data.put("out_trade_no", orderMark); + data.put("device_info", orderMark); + BigDecimal temp = new BigDecimal(100); + data.put("total_fee", price); + data.put("spbill_create_ip", "123.12.12.123"); + data.put("notify_url", siteUrl+"/user/wxpay/notify"); + data.put("trade_type", "NATIVE"); // 此处指定为扫码支付 + data.put("product_id", orderMark); + try { + Map resp = wxPay.unifiedOrder(data); + System.out.println(resp); + QRCodeUtil.zxingCodeCreate(resp.get("code_url"),classPath+"/data/pay/",orderMark,500,""); + } catch (Exception e) { + e.printStackTrace(); + } + String codeUrl = "/data/pay/"+orderMark+".jpg"; + orderMapper.updateCodeUrl(codeUrl,orderMark); + return codeUrl; + } + + /* + * 生成订单号 + * + * 由三位字母十四位的日期数六位随机数组成 + */ + public String getOrderId(){ + String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + char[] c = s.toCharArray(); + Random random = new Random(); + String word = ""; + for( int i = 0; i < 3; i ++) { + word = word + c[random.nextInt(c.length)]; + } + SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDDHHmmss"); + String time = sdf.format(System.currentTimeMillis()); + String number = ""+Math.round(Math.random()*(999999-100000)+100000); + String result = word + time + number; + + return result; + } + + /** + *

回调处理

+ */ + public String wxNotify(HttpServletRequest request) throws Exception { + return payAsyncNotifyVerificationSign(request); + } + + /** + * 微信支付异步通知验证签名 + * @param request + * @return + */ + public String payAsyncNotifyVerificationSign(HttpServletRequest request) throws Exception { + String returnXmlMessage = null; + String notifyXmlData = null; + try { + notifyXmlData = readXmlFromStream(request); + + Map notifyMapData = WXPayUtil.xmlToMap(notifyXmlData); + + // 验证签名 + boolean signatureValid = wxPay.isPayResultNotifySignatureValid(notifyMapData); + if (signatureValid) { + // 订单支付成功之后相关业务逻辑... + orderMapper.updateState(System.currentTimeMillis(),notifyMapData.get("device_info")); + List orderList = orderMapper.findByOrderMark(notifyMapData.get("device_info")); + for (SysOrder order : orderList) { + cartMapper.deleteById(order.getCartId()); + } + // 一切正常返回的xml数据 + returnXmlMessage = setReturnXml(WXPayConstants.SUCCESS, "OK"); + + } else { + returnXmlMessage = setReturnXml(WXPayConstants.FAIL, "Verification sign failed2"); + } + + } catch (IOException e) { + returnXmlMessage = setReturnXml(WXPayConstants.FAIL, "An exception occurred while reading the WeChat server returning xml data in the stream."); + } catch (Exception e) { + returnXmlMessage = setReturnXml(WXPayConstants.FAIL, "Payment successful, exception occurred during asynchronous notification processing."); + } + + return returnXmlMessage; + } + + /** + * 从流中读取微信返回的xml数据 + * + * @param httpServletRequest + * @return + * @throws IOException + */ + private String readXmlFromStream(HttpServletRequest httpServletRequest) throws IOException { + InputStream inputStream = httpServletRequest.getInputStream(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + final StringBuffer sb = new StringBuffer(); + String line = null; + try { + while ((line = bufferedReader.readLine()) != null) { + sb.append(line); + } + } finally { + bufferedReader.close(); + inputStream.close(); + } + + return sb.toString(); + } + + /** + * 设置返回给微信服务器的xml信息 + * + * @param returnCode + * @param returnMsg + * @return + */ + private String setReturnXml(String returnCode, String returnMsg) { + return ""; + } +} diff --git a/src/main/java/com/example/jieyue/wxpay/config/MyWXPayConfig.java b/src/main/java/com/example/jieyue/wxpay/config/MyWXPayConfig.java new file mode 100644 index 0000000..72d3f7e --- /dev/null +++ b/src/main/java/com/example/jieyue/wxpay/config/MyWXPayConfig.java @@ -0,0 +1,68 @@ +package com.example.jieyue.wxpay.config; + +import com.example.jieyue.wxpay.sdk.IWXPayDomain; +import com.example.jieyue.wxpay.sdk.WXPayConfig; +import com.example.jieyue.wxpay.sdk.WXPayConstants; + +import java.io.*; + +public class MyWXPayConfig extends WXPayConfig{ + + private byte[] certData; + +/* + public MyConfig() throws Exception { + String certPath = "/path/to/apiclient_cert.p12"; + File file = new File(certPath); + InputStream certStream = new FileInputStream(file); + this.certData = new byte[(int) file.length()]; + certStream.read(this.certData); + certStream.close(); + } +*/ + + public String getAppID() { + return "wx8397f8696b538317"; + } + + public String getMchID() { + return "1473426802"; + } + + public String getKey() { + return "T6m9iK73b0kn9g5v426MKfHQH7X8rKwb"; + } + + public InputStream getCertStream() { +/* + ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData); + return certBis; +*/ + return null; + + } + + public int getHttpConnectTimeoutMs() { + return 8000; + } + + public int getHttpReadTimeoutMs() { + return 10000; + } + + public IWXPayDomain getWXPayDomain() { + // 这个方法需要这样实现, 否则无法正常初始化WXPay + IWXPayDomain iwxPayDomain = new IWXPayDomain() { + + public void report(String domain, long elapsedTimeMillis, Exception ex) { + + } + + public DomainInfo getDomain(WXPayConfig config) { + return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API, true); + } + }; + return iwxPayDomain; + + } +} diff --git a/src/main/java/com/example/jieyue/wxpay/sdk/IWXPayDomain.java b/src/main/java/com/example/jieyue/wxpay/sdk/IWXPayDomain.java new file mode 100644 index 0000000..3659bc6 --- /dev/null +++ b/src/main/java/com/example/jieyue/wxpay/sdk/IWXPayDomain.java @@ -0,0 +1,42 @@ +package com.example.jieyue.wxpay.sdk; + +/** + * 域名管理,实现主备域名自动切换 + */ +public abstract interface IWXPayDomain { + /** + * 上报域名网络状况 + * @param domain 域名。 比如:api.mch.weixin.qq.com + * @param elapsedTimeMillis 耗时 + * @param ex 网络请求中出现的异常。 + * null表示没有异常 + * ConnectTimeoutException,表示建立网络连接异常 + * UnknownHostException, 表示dns解析异常 + */ + abstract void report(final String domain, long elapsedTimeMillis, final Exception ex); + + /** + * 获取域名 + * @param config 配置 + * @return 域名 + */ + abstract DomainInfo getDomain(final WXPayConfig config); + + static class DomainInfo{ + public String domain; //域名 + public boolean primaryDomain; //该域名是否为主域名。例如:api.mch.weixin.qq.com为主域名 + public DomainInfo(String domain, boolean primaryDomain) { + this.domain = domain; + this.primaryDomain = primaryDomain; + } + + @Override + public String toString() { + return "DomainInfo{" + + "domain='" + domain + '\'' + + ", primaryDomain=" + primaryDomain + + '}'; + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/jieyue/wxpay/sdk/WXPay.java b/src/main/java/com/example/jieyue/wxpay/sdk/WXPay.java new file mode 100644 index 0000000..5c6e9d0 --- /dev/null +++ b/src/main/java/com/example/jieyue/wxpay/sdk/WXPay.java @@ -0,0 +1,686 @@ +package com.example.jieyue.wxpay.sdk; + +import com.example.jieyue.wxpay.sdk.WXPayConstants.SignType; + +import java.util.HashMap; +import java.util.Map; + +public class WXPay { + + private WXPayConfig config; + private SignType signType; + private boolean autoReport; + private boolean useSandbox; + private String notifyUrl; + private WXPayRequest wxPayRequest; + + public WXPay(final WXPayConfig config) throws Exception { + this(config, null, true, false); + } + + public WXPay(final WXPayConfig config, final boolean autoReport) throws Exception { + this(config, null, autoReport, false); + } + + + public WXPay(final WXPayConfig config, final boolean autoReport, final boolean useSandbox) throws Exception{ + this(config, null, autoReport, useSandbox); + } + + public WXPay(final WXPayConfig config, final String notifyUrl) throws Exception { + this(config, notifyUrl, true, false); + } + + public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport) throws Exception { + this(config, notifyUrl, autoReport, false); + } + + public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception { + this.config = config; + this.notifyUrl = notifyUrl; + this.autoReport = autoReport; + this.useSandbox = useSandbox; + + this.signType = SignType.MD5; + + this.wxPayRequest = new WXPayRequest(config); + } + + private void checkWXPayConfig() throws Exception { + if (this.config == null) { + throw new Exception("config is null"); + } + if (this.config.getAppID() == null || this.config.getAppID().trim().length() == 0) { + throw new Exception("appid in config is empty"); + } + if (this.config.getMchID() == null || this.config.getMchID().trim().length() == 0) { + throw new Exception("appid in config is empty"); + } + if (this.config.getCertStream() == null) { + throw new Exception("cert stream in config is empty"); + } + if (this.config.getWXPayDomain() == null){ + throw new Exception("config.getWXPayDomain() is null"); + } + + if (this.config.getHttpConnectTimeoutMs() < 10) { + throw new Exception("http connect timeout is too small"); + } + if (this.config.getHttpReadTimeoutMs() < 10) { + throw new Exception("http read timeout is too small"); + } + + } + + /** + * 向 Map 中添加 appid、mch_id、nonce_str、sign_type、sign
+ * 该函数适用于商户适用于统一下单等接口,不适用于红包、代金券接口 + * + * @param reqData + * @return + * @throws Exception + */ + public Map fillRequestData(Map reqData) throws Exception { + reqData.put("appid", config.getAppID()); + reqData.put("mch_id", config.getMchID()); + reqData.put("nonce_str", WXPayUtil.generateNonceStr()); + if (SignType.MD5.equals(this.signType)) { + reqData.put("sign_type", WXPayConstants.MD5); + } + else if (SignType.HMACSHA256.equals(this.signType)) { + reqData.put("sign_type", WXPayConstants.HMACSHA256); + } + reqData.put("sign", WXPayUtil.generateSignature(reqData, config.getKey(), this.signType)); + return reqData; + } + + /** + * 判断xml数据的sign是否有效,必须包含sign字段,否则返回false。 + * + * @param reqData 向wxpay post的请求数据 + * @return 签名是否有效 + * @throws Exception + */ + public boolean isResponseSignatureValid(Map reqData) throws Exception { + // 返回数据的签名方式和请求中给定的签名方式是一致的 + return WXPayUtil.isSignatureValid(reqData, this.config.getKey(), this.signType); + } + + /** + * 判断支付结果通知中的sign是否有效 + * + * @param reqData 向wxpay post的请求数据 + * @return 签名是否有效 + * @throws Exception + */ + public boolean isPayResultNotifySignatureValid(Map reqData) throws Exception { + String signTypeInData = reqData.get(WXPayConstants.FIELD_SIGN_TYPE); + SignType signType; + if (signTypeInData == null) { + signType = SignType.MD5; + } + else { + signTypeInData = signTypeInData.trim(); + if (signTypeInData.length() == 0) { + signType = SignType.MD5; + } + else if (WXPayConstants.MD5.equals(signTypeInData)) { + signType = SignType.MD5; + } + else if (WXPayConstants.HMACSHA256.equals(signTypeInData)) { + signType = SignType.HMACSHA256; + } + else { + throw new Exception(String.format("Unsupported sign_type: %s", signTypeInData)); + } + } + return WXPayUtil.isSignatureValid(reqData, this.config.getKey(), signType); + } + + + /** + * 不需要证书的请求 + * @param urlSuffix String + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 超时时间,单位是毫秒 + * @param readTimeoutMs 超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public String requestWithoutCert(String urlSuffix, Map reqData, + int connectTimeoutMs, int readTimeoutMs) throws Exception { + String msgUUID = reqData.get("nonce_str"); + String reqBody = WXPayUtil.mapToXml(reqData); + + String resp = this.wxPayRequest.requestWithoutCert(urlSuffix, msgUUID, reqBody, connectTimeoutMs, readTimeoutMs, autoReport); + return resp; + } + + + /** + * 需要证书的请求 + * @param urlSuffix String + * @param reqData 向wxpay post的请求数据 Map + * @param connectTimeoutMs 超时时间,单位是毫秒 + * @param readTimeoutMs 超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public String requestWithCert(String urlSuffix, Map reqData, + int connectTimeoutMs, int readTimeoutMs) throws Exception { + String msgUUID= reqData.get("nonce_str"); + String reqBody = WXPayUtil.mapToXml(reqData); + + String resp = this.wxPayRequest.requestWithCert(urlSuffix, msgUUID, reqBody, connectTimeoutMs, readTimeoutMs, this.autoReport); + return resp; + } + + /** + * 处理 HTTPS API返回数据,转换成Map对象。return_code为SUCCESS时,验证签名。 + * @param xmlStr API返回的XML格式数据 + * @return Map类型数据 + * @throws Exception + */ + public Map processResponseXml(String xmlStr) throws Exception { + String RETURN_CODE = "return_code"; + String return_code; + Map respData = WXPayUtil.xmlToMap(xmlStr); + if (respData.containsKey(RETURN_CODE)) { + return_code = respData.get(RETURN_CODE); + } + else { + throw new Exception(String.format("No `return_code` in XML: %s", xmlStr)); + } + + if (return_code.equals(WXPayConstants.FAIL)) { + return respData; + } + else if (return_code.equals(WXPayConstants.SUCCESS)) { + if (this.isResponseSignatureValid(respData)) { + return respData; + } + else { + throw new Exception(String.format("Invalid sign value in XML: %s", xmlStr)); + } + } + else { + throw new Exception(String.format("return_code value %s is invalid in XML: %s", return_code, xmlStr)); + } + } + + /** + * 作用:提交刷卡支付
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map microPay(Map reqData) throws Exception { + return this.microPay(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:提交刷卡支付
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map microPay(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_MICROPAY_URL_SUFFIX; + } + else { + url = WXPayConstants.MICROPAY_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + /** + * 提交刷卡支付,针对软POS,尽可能做成功 + * 内置重试机制,最多60s + * @param reqData + * @return + * @throws Exception + */ + public Map microPayWithPos(Map reqData) throws Exception { + return this.microPayWithPos(reqData, this.config.getHttpConnectTimeoutMs()); + } + + /** + * 提交刷卡支付,针对软POS,尽可能做成功 + * 内置重试机制,最多60s + * @param reqData + * @param connectTimeoutMs + * @return + * @throws Exception + */ + public Map microPayWithPos(Map reqData, int connectTimeoutMs) throws Exception { + int remainingTimeMs = 60*1000; + long startTimestampMs = 0; + Map lastResult = null; + Exception lastException = null; + + while (true) { + startTimestampMs = WXPayUtil.getCurrentTimestampMs(); + int readTimeoutMs = remainingTimeMs - connectTimeoutMs; + if (readTimeoutMs > 1000) { + try { + lastResult = this.microPay(reqData, connectTimeoutMs, readTimeoutMs); + String returnCode = lastResult.get("return_code"); + if (returnCode.equals("SUCCESS")) { + String resultCode = lastResult.get("result_code"); + String errCode = lastResult.get("err_code"); + if (resultCode.equals("SUCCESS")) { + break; + } + else { + // 看错误码,若支付结果未知,则重试提交刷卡支付 + if (errCode.equals("SYSTEMERROR") || errCode.equals("BANKERROR") || errCode.equals("USERPAYING")) { + remainingTimeMs = remainingTimeMs - (int)(WXPayUtil.getCurrentTimestampMs() - startTimestampMs); + if (remainingTimeMs <= 100) { + break; + } + else { + WXPayUtil.getLogger().info("microPayWithPos: try micropay again"); + if (remainingTimeMs > 5*1000) { + Thread.sleep(5*1000); + } + else { + Thread.sleep(1*1000); + } + continue; + } + } + else { + break; + } + } + } + else { + break; + } + } + catch (Exception ex) { + lastResult = null; + lastException = ex; + } + } + else { + break; + } + } + + if (lastResult == null) { + throw lastException; + } + else { + return lastResult; + } + } + + + + /** + * 作用:统一下单
+ * 场景:公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map unifiedOrder(Map reqData) throws Exception { + return this.unifiedOrder(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:统一下单
+ * 场景:公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map unifiedOrder(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_UNIFIEDORDER_URL_SUFFIX; + } + else { + url = WXPayConstants.UNIFIEDORDER_URL_SUFFIX; + } + if(this.notifyUrl != null) { + reqData.put("notify_url", this.notifyUrl); + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:查询订单
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map orderQuery(Map reqData) throws Exception { + return this.orderQuery(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:查询订单
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 int + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map orderQuery(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_ORDERQUERY_URL_SUFFIX; + } + else { + url = WXPayConstants.ORDERQUERY_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:撤销订单
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map reverse(Map reqData) throws Exception { + return this.reverse(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:撤销订单
+ * 场景:刷卡支付
+ * 其他:需要证书 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map reverse(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_REVERSE_URL_SUFFIX; + } + else { + url = WXPayConstants.REVERSE_URL_SUFFIX; + } + String respXml = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:关闭订单
+ * 场景:公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map closeOrder(Map reqData) throws Exception { + return this.closeOrder(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:关闭订单
+ * 场景:公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map closeOrder(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_CLOSEORDER_URL_SUFFIX; + } + else { + url = WXPayConstants.CLOSEORDER_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:申请退款
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map refund(Map reqData) throws Exception { + return this.refund(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:申请退款
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付
+ * 其他:需要证书 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map refund(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_REFUND_URL_SUFFIX; + } + else { + url = WXPayConstants.REFUND_URL_SUFFIX; + } + String respXml = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:退款查询
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map refundQuery(Map reqData) throws Exception { + return this.refundQuery(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:退款查询
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map refundQuery(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_REFUNDQUERY_URL_SUFFIX; + } + else { + url = WXPayConstants.REFUNDQUERY_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:对账单下载(成功时返回对账单数据,失败时返回XML格式数据)
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map downloadBill(Map reqData) throws Exception { + return this.downloadBill(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:对账单下载
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付
+ * 其他:无论是否成功都返回Map。若成功,返回的Map中含有return_code、return_msg、data, + * 其中return_code为`SUCCESS`,data为对账单数据。 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return 经过封装的API返回数据 + * @throws Exception + */ + public Map downloadBill(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_DOWNLOADBILL_URL_SUFFIX; + } + else { + url = WXPayConstants.DOWNLOADBILL_URL_SUFFIX; + } + String respStr = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs).trim(); + Map ret; + // 出现错误,返回XML数据 + if (respStr.indexOf("<") == 0) { + ret = WXPayUtil.xmlToMap(respStr); + } + else { + // 正常返回csv数据 + ret = new HashMap(); + ret.put("return_code", WXPayConstants.SUCCESS); + ret.put("return_msg", "ok"); + ret.put("data", respStr); + } + return ret; + } + + + /** + * 作用:交易保障
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map report(Map reqData) throws Exception { + return this.report(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:交易保障
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map report(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_REPORT_URL_SUFFIX; + } + else { + url = WXPayConstants.REPORT_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return WXPayUtil.xmlToMap(respXml); + } + + + /** + * 作用:转换短链接
+ * 场景:刷卡支付、扫码支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map shortUrl(Map reqData) throws Exception { + return this.shortUrl(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:转换短链接
+ * 场景:刷卡支付、扫码支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map shortUrl(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_SHORTURL_URL_SUFFIX; + } + else { + url = WXPayConstants.SHORTURL_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:授权码查询OPENID接口
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map authCodeToOpenid(Map reqData) throws Exception { + return this.authCodeToOpenid(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:授权码查询OPENID接口
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map authCodeToOpenid(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_AUTHCODETOOPENID_URL_SUFFIX; + } + else { + url = WXPayConstants.AUTHCODETOOPENID_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + +} // end class diff --git a/src/main/java/com/example/jieyue/wxpay/sdk/WXPayConfig.java b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayConfig.java new file mode 100644 index 0000000..6c1740f --- /dev/null +++ b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayConfig.java @@ -0,0 +1,103 @@ +package com.example.jieyue.wxpay.sdk; + +import java.io.InputStream; + +public abstract class WXPayConfig { + + + + /** + * 获取 App ID + * + * @return App ID + */ + public abstract String getAppID(); + + + /** + * 获取 Mch ID + * + * @return Mch ID + */ + public abstract String getMchID(); + + + /** + * 获取 API 密钥 + * + * @return API密钥 + */ + public abstract String getKey(); + + + /** + * 获取商户证书内容 + * + * @return 商户证书内容 + */ + public abstract InputStream getCertStream(); + + /** + * HTTP(S) 连接超时时间,单位毫秒 + * + * @return + */ + public int getHttpConnectTimeoutMs() { + return 6*1000; + } + + /** + * HTTP(S) 读数据超时时间,单位毫秒 + * + * @return + */ + public int getHttpReadTimeoutMs() { + return 8*1000; + } + + /** + * 获取WXPayDomain, 用于多域名容灾自动切换 + * @return + */ + public abstract IWXPayDomain getWXPayDomain(); + + /** + * 是否自动上报。 + * 若要关闭自动上报,子类中实现该函数返回 false 即可。 + * + * @return + */ + public boolean shouldAutoReport() { + return true; + } + + /** + * 进行健康上报的线程的数量 + * + * @return + */ + public int getReportWorkerNum() { + return 6; + } + + + /** + * 健康上报缓存消息的最大数量。会有线程去独立上报 + * 粗略计算:加入一条消息200B,10000消息占用空间 2000 KB,约为2MB,可以接受 + * + * @return + */ + public int getReportQueueMaxSize() { + return 10000; + } + + /** + * 批量上报,一次最多上报多个数据 + * + * @return + */ + public int getReportBatchSize() { + return 10; + } + +} diff --git a/src/main/java/com/example/jieyue/wxpay/sdk/WXPayConstants.java b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayConstants.java new file mode 100644 index 0000000..05a2612 --- /dev/null +++ b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayConstants.java @@ -0,0 +1,59 @@ +package com.example.jieyue.wxpay.sdk; + +import org.apache.http.client.HttpClient; + +/** + * 常量 + */ +public class WXPayConstants { + + public enum SignType { + MD5, HMACSHA256 + } + + public static final String DOMAIN_API = "api.mch.weixin.qq.com"; + public static final String DOMAIN_API2 = "api2.mch.weixin.qq.com"; + public static final String DOMAIN_APIHK = "apihk.mch.weixin.qq.com"; + public static final String DOMAIN_APIUS = "apius.mch.weixin.qq.com"; + + + public static final String FAIL = "FAIL"; + public static final String SUCCESS = "SUCCESS"; + public static final String HMACSHA256 = "HMAC-SHA256"; + public static final String MD5 = "MD5"; + + public static final String FIELD_SIGN = "sign"; + public static final String FIELD_SIGN_TYPE = "sign_type"; + + public static final String WXPAYSDK_VERSION = "WXPaySDK/3.0.9"; + public static final String USER_AGENT = WXPAYSDK_VERSION + + " (" + System.getProperty("os.arch") + " " + System.getProperty("os.name") + " " + System.getProperty("os.version") + + ") Java/" + System.getProperty("java.version") + " HttpClient/" + HttpClient.class.getPackage().getImplementationVersion(); + + public static final String MICROPAY_URL_SUFFIX = "/pay/micropay"; + public static final String UNIFIEDORDER_URL_SUFFIX = "/pay/unifiedorder"; + public static final String ORDERQUERY_URL_SUFFIX = "/pay/orderquery"; + public static final String REVERSE_URL_SUFFIX = "/secapi/pay/reverse"; + public static final String CLOSEORDER_URL_SUFFIX = "/pay/closeorder"; + public static final String REFUND_URL_SUFFIX = "/secapi/pay/refund"; + public static final String REFUNDQUERY_URL_SUFFIX = "/pay/refundquery"; + public static final String DOWNLOADBILL_URL_SUFFIX = "/pay/downloadbill"; + public static final String REPORT_URL_SUFFIX = "/payitil/report"; + public static final String SHORTURL_URL_SUFFIX = "/tools/shorturl"; + public static final String AUTHCODETOOPENID_URL_SUFFIX = "/tools/authcodetoopenid"; + + // sandbox + public static final String SANDBOX_MICROPAY_URL_SUFFIX = "/sandboxnew/pay/micropay"; + public static final String SANDBOX_UNIFIEDORDER_URL_SUFFIX = "/sandboxnew/pay/unifiedorder"; + public static final String SANDBOX_ORDERQUERY_URL_SUFFIX = "/sandboxnew/pay/orderquery"; + public static final String SANDBOX_REVERSE_URL_SUFFIX = "/sandboxnew/secapi/pay/reverse"; + public static final String SANDBOX_CLOSEORDER_URL_SUFFIX = "/sandboxnew/pay/closeorder"; + public static final String SANDBOX_REFUND_URL_SUFFIX = "/sandboxnew/secapi/pay/refund"; + public static final String SANDBOX_REFUNDQUERY_URL_SUFFIX = "/sandboxnew/pay/refundquery"; + public static final String SANDBOX_DOWNLOADBILL_URL_SUFFIX = "/sandboxnew/pay/downloadbill"; + public static final String SANDBOX_REPORT_URL_SUFFIX = "/sandboxnew/payitil/report"; + public static final String SANDBOX_SHORTURL_URL_SUFFIX = "/sandboxnew/tools/shorturl"; + public static final String SANDBOX_AUTHCODETOOPENID_URL_SUFFIX = "/sandboxnew/tools/authcodetoopenid"; + +} + diff --git a/src/main/java/com/example/jieyue/wxpay/sdk/WXPayReport.java b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayReport.java new file mode 100644 index 0000000..e9c9e10 --- /dev/null +++ b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayReport.java @@ -0,0 +1,265 @@ +package com.example.jieyue.wxpay.sdk; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadFactory; + +/** + * 交易保障 + */ +public class WXPayReport { + + public static class ReportInfo { + + /** + * 布尔变量使用int。0为false, 1为true。 + */ + + // 基本信息 + private String version = "v1"; + private String sdk = WXPayConstants.WXPAYSDK_VERSION; + private String uuid; // 交易的标识 + private long timestamp; // 上报时的时间戳,单位秒 + private long elapsedTimeMillis; // 耗时,单位 毫秒 + + // 针对主域名 + private String firstDomain; // 第1次请求的域名 + private boolean primaryDomain; //是否主域名 + private int firstConnectTimeoutMillis; // 第1次请求设置的连接超时时间,单位 毫秒 + private int firstReadTimeoutMillis; // 第1次请求设置的读写超时时间,单位 毫秒 + private int firstHasDnsError; // 第1次请求是否出现dns问题 + private int firstHasConnectTimeout; // 第1次请求是否出现连接超时 + private int firstHasReadTimeout; // 第1次请求是否出现连接超时 + + public ReportInfo(String uuid, long timestamp, long elapsedTimeMillis, String firstDomain, boolean primaryDomain, int firstConnectTimeoutMillis, int firstReadTimeoutMillis, boolean firstHasDnsError, boolean firstHasConnectTimeout, boolean firstHasReadTimeout) { + this.uuid = uuid; + this.timestamp = timestamp; + this.elapsedTimeMillis = elapsedTimeMillis; + this.firstDomain = firstDomain; + this.primaryDomain = primaryDomain; + this.firstConnectTimeoutMillis = firstConnectTimeoutMillis; + this.firstReadTimeoutMillis = firstReadTimeoutMillis; + this.firstHasDnsError = firstHasDnsError?1:0; + this.firstHasConnectTimeout = firstHasConnectTimeout?1:0; + this.firstHasReadTimeout = firstHasReadTimeout?1:0; + } + + @Override + public String toString() { + return "ReportInfo{" + + "version='" + version + '\'' + + ", sdk='" + sdk + '\'' + + ", uuid='" + uuid + '\'' + + ", timestamp=" + timestamp + + ", elapsedTimeMillis=" + elapsedTimeMillis + + ", firstDomain='" + firstDomain + '\'' + + ", primaryDomain=" + primaryDomain + + ", firstConnectTimeoutMillis=" + firstConnectTimeoutMillis + + ", firstReadTimeoutMillis=" + firstReadTimeoutMillis + + ", firstHasDnsError=" + firstHasDnsError + + ", firstHasConnectTimeout=" + firstHasConnectTimeout + + ", firstHasReadTimeout=" + firstHasReadTimeout + + '}'; + } + + /** + * 转换成 csv 格式 + * + * @return + */ + public String toLineString(String key) { + String separator = ","; + Object[] objects = new Object[] { + version, sdk, uuid, timestamp, elapsedTimeMillis, + firstDomain, primaryDomain, firstConnectTimeoutMillis, firstReadTimeoutMillis, + firstHasDnsError, firstHasConnectTimeout, firstHasReadTimeout + }; + StringBuffer sb = new StringBuffer(); + for(Object obj: objects) { + sb.append(obj).append(separator); + } + try { + String sign = WXPayUtil.HMACSHA256(sb.toString(), key); + sb.append(sign); + return sb.toString(); + } + catch (Exception ex) { + return null; + } + + } + + } + + private static final String REPORT_URL = "http://report.mch.weixin.qq.com/wxpay/report/default"; + // private static final String REPORT_URL = "http://127.0.0.1:5000/test"; + + + private static final int DEFAULT_CONNECT_TIMEOUT_MS = 6*1000; + private static final int DEFAULT_READ_TIMEOUT_MS = 8*1000; + + private LinkedBlockingQueue reportMsgQueue = null; + private WXPayConfig config; + private ExecutorService executorService; + + private volatile static WXPayReport INSTANCE; + + private WXPayReport(final WXPayConfig config) { + this.config = config; + reportMsgQueue = new LinkedBlockingQueue(config.getReportQueueMaxSize()); + + // 添加处理线程 + executorService = Executors.newFixedThreadPool(config.getReportWorkerNum(), new ThreadFactory() { + public Thread newThread(Runnable r) { + Thread t = Executors.defaultThreadFactory().newThread(r); + t.setDaemon(true); + return t; + } + }); + + if (config.shouldAutoReport()) { + WXPayUtil.getLogger().info("report worker num: {}", config.getReportWorkerNum()); + for (int i = 0; i < config.getReportWorkerNum(); ++i) { + executorService.execute(new Runnable() { + public void run() { + while (true) { + // 先用 take 获取数据 + try { + StringBuffer sb = new StringBuffer(); + String firstMsg = reportMsgQueue.take(); + WXPayUtil.getLogger().info("get first report msg: {}", firstMsg); + String msg = null; + sb.append(firstMsg); //会阻塞至有消息 + int remainNum = config.getReportBatchSize() - 1; + for (int j=0; jcreate() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(), + null, + null, + null + ); + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(connManager) + .build(); + + HttpPost httpPost = new HttpPost(REPORT_URL); + + RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeoutMs).setConnectTimeout(connectTimeoutMs).build(); + httpPost.setConfig(requestConfig); + + StringEntity postEntity = new StringEntity(data, "UTF-8"); + httpPost.addHeader("Content-Type", "text/xml"); + httpPost.addHeader("User-Agent", WXPayConstants.USER_AGENT); + httpPost.setEntity(postEntity); + + HttpResponse httpResponse = httpClient.execute(httpPost); + HttpEntity httpEntity = httpResponse.getEntity(); + return EntityUtils.toString(httpEntity, "UTF-8"); + } + +} diff --git a/src/main/java/com/example/jieyue/wxpay/sdk/WXPayRequest.java b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayRequest.java new file mode 100644 index 0000000..6f7400f --- /dev/null +++ b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayRequest.java @@ -0,0 +1,258 @@ +package com.example.jieyue.wxpay.sdk; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.ConnectTimeoutException; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.DefaultHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; + +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import java.io.InputStream; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.security.KeyStore; +import java.security.SecureRandom; + +import static com.example.jieyue.wxpay.sdk.WXPayConstants.USER_AGENT; + +public class WXPayRequest { + private WXPayConfig config; + public WXPayRequest(WXPayConfig config) throws Exception{ + + this.config = config; + } + + /** + * 请求,只请求一次,不做重试 + * @param domain + * @param urlSuffix + * @param uuid + * @param data + * @param connectTimeoutMs + * @param readTimeoutMs + * @param useCert 是否使用证书,针对退款、撤销等操作 + * @return + * @throws Exception + */ + private String requestOnce(final String domain, String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean useCert) throws Exception { + BasicHttpClientConnectionManager connManager; + if (useCert) { + // 证书 + char[] password = config.getMchID().toCharArray(); + InputStream certStream = config.getCertStream(); + KeyStore ks = KeyStore.getInstance("PKCS12"); + ks.load(certStream, password); + + // 实例化密钥库 & 初始化密钥工厂 + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(ks, password); + + // 创建 SSLContext + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(kmf.getKeyManagers(), null, new SecureRandom()); + + SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory( + sslContext, + new String[]{"TLSv1"}, + null, + new DefaultHostnameVerifier()); + + connManager = new BasicHttpClientConnectionManager( + RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", sslConnectionSocketFactory) + .build(), + null, + null, + null + ); + } + else { + connManager = new BasicHttpClientConnectionManager( + RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(), + null, + null, + null + ); + } + + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(connManager) + .build(); + + String url = "https://" + domain + urlSuffix; + HttpPost httpPost = new HttpPost(url); + + RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeoutMs).setConnectTimeout(connectTimeoutMs).build(); + httpPost.setConfig(requestConfig); + + StringEntity postEntity = new StringEntity(data, "UTF-8"); + httpPost.addHeader("Content-Type", "text/xml"); + httpPost.addHeader("User-Agent", USER_AGENT + " " + config.getMchID()); + httpPost.setEntity(postEntity); + + HttpResponse httpResponse = httpClient.execute(httpPost); + HttpEntity httpEntity = httpResponse.getEntity(); + return EntityUtils.toString(httpEntity, "UTF-8"); + + } + + + private String request(String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean useCert, boolean autoReport) throws Exception { + Exception exception = null; + long elapsedTimeMillis = 0; + long startTimestampMs = WXPayUtil.getCurrentTimestampMs(); + boolean firstHasDnsErr = false; + boolean firstHasConnectTimeout = false; + boolean firstHasReadTimeout = false; + IWXPayDomain.DomainInfo domainInfo = config.getWXPayDomain().getDomain(config); + if(domainInfo == null){ + throw new Exception("WXPayConfig.getWXPayDomain().getDomain() is empty or null"); + } + try { + String result = requestOnce(domainInfo.domain, urlSuffix, uuid, data, connectTimeoutMs, readTimeoutMs, useCert); + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + config.getWXPayDomain().report(domainInfo.domain, elapsedTimeMillis, null); + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout); + return result; + } + catch (UnknownHostException ex) { // dns 解析错误,或域名不存在 + exception = ex; + firstHasDnsErr = true; + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + WXPayUtil.getLogger().warn("UnknownHostException for domainInfo {}", domainInfo); + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout + ); + } + catch (ConnectTimeoutException ex) { + exception = ex; + firstHasConnectTimeout = true; + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + WXPayUtil.getLogger().warn("connect timeout happened for domainInfo {}", domainInfo); + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout + ); + } + catch (SocketTimeoutException ex) { + exception = ex; + firstHasReadTimeout = true; + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + WXPayUtil.getLogger().warn("timeout happened for domainInfo {}", domainInfo); + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout); + } + catch (Exception ex) { + exception = ex; + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout); + } + config.getWXPayDomain().report(domainInfo.domain, elapsedTimeMillis, exception); + throw exception; + } + + + /** + * 可重试的,非双向认证的请求 + * @param urlSuffix + * @param uuid + * @param data + * @return + */ + public String requestWithoutCert(String urlSuffix, String uuid, String data, boolean autoReport) throws Exception { + return this.request(urlSuffix, uuid, data, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs(), false, autoReport); + } + + /** + * 可重试的,非双向认证的请求 + * @param urlSuffix + * @param uuid + * @param data + * @param connectTimeoutMs + * @param readTimeoutMs + * @return + */ + public String requestWithoutCert(String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean autoReport) throws Exception { + return this.request(urlSuffix, uuid, data, connectTimeoutMs, readTimeoutMs, false, autoReport); + } + + /** + * 可重试的,双向认证的请求 + * @param urlSuffix + * @param uuid + * @param data + * @return + */ + public String requestWithCert(String urlSuffix, String uuid, String data, boolean autoReport) throws Exception { + return this.request(urlSuffix, uuid, data, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs(), true, autoReport); + } + + /** + * 可重试的,双向认证的请求 + * @param urlSuffix + * @param uuid + * @param data + * @param connectTimeoutMs + * @param readTimeoutMs + * @return + */ + public String requestWithCert(String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean autoReport) throws Exception { + return this.request(urlSuffix, uuid, data, connectTimeoutMs, readTimeoutMs, true, autoReport); + } +} diff --git a/src/main/java/com/example/jieyue/wxpay/sdk/WXPayUtil.java b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayUtil.java new file mode 100644 index 0000000..bca0f20 --- /dev/null +++ b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayUtil.java @@ -0,0 +1,295 @@ +package com.example.jieyue.wxpay.sdk; + +import com.example.jieyue.wxpay.sdk.WXPayConstants.SignType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.StringWriter; +import java.security.MessageDigest; +import java.security.SecureRandom; +import java.util.*; + + +public class WXPayUtil { + + private static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + private static final Random RANDOM = new SecureRandom(); + + /** + * XML格式字符串转换为Map + * + * @param strXML XML字符串 + * @return XML数据转换后的Map + * @throws Exception + */ + public static Map xmlToMap(String strXML) throws Exception { + try { + Map data = new HashMap(); + DocumentBuilder documentBuilder = WXPayXmlUtil.newDocumentBuilder(); + InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8")); + org.w3c.dom.Document doc = documentBuilder.parse(stream); + doc.getDocumentElement().normalize(); + NodeList nodeList = doc.getDocumentElement().getChildNodes(); + for (int idx = 0; idx < nodeList.getLength(); ++idx) { + Node node = nodeList.item(idx); + if (node.getNodeType() == Node.ELEMENT_NODE) { + org.w3c.dom.Element element = (org.w3c.dom.Element) node; + data.put(element.getNodeName(), element.getTextContent()); + } + } + try { + stream.close(); + } catch (Exception ex) { + // do nothing + } + return data; + } catch (Exception ex) { + WXPayUtil.getLogger().warn("Invalid XML, can not convert to map. Error message: {}. XML content: {}", ex.getMessage(), strXML); + throw ex; + } + + } + + /** + * 将Map转换为XML格式的字符串 + * + * @param data Map类型数据 + * @return XML格式的字符串 + * @throws Exception + */ + public static String mapToXml(Map data) throws Exception { + org.w3c.dom.Document document = WXPayXmlUtil.newDocument(); + org.w3c.dom.Element root = document.createElement("xml"); + document.appendChild(root); + for (String key: data.keySet()) { + String value = data.get(key); + if (value == null) { + value = ""; + } + value = value.trim(); + org.w3c.dom.Element filed = document.createElement(key); + filed.appendChild(document.createTextNode(value)); + root.appendChild(filed); + } + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + DOMSource source = new DOMSource(document); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + transformer.transform(source, result); + String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", ""); + try { + writer.close(); + } + catch (Exception ex) { + } + return output; + } + + + /** + * 生成带有 sign 的 XML 格式字符串 + * + * @param data Map类型数据 + * @param key API密钥 + * @return 含有sign字段的XML + */ + public static String generateSignedXml(final Map data, String key) throws Exception { + return generateSignedXml(data, key, SignType.MD5); + } + + /** + * 生成带有 sign 的 XML 格式字符串 + * + * @param data Map类型数据 + * @param key API密钥 + * @param signType 签名类型 + * @return 含有sign字段的XML + */ + public static String generateSignedXml(final Map data, String key, SignType signType) throws Exception { + String sign = generateSignature(data, key, signType); + data.put(WXPayConstants.FIELD_SIGN, sign); + return mapToXml(data); + } + + + /** + * 判断签名是否正确 + * + * @param xmlStr XML格式数据 + * @param key API密钥 + * @return 签名是否正确 + * @throws Exception + */ + public static boolean isSignatureValid(String xmlStr, String key) throws Exception { + Map data = xmlToMap(xmlStr); + if (!data.containsKey(WXPayConstants.FIELD_SIGN) ) { + return false; + } + String sign = data.get(WXPayConstants.FIELD_SIGN); + return generateSignature(data, key).equals(sign); + } + + /** + * 判断签名是否正确,必须包含sign字段,否则返回false。使用MD5签名。 + * + * @param data Map类型数据 + * @param key API密钥 + * @return 签名是否正确 + * @throws Exception + */ + public static boolean isSignatureValid(Map data, String key) throws Exception { + return isSignatureValid(data, key, SignType.MD5); + } + + /** + * 判断签名是否正确,必须包含sign字段,否则返回false。 + * + * @param data Map类型数据 + * @param key API密钥 + * @param signType 签名方式 + * @return 签名是否正确 + * @throws Exception + */ + public static boolean isSignatureValid(Map data, String key, SignType signType) throws Exception { + if (!data.containsKey(WXPayConstants.FIELD_SIGN) ) { + return false; + } + String sign = data.get(WXPayConstants.FIELD_SIGN); + return generateSignature(data, key, signType).equals(sign); + } + + /** + * 生成签名 + * + * @param data 待签名数据 + * @param key API密钥 + * @return 签名 + */ + public static String generateSignature(final Map data, String key) throws Exception { + return generateSignature(data, key, SignType.MD5); + } + + /** + * 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。 + * + * @param data 待签名数据 + * @param key API密钥 + * @param signType 签名方式 + * @return 签名 + */ + public static String generateSignature(final Map data, String key, SignType signType) throws Exception { + Set keySet = data.keySet(); + String[] keyArray = keySet.toArray(new String[keySet.size()]); + Arrays.sort(keyArray); + StringBuilder sb = new StringBuilder(); + for (String k : keyArray) { + if (k.equals(WXPayConstants.FIELD_SIGN)) { + continue; + } + if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名 + sb.append(k).append("=").append(data.get(k).trim()).append("&"); + } + sb.append("key=").append(key); + if (SignType.MD5.equals(signType)) { + return MD5(sb.toString()).toUpperCase(); + } + else if (SignType.HMACSHA256.equals(signType)) { + return HMACSHA256(sb.toString(), key); + } + else { + throw new Exception(String.format("Invalid sign_type: %s", signType)); + } + } + + + /** + * 获取随机字符串 Nonce Str + * + * @return String 随机字符串 + */ + public static String generateNonceStr() { + char[] nonceChars = new char[32]; + for (int index = 0; index < nonceChars.length; ++index) { + nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length())); + } + return new String(nonceChars); + } + + + /** + * 生成 MD5 + * + * @param data 待处理数据 + * @return MD5结果 + */ + public static String MD5(String data) throws Exception { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] array = md.digest(data.getBytes("UTF-8")); + StringBuilder sb = new StringBuilder(); + for (byte item : array) { + sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString().toUpperCase(); + } + + /** + * 生成 HMACSHA256 + * @param data 待处理数据 + * @param key 密钥 + * @return 加密结果 + * @throws Exception + */ + public static String HMACSHA256(String data, String key) throws Exception { + Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); + SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256"); + sha256_HMAC.init(secret_key); + byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8")); + StringBuilder sb = new StringBuilder(); + for (byte item : array) { + sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString().toUpperCase(); + } + + /** + * 日志 + * @return + */ + public static Logger getLogger() { + Logger logger = LoggerFactory.getLogger("wxpay java sdk"); + return logger; + } + + /** + * 获取当前时间戳,单位秒 + * @return + */ + public static long getCurrentTimestamp() { + return System.currentTimeMillis()/1000; + } + + /** + * 获取当前时间戳,单位毫秒 + * @return + */ + public static long getCurrentTimestampMs() { + return System.currentTimeMillis(); + } + +} diff --git a/src/main/java/com/example/jieyue/wxpay/sdk/WXPayXmlUtil.java b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayXmlUtil.java new file mode 100644 index 0000000..088c4a6 --- /dev/null +++ b/src/main/java/com/example/jieyue/wxpay/sdk/WXPayXmlUtil.java @@ -0,0 +1,30 @@ +package com.example.jieyue.wxpay.sdk; + +import org.w3c.dom.Document; + +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +/** + * 2018/7/3 + */ +public final class WXPayXmlUtil { + public static DocumentBuilder newDocumentBuilder() throws ParserConfigurationException { + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities", false); + documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + documentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + documentBuilderFactory.setXIncludeAware(false); + documentBuilderFactory.setExpandEntityReferences(false); + + return documentBuilderFactory.newDocumentBuilder(); + } + + public static Document newDocument() throws ParserConfigurationException { + return newDocumentBuilder().newDocument(); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..e40822a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,50 @@ +site-url: http://127.0.0.1 +server: + port: 80 + tomcat: + uri-encoding: utf-8 + servlet: + encoding: + charset: UTF-8 + enabled: true + error: + include-exception: true +spring: + jmx: + enabled: false + application: + name: jieyue + datasource: + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/jieyue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC + mvc: + static-path-pattern: /*/** + mail: + host: smtp.163.com + username: bosen_once@163.com + password: IORQCTROCDAKWPZS + properties.mail.smtp.port: 25 + from: bosen_once@163.com + default-encoding: utf-8 + properties: + mail: + smtp: + auth: true + starttls: + enable: true + required: true + thymeleaf: + prefix: classpath:/templates/ + check-template-location: true + cache: false + suffix: .html + mode: HTML5 + redis: + database: 0 + port: 6379 + host: 127.0.0.1 +mybatis: + mapper-locations: classpath:/static/mapping/*Mapping.xml + type-aliases-package: com.example.jieyue.common.entity diff --git a/src/main/resources/static/css/admin/hat.svg b/src/main/resources/static/css/admin/hat.svg new file mode 100644 index 0000000..c023b0b --- /dev/null +++ b/src/main/resources/static/css/admin/hat.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/static/css/admin/style.css b/src/main/resources/static/css/admin/style.css new file mode 100644 index 0000000..e41cf85 --- /dev/null +++ b/src/main/resources/static/css/admin/style.css @@ -0,0 +1,137 @@ +/* Form */ +.form { + position: relative; + z-index: 1; + background: #FFFFFF; + max-width: 300px; + margin: 0 auto 100px; + padding: 30px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + text-align: center; +} +.form .thumbnail { + background: #EF3B3A; + width: 150px; + height: 150px; + margin: 0 auto 30px; + padding: 50px 30px; + border-top-left-radius: 100%; + border-top-right-radius: 100%; + border-bottom-left-radius: 100%; + border-bottom-right-radius: 100%; + box-sizing: border-box; +} +.form .thumbnail img { + display: block; + width: 100%; +} +.form input { + outline: 0; + background: #f2f2f2; + width: 100%; + border: 0; + margin: 0 0 15px; + padding: 15px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + box-sizing: border-box; + font-size: 14px; +} +.form button { + outline: 0; + background: #EF3B3A; + width: 100%; + border: 0; + padding: 15px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + color: #FFFFFF; + font-size: 14px; + transition: all 0.3 ease; + cursor: pointer; +} +.form .message { + margin: 15px 0 0; + color: #b3b3b3; + font-size: 12px; +} +.form .message a { + color: #EF3B3A; + text-decoration: none; +} +.form .register-form { + display: none; +} + +.container { + position: relative; + z-index: 1; + max-width: 300px; + margin: 0 auto; +} +.container:before, .container:after { + content: ""; + display: block; + clear: both; +} +.container .info { + margin: 50px auto; + text-align: center; +} +.container .info h1 { + margin: 0 0 15px; + padding: 0; + font-size: 36px; + font-weight: 300; + color: #1a1a1a; +} +.container .info span { + color: #4d4d4d; + font-size: 12px; +} +.container .info span a { + color: #000000; + text-decoration: none; +} +.container .info span .fa { + color: #EF3B3A; +} + +/* END Form */ +/* Demo Purposes */ +body { + background: #ccc; + font-family: "Roboto", sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +body:before { + content: ""; + position: fixed; + top: 0; + left: 0; + display: block; + background: rgba(255, 255, 255, 0.8); + width: 100%; + height: 100%; +} + +#video { + z-index: -99; + position: fixed; + top: 50%; + left: 50%; + min-width: 100%; + min-height: 100%; + width: auto; + height: auto; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); +} diff --git a/src/main/resources/static/css/error/style-freedom.css b/src/main/resources/static/css/error/style-freedom.css new file mode 100644 index 0000000..ee51bfa --- /dev/null +++ b/src/main/resources/static/css/error/style-freedom.css @@ -0,0 +1,2658 @@ +@charset "UTF-8"; +@font-face { + font-family: 'FontAwesome'; + src: url("../../fonts/error/fontawesome-webfont.eot?v=4.7.0"); + src: url("../../fonts/error/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("../../fonts/error/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("../../fonts/error/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg"); + font-weight: normal; + font-style: normal; } + +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.fa-lg { + font-size: 1.33333333em; + line-height: .75em; + vertical-align: -15%; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-fw { + width: 1.28571429em; + text-align: center; } + +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; } + +.fa-ul > li { + position: relative; } + +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: .14285714em; + text-align: center; } + +.fa-li.fa-lg { + left: -1.85714286em; } + +.fa-border { + padding: .2em .25em .15em; + border: solid .08em #eee; + border-radius: .1em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right { + margin-left: .3em; } + +.pull-right { + float: right; } + +.pull-left { + float: left; } + +.fa.pull-left { + margin-right: .3em; } + +.fa.pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + transform: rotate(0deg); } + 100% { + transform: rotate(359deg); } } + +@keyframes fa-spin { + 0% { + transform: rotate(0deg); } + 100% { + transform: rotate(359deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + transform: scale(1, -1); } + +:root .fa-rotate-90, :root .fa-rotate-180, :root .fa-rotate-270, :root .fa-flip-horizontal, :root .fa-flip-vertical { + -webkit-filter: none; + filter: none; } + +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; } + +.fa-stack-1x, .fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +.fa-glass:before { + content: "\f000"; } + +.fa-music:before { + content: "\f001"; } + +.fa-search:before { + content: "\f002"; } + +.fa-envelope-o:before { + content: "\f003"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-o:before { + content: "\f006"; } + +.fa-user:before { + content: "\f007"; } + +.fa-film:before { + content: "\f008"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-remove:before, .fa-close:before, .fa-times:before { + content: "\f00d"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-gear:before, .fa-cog:before { + content: "\f013"; } + +.fa-trash-o:before { + content: "\f014"; } + +.fa-home:before { + content: "\f015"; } + +.fa-file-o:before { + content: "\f016"; } + +.fa-clock-o:before { + content: "\f017"; } + +.fa-road:before { + content: "\f018"; } + +.fa-download:before { + content: "\f019"; } + +.fa-arrow-circle-o-down:before { + content: "\f01a"; } + +.fa-arrow-circle-o-up:before { + content: "\f01b"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-play-circle-o:before { + content: "\f01d"; } + +.fa-rotate-right:before, .fa-repeat:before { + content: "\f01e"; } + +.fa-refresh:before { + content: "\f021"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-font:before { + content: "\f031"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-dedent:before, .fa-outdent:before { + content: "\f03b"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-video-camera:before { + content: "\f03d"; } + +.fa-photo:before, .fa-image:before, .fa-picture-o:before { + content: "\f03e"; } + +.fa-pencil:before { + content: "\f040"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-edit:before, .fa-pencil-square-o:before { + content: "\f044"; } + +.fa-share-square-o:before { + content: "\f045"; } + +.fa-check-square-o:before { + content: "\f046"; } + +.fa-arrows:before { + content: "\f047"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-times-circle-o:before { + content: "\f05c"; } + +.fa-check-circle-o:before { + content: "\f05d"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-mail-forward:before, .fa-share:before { + content: "\f064"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-warning:before, .fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-calendar:before { + content: "\f073"; } + +.fa-random:before { + content: "\f074"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-arrows-v:before { + content: "\f07d"; } + +.fa-arrows-h:before { + content: "\f07e"; } + +.fa-bar-chart-o:before, .fa-bar-chart:before { + content: "\f080"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-key:before { + content: "\f084"; } + +.fa-gears:before, .fa-cogs:before { + content: "\f085"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-thumbs-o-up:before { + content: "\f087"; } + +.fa-thumbs-o-down:before { + content: "\f088"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-heart-o:before { + content: "\f08a"; } + +.fa-sign-out:before { + content: "\f08b"; } + +.fa-linkedin-square:before { + content: "\f08c"; } + +.fa-thumb-tack:before { + content: "\f08d"; } + +.fa-external-link:before { + content: "\f08e"; } + +.fa-sign-in:before { + content: "\f090"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-lemon-o:before { + content: "\f094"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-square-o:before { + content: "\f096"; } + +.fa-bookmark-o:before { + content: "\f097"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-facebook-f:before, .fa-facebook:before { + content: "\f09a"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-feed:before, .fa-rss:before { + content: "\f09e"; } + +.fa-hdd-o:before { + content: "\f0a0"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-group:before, .fa-users:before { + content: "\f0c0"; } + +.fa-chain:before, .fa-link:before { + content: "\f0c1"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-cut:before, .fa-scissors:before { + content: "\f0c4"; } + +.fa-copy:before, .fa-files-o:before { + content: "\f0c5"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-save:before, .fa-floppy-o:before { + content: "\f0c7"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-navicon:before, .fa-reorder:before, .fa-bars:before { + content: "\f0c9"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-plus:before { + content: "\f0d5"; } + +.fa-money:before { + content: "\f0d6"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-unsorted:before, .fa-sort:before { + content: "\f0dc"; } + +.fa-sort-down:before, .fa-sort-desc:before { + content: "\f0dd"; } + +.fa-sort-up:before, .fa-sort-asc:before { + content: "\f0de"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-linkedin:before { + content: "\f0e1"; } + +.fa-rotate-left:before, .fa-undo:before { + content: "\f0e2"; } + +.fa-legal:before, .fa-gavel:before { + content: "\f0e3"; } + +.fa-dashboard:before, .fa-tachometer:before { + content: "\f0e4"; } + +.fa-comment-o:before { + content: "\f0e5"; } + +.fa-comments-o:before { + content: "\f0e6"; } + +.fa-flash:before, .fa-bolt:before { + content: "\f0e7"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-paste:before, .fa-clipboard:before { + content: "\f0ea"; } + +.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa-exchange:before { + content: "\f0ec"; } + +.fa-cloud-download:before { + content: "\f0ed"; } + +.fa-cloud-upload:before { + content: "\f0ee"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-bell-o:before { + content: "\f0a2"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cutlery:before { + content: "\f0f5"; } + +.fa-file-text-o:before { + content: "\f0f6"; } + +.fa-building-o:before { + content: "\f0f7"; } + +.fa-hospital-o:before { + content: "\f0f8"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-mobile-phone:before, .fa-mobile:before { + content: "\f10b"; } + +.fa-circle-o:before { + content: "\f10c"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-mail-reply:before, .fa-reply:before { + content: "\f112"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-folder-o:before { + content: "\f114"; } + +.fa-folder-open-o:before { + content: "\f115"; } + +.fa-smile-o:before { + content: "\f118"; } + +.fa-frown-o:before { + content: "\f119"; } + +.fa-meh-o:before { + content: "\f11a"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-keyboard-o:before { + content: "\f11c"; } + +.fa-flag-o:before { + content: "\f11d"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-code:before { + content: "\f121"; } + +.fa-mail-reply-all:before, .fa-reply-all:before { + content: "\f122"; } + +.fa-star-half-empty:before, .fa-star-half-full:before, .fa-star-half-o:before { + content: "\f123"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-code-fork:before { + content: "\f126"; } + +.fa-unlink:before, .fa-chain-broken:before { + content: "\f127"; } + +.fa-question:before { + content: "\f128"; } + +.fa-info:before { + content: "\f129"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-shield:before { + content: "\f132"; } + +.fa-calendar-o:before { + content: "\f133"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-ticket:before { + content: "\f145"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-minus-square-o:before { + content: "\f147"; } + +.fa-level-up:before { + content: "\f148"; } + +.fa-level-down:before { + content: "\f149"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-pencil-square:before { + content: "\f14b"; } + +.fa-external-link-square:before { + content: "\f14c"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-toggle-down:before, .fa-caret-square-o-down:before { + content: "\f150"; } + +.fa-toggle-up:before, .fa-caret-square-o-up:before { + content: "\f151"; } + +.fa-toggle-right:before, .fa-caret-square-o-right:before { + content: "\f152"; } + +.fa-euro:before, .fa-eur:before { + content: "\f153"; } + +.fa-gbp:before { + content: "\f154"; } + +.fa-dollar:before, .fa-usd:before { + content: "\f155"; } + +.fa-rupee:before, .fa-inr:before { + content: "\f156"; } + +.fa-cny:before, .fa-rmb:before, .fa-yen:before, .fa-jpy:before { + content: "\f157"; } + +.fa-ruble:before, .fa-rouble:before, .fa-rub:before { + content: "\f158"; } + +.fa-won:before, .fa-krw:before { + content: "\f159"; } + +.fa-bitcoin:before, .fa-btc:before { + content: "\f15a"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-text:before { + content: "\f15c"; } + +.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa-sort-alpha-desc:before { + content: "\f15e"; } + +.fa-sort-amount-asc:before { + content: "\f160"; } + +.fa-sort-amount-desc:before { + content: "\f161"; } + +.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa-sort-numeric-desc:before { + content: "\f163"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-youtube-square:before { + content: "\f166"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-youtube-play:before { + content: "\f16a"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitbucket-square:before { + content: "\f172"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-long-arrow-down:before { + content: "\f175"; } + +.fa-long-arrow-up:before { + content: "\f176"; } + +.fa-long-arrow-left:before { + content: "\f177"; } + +.fa-long-arrow-right:before { + content: "\f178"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-female:before { + content: "\f182"; } + +.fa-male:before { + content: "\f183"; } + +.fa-gittip:before, .fa-gratipay:before { + content: "\f184"; } + +.fa-sun-o:before { + content: "\f185"; } + +.fa-moon-o:before { + content: "\f186"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-arrow-circle-o-right:before { + content: "\f18e"; } + +.fa-arrow-circle-o-left:before { + content: "\f190"; } + +.fa-toggle-left:before, .fa-caret-square-o-left:before { + content: "\f191"; } + +.fa-dot-circle-o:before { + content: "\f192"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-turkish-lira:before, .fa-try:before { + content: "\f195"; } + +.fa-plus-square-o:before { + content: "\f196"; } + +.fa-space-shuttle:before { + content: "\f197"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-envelope-square:before { + content: "\f199"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-institution:before, .fa-bank:before, .fa-university:before { + content: "\f19c"; } + +.fa-mortar-board:before, .fa-graduation-cap:before { + content: "\f19d"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-language:before { + content: "\f1ab"; } + +.fa-fax:before { + content: "\f1ac"; } + +.fa-building:before { + content: "\f1ad"; } + +.fa-child:before { + content: "\f1ae"; } + +.fa-paw:before { + content: "\f1b0"; } + +.fa-spoon:before { + content: "\f1b1"; } + +.fa-cube:before { + content: "\f1b2"; } + +.fa-cubes:before { + content: "\f1b3"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-recycle:before { + content: "\f1b8"; } + +.fa-automobile:before, .fa-car:before { + content: "\f1b9"; } + +.fa-cab:before, .fa-taxi:before { + content: "\f1ba"; } + +.fa-tree:before { + content: "\f1bb"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa-file-word-o:before { + content: "\f1c2"; } + +.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa-file-photo-o:before, .fa-file-picture-o:before, .fa-file-image-o:before { + content: "\f1c5"; } + +.fa-file-zip-o:before, .fa-file-archive-o:before { + content: "\f1c6"; } + +.fa-file-sound-o:before, .fa-file-audio-o:before { + content: "\f1c7"; } + +.fa-file-movie-o:before, .fa-file-video-o:before { + content: "\f1c8"; } + +.fa-file-code-o:before { + content: "\f1c9"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-life-bouy:before, .fa-life-buoy:before, .fa-life-saver:before, .fa-support:before, .fa-life-ring:before { + content: "\f1cd"; } + +.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa-ra:before, .fa-resistance:before, .fa-rebel:before { + content: "\f1d0"; } + +.fa-ge:before, .fa-empire:before { + content: "\f1d1"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-y-combinator-square:before, .fa-yc-square:before, .fa-hacker-news:before { + content: "\f1d4"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-wechat:before, .fa-weixin:before { + content: "\f1d7"; } + +.fa-send:before, .fa-paper-plane:before { + content: "\f1d8"; } + +.fa-send-o:before, .fa-paper-plane-o:before { + content: "\f1d9"; } + +.fa-history:before { + content: "\f1da"; } + +.fa-circle-thin:before { + content: "\f1db"; } + +.fa-header:before { + content: "\f1dc"; } + +.fa-paragraph:before { + content: "\f1dd"; } + +.fa-sliders:before { + content: "\f1de"; } + +.fa-share-alt:before { + content: "\f1e0"; } + +.fa-share-alt-square:before { + content: "\f1e1"; } + +.fa-bomb:before { + content: "\f1e2"; } + +.fa-soccer-ball-o:before, .fa-futbol-o:before { + content: "\f1e3"; } + +.fa-tty:before { + content: "\f1e4"; } + +.fa-binoculars:before { + content: "\f1e5"; } + +.fa-plug:before { + content: "\f1e6"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa-wifi:before { + content: "\f1eb"; } + +.fa-calculator:before { + content: "\f1ec"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-bell-slash:before { + content: "\f1f6"; } + +.fa-bell-slash-o:before { + content: "\f1f7"; } + +.fa-trash:before { + content: "\f1f8"; } + +.fa-copyright:before { + content: "\f1f9"; } + +.fa-at:before { + content: "\f1fa"; } + +.fa-eyedropper:before { + content: "\f1fb"; } + +.fa-paint-brush:before { + content: "\f1fc"; } + +.fa-birthday-cake:before { + content: "\f1fd"; } + +.fa-area-chart:before { + content: "\f1fe"; } + +.fa-pie-chart:before { + content: "\f200"; } + +.fa-line-chart:before { + content: "\f201"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-toggle-off:before { + content: "\f204"; } + +.fa-toggle-on:before { + content: "\f205"; } + +.fa-bicycle:before { + content: "\f206"; } + +.fa-bus:before { + content: "\f207"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-cc:before { + content: "\f20a"; } + +.fa-shekel:before, .fa-sheqel:before, .fa-ils:before { + content: "\f20b"; } + +.fa-meanpath:before { + content: "\f20c"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-cart-plus:before { + content: "\f217"; } + +.fa-cart-arrow-down:before { + content: "\f218"; } + +.fa-diamond:before { + content: "\f219"; } + +.fa-ship:before { + content: "\f21a"; } + +.fa-user-secret:before { + content: "\f21b"; } + +.fa-motorcycle:before { + content: "\f21c"; } + +.fa-street-view:before { + content: "\f21d"; } + +.fa-heartbeat:before { + content: "\f21e"; } + +.fa-venus:before { + content: "\f221"; } + +.fa-mars:before { + content: "\f222"; } + +.fa-mercury:before { + content: "\f223"; } + +.fa-intersex:before, .fa-transgender:before { + content: "\f224"; } + +.fa-transgender-alt:before { + content: "\f225"; } + +.fa-venus-double:before { + content: "\f226"; } + +.fa-mars-double:before { + content: "\f227"; } + +.fa-venus-mars:before { + content: "\f228"; } + +.fa-mars-stroke:before { + content: "\f229"; } + +.fa-mars-stroke-v:before { + content: "\f22a"; } + +.fa-mars-stroke-h:before { + content: "\f22b"; } + +.fa-neuter:before { + content: "\f22c"; } + +.fa-genderless:before { + content: "\f22d"; } + +.fa-facebook-official:before { + content: "\f230"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-server:before { + content: "\f233"; } + +.fa-user-plus:before { + content: "\f234"; } + +.fa-user-times:before { + content: "\f235"; } + +.fa-hotel:before, .fa-bed:before { + content: "\f236"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-train:before { + content: "\f238"; } + +.fa-subway:before { + content: "\f239"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-yc:before, .fa-y-combinator:before { + content: "\f23b"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-battery-4:before, .fa-battery:before, .fa-battery-full:before { + content: "\f240"; } + +.fa-battery-3:before, .fa-battery-three-quarters:before { + content: "\f241"; } + +.fa-battery-2:before, .fa-battery-half:before { + content: "\f242"; } + +.fa-battery-1:before, .fa-battery-quarter:before { + content: "\f243"; } + +.fa-battery-0:before, .fa-battery-empty:before { + content: "\f244"; } + +.fa-mouse-pointer:before { + content: "\f245"; } + +.fa-i-cursor:before { + content: "\f246"; } + +.fa-object-group:before { + content: "\f247"; } + +.fa-object-ungroup:before { + content: "\f248"; } + +.fa-sticky-note:before { + content: "\f249"; } + +.fa-sticky-note-o:before { + content: "\f24a"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-clone:before { + content: "\f24d"; } + +.fa-balance-scale:before { + content: "\f24e"; } + +.fa-hourglass-o:before { + content: "\f250"; } + +.fa-hourglass-1:before, .fa-hourglass-start:before { + content: "\f251"; } + +.fa-hourglass-2:before, .fa-hourglass-half:before { + content: "\f252"; } + +.fa-hourglass-3:before, .fa-hourglass-end:before { + content: "\f253"; } + +.fa-hourglass:before { + content: "\f254"; } + +.fa-hand-grab-o:before, .fa-hand-rock-o:before { + content: "\f255"; } + +.fa-hand-stop-o:before, .fa-hand-paper-o:before { + content: "\f256"; } + +.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa-hand-spock-o:before { + content: "\f259"; } + +.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa-trademark:before { + content: "\f25c"; } + +.fa-registered:before { + content: "\f25d"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-tripadvisor:before { + content: "\f262"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-tv:before, .fa-television:before { + content: "\f26c"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa-calendar-times-o:before { + content: "\f273"; } + +.fa-calendar-check-o:before { + content: "\f274"; } + +.fa-industry:before { + content: "\f275"; } + +.fa-map-pin:before { + content: "\f276"; } + +.fa-map-signs:before { + content: "\f277"; } + +.fa-map-o:before { + content: "\f278"; } + +.fa-map:before { + content: "\f279"; } + +.fa-commenting:before { + content: "\f27a"; } + +.fa-commenting-o:before { + content: "\f27b"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-vimeo:before { + content: "\f27d"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-credit-card-alt:before { + content: "\f283"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-pause-circle:before { + content: "\f28b"; } + +.fa-pause-circle-o:before { + content: "\f28c"; } + +.fa-stop-circle:before { + content: "\f28d"; } + +.fa-stop-circle-o:before { + content: "\f28e"; } + +.fa-shopping-bag:before { + content: "\f290"; } + +.fa-shopping-basket:before { + content: "\f291"; } + +.fa-hashtag:before { + content: "\f292"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-percent:before { + content: "\f295"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-universal-access:before { + content: "\f29a"; } + +.fa-wheelchair-alt:before { + content: "\f29b"; } + +.fa-question-circle-o:before { + content: "\f29c"; } + +.fa-blind:before { + content: "\f29d"; } + +.fa-audio-description:before { + content: "\f29e"; } + +.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa-braille:before { + content: "\f2a1"; } + +.fa-assistive-listening-systems:before { + content: "\f2a2"; } + +.fa-asl-interpreting:before, .fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + +.fa-deafness:before, .fa-hard-of-hearing:before, .fa-deaf:before { + content: "\f2a4"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-signing:before, .fa-sign-language:before { + content: "\f2a7"; } + +.fa-low-vision:before { + content: "\f2a8"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ac"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-google-plus-circle:before, .fa-google-plus-official:before { + content: "\f2b3"; } + +.fa-fa:before, .fa-font-awesome:before { + content: "\f2b4"; } + +.fa-handshake-o:before { + content: "\f2b5"; } + +.fa-envelope-open:before { + content: "\f2b6"; } + +.fa-envelope-open-o:before { + content: "\f2b7"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-address-book:before { + content: "\f2b9"; } + +.fa-address-book-o:before { + content: "\f2ba"; } + +.fa-vcard:before, .fa-address-card:before { + content: "\f2bb"; } + +.fa-vcard-o:before, .fa-address-card-o:before { + content: "\f2bc"; } + +.fa-user-circle:before { + content: "\f2bd"; } + +.fa-user-circle-o:before { + content: "\f2be"; } + +.fa-user-o:before { + content: "\f2c0"; } + +.fa-id-badge:before { + content: "\f2c1"; } + +.fa-drivers-license:before, .fa-id-card:before { + content: "\f2c2"; } + +.fa-drivers-license-o:before, .fa-id-card-o:before { + content: "\f2c3"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-thermometer-4:before, .fa-thermometer:before, .fa-thermometer-full:before { + content: "\f2c7"; } + +.fa-thermometer-3:before, .fa-thermometer-three-quarters:before { + content: "\f2c8"; } + +.fa-thermometer-2:before, .fa-thermometer-half:before { + content: "\f2c9"; } + +.fa-thermometer-1:before, .fa-thermometer-quarter:before { + content: "\f2ca"; } + +.fa-thermometer-0:before, .fa-thermometer-empty:before { + content: "\f2cb"; } + +.fa-shower:before { + content: "\f2cc"; } + +.fa-bathtub:before, .fa-s15:before, .fa-bath:before { + content: "\f2cd"; } + +.fa-podcast:before { + content: "\f2ce"; } + +.fa-window-maximize:before { + content: "\f2d0"; } + +.fa-window-minimize:before { + content: "\f2d1"; } + +.fa-window-restore:before { + content: "\f2d2"; } + +.fa-times-rectangle:before, .fa-window-close:before { + content: "\f2d3"; } + +.fa-times-rectangle-o:before, .fa-window-close-o:before { + content: "\f2d4"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-eercast:before { + content: "\f2da"; } + +.fa-microchip:before { + content: "\f2db"; } + +.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; } + +:root { + --bg-main-color: #fafafa; + --bg-sub-color: #f7f7f7; + --heading-main-color: #000; + --title-main-color: #222; + --title-super-color:#ff0000; + --title-sub-color: #444; + --para-main-color: #777; + --button-bg-color: #4a4a4a; } + +html { + scroll-behavior: smooth; } + +body, +html { + margin: 0; + padding: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; } + +* { + box-sizing: border-box; } + +body a, +.btn, +button { + cursor: pointer !important; } + +.wrapper-full { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + +.wrapper { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + +@media (min-width: 576px) { + .wrapper { + max-width: 540px; } } + +@media (min-width: 768px) { + .wrapper { + max-width: 720px; } } + +@media (min-width: 992px) { + .wrapper { + max-width: 960px; } } + +@media (min-width: 1200px) { + .wrapper { + max-width: 1140px; } } +.img-responsive { + max-width: 100%; + display: block; } + +.d-grid { + display: grid; } + +.d-flex { + display: flex; + display: -webkit-flex; } + +.text-center { + text-align: center; } + +.text-left { + text-align: left; } + +.text-right { + text-align: right; } + +button, +input, +select { + -webkit-appearance: none; + outline: none; } + +button, +.btn, +select { + cursor: pointer; } + +input.checked { + -webkit-appearance: checkbox; } + +ul li { + display: block; } + +a { + text-decoration: none; } + +iframe { + border: none; } + +ul { + margin: 0; + padding: 0; } + +p, a, ul li, input, span, button, textarea { +font-family: 'Source Serif Pro', serif; + margin: 0; + padding: 0; } + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; + font-family: 'Quicksand', sans-serif; + font-weight: 500; } + + +h1, +h2, +h3, +h4, +h5 { + font-weight: 600; } + +.p-relative { + position: relative; } + +.p-absolute { + position: absolute; } + +.p-fixed { + position: fixed; } + +.p-sticky { + position: -webkit-sticky; + position: sticky; } + +figure { + margin: 0; } + +.clear { + clear: both; } + +input, +a, +textarea, +a span, +.btn, +button, +a:hover, +a span:hover, +.btn:hover, +button:hover { + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + transition: 0.3s ease; + -webkit-transition: 0.3s ease; + -moz-transition: 0.3s ease; + -o-transition: 0.3s ease; } + +a img { + display: block; } +h1 a.brand-logo-text { + color: #fff; + font-weight: 600; + font-size: 45px; + line-height: 55px; + margin-bottom: 20px; + display: inline-block; + font-family: 'Quicksand', sans-serif;} +.logo-brand { + max-width: 500px; + margin: 0px 0px 0px auto; + text-align: left; +} +.position-head { + position: relative; + display: inline; + margin-left: 20px; } + +.position-head span { + position: absolute; + width: 40px; + text-align: left; + left: -20%; + top: 5px; + color: var(--title-super-color); + transform: rotate(21deg); + font-family: 'Quicksand', sans-serif; +} +.columns-copy p{ + font-size: 16px; + line-height: 25px; + color: #000; + max-width: 500px; + margin: 35px 0px 0px auto; + text-align: center; +} +.columns-copy p a { + font-size: 16px; + line-height: 25px; + color:#ff0000; } + +.columns-copy p a:hover { + text-decoration: underline; + color: #ff0000; } + +a.action-button { + border: 1.3px solid #0c0c0c; + color: #fff; + font-size: 15px; + line-height: 25px; + display: inline-block; + background: #0c0c0c; + padding: 10px 25px; } + +a.action-button:hover { + background: #fff; + color: var(--title-super-color); + border: 1.3px solid var(--title-super-color); } + +p.para { + font-size: 16px; + line-height: 25px; + color: var(--para-main-color); } +p.client-para { + font-size: 16px; + line-height: 25px; + color: var(--para-main-color); + max-width: 400px; + margin-bottom: 30px; } + +ul.social li, +ul.jst-link li { + display: inline-block; + margin-right: 5px; } + +ul.social li a { + font-size: 16px; + line-height: 25px; + color: #bbb; } + +ul.social li a span { + font-size: 20px; + background: #ffffff; + width: 35px; + height: 35px; + line-height: 36px; + text-align: center; + border-radius: 50%; } + +span.fa.fa-facebook-square { + color: #3b5998; } + +span.fa.fa-instagram { + color: #e1306c; } + +span.fa.fa-twitter-square { + color: #1da1f2; } + +span.fa.fa-facebook-square:hover, +span.fa.fa-instagram:hover, +span.fa.fa-twitter-square:hover { + opacity: .8; } + +ul.social { + margin-top: 40px; } + +@media all and (max-width: 1080px) { + .main-tatile-txt h3 { + font-size: 37px; + line-height: 47px; } + .main-tatile-txt h3 span { + font-size: 45px; } + ul.social { + margin-top: 25px; } } + +@media all and (max-width: 768px) { + .main-tatile-txt h3 { + font-size: 33px; + line-height: 43px; } + .main-tatile-txt h3 span { + font-size: 43px; } } + +@media all and (max-width: 480px) { + .just-logo { + padding: 20px 0px 20px; } + .main-tatile-txt h3 span { + font-size: 40px; } + .main-tatile-txt h3 { + font-size: 30px; } } + +@media all and (max-width: 441px) { + .wrapper, + .wrapper-full { + width: 100%; + padding: 0 16px; } } + /* demo stuff */ + /*--responsive--*/ + /*--//responsive--*/ + .w3l-errorpage .error-container { + font-size: 120px; + line-height: 130px; + font-weight: 800; + margin:0px 0px 40px; } + .w3l-errorpage .error404 { + background: url(../../image/error/404.jpg); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + -ms-background-size: cover; + z-index: 1; + display: grid; + position: relative; + align-items: center; + min-height: 100vh; + padding: 40px 0px; } + /* .w3l-errorpage .error404:before { */ + /* content: ""; */ + /* background: rgba(0, 0, 0, 0.78); */ + /* width: 100%; */ + /* position: absolute; */ + /* top: 0px; */ + /* bottom: 0px; */ + /* opacity: .6; */ + /* z-index: -1; } */ + .w3l-errorpage .error-container > span { + display: inline-block; + line-height: 0.7; + position: relative; + color:#3be8b0; } + .w3l-errorpage .error-container > span > span { + display: inline-block; + position: relative; } + .w3l-errorpage .error-container > span:nth-of-type(1) { + perspective: 800px; + perspective-origin: 50% 50%; + color:#39eafd; } + .w3l-errorpage .error-container > span:nth-of-type(1) > span { + transform-origin: 0px 60% 25%; + transform: rotate(0); + -webkit-animation: easyoutelastic 10s infinite; + animation: easyoutelastic 10s infinite; + transition-delay: 3s; } + .w3l-errorpage .error-container > span:nth-of-type(3) { + perspective: 800px; + perspective-origin: 50% 50%; + color: #ee70a6; } + .w3l-errorpage .error-container > span:nth-of-type(3) > span { + transform-origin: 0px 60% 25%; + transform: rotate(0); + -webkit-animation: easyoutelastic 10s infinite; + animation: easyoutelastic 10s infinite; + transition-delay: 3s; } + +@-webkit-keyframes easyoutelastic { + 0% { + transform: rotateX(0deg); } + 9% { + transform: rotateX(0deg); } + 13% { + transform: rotateX(180deg); } + 16% { + transform: rotateX(180deg); } + 18% { + transform: rotateX(170deg); } + 20% { + transform: rotateX(200deg); } + 60% { + transform: rotateX(150deg); } + 80% { + transform: rotateX(210deg); } + 100% { + transform: rotateX(0deg); } } + +@keyframes easyoutelastic { + 0% { + transform: rotateX(0deg); } + 9% { + transform: rotateX(0deg); } + 13% { + transform: rotateX(180deg); } + 16% { + transform: rotateX(180deg); } + 18% { + transform: rotateX(170deg); } + 20% { + transform: rotateX(200deg); } + 60% { + transform: rotateX(150deg); } + 80% { + transform: rotateX(210deg); } + 100% { + transform: rotateX(0deg); } } + .w3l-errorpage * { + box-sizing: border-box; } + .w3l-errorpage .zoom-area { + margin: 15px auto 15px; } + .w3l-errorpage a.more-link { + text-transform: capitalize; + font-size: 13px; + background-color: #0a0a0a; + padding: 10px 15px; + color: #fff; + display: inline-block; + line-height: 1.5; + text-decoration: none; + letter-spacing: 1px; + margin-top: 30PX; } + .w3l-errorpage a.more-link:hover { + background-color: var(--title-super-color); } + .w3l-errorpage .error404 h1 { + font-size: 40px; + line-height: 50px;} + .w3l-errorpage .midle-page { + max-width: 500px; + margin: 0px 0px 0px auto; + background: #f9f9f9; + padding: 40px 40px; } + @media (max-width:991px){ +.w3l-errorpage .logo-brand { + margin: 0px auto; +} +.w3l-errorpage .midle-page { + margin: 0px auto;} + .columns-copy p{ + margin: 35px auto 0px; + text-align: center; + } + } + @media (max-width: 800px) { + .w3l-errorpage .error404 h1 { + font-size: 35px; } + .w3l-errorpage .midle-page { + padding: 30px 24px; } + .w3l-errorpage .error-container { + margin: 0px 0px 35px; + font-size: 100px; + line-height: 110px; +} +} + @media (max-width: 440px) { + .w3l-errorpage .error404 h1 { + font-size: 30px; } + .w3l-errorpage .zoom-area { + margin: 10px auto 10px; + font-size: 16px; } + .w3l-errorpage .error-container { + font-size: 100px; + line-height: 110px; + margin: 20px 0px; } } + @media (max-width: 384px){ + h1 a.brand-logo-text { + font-size: 35px; + line-height: 45px; +}} \ No newline at end of file diff --git a/src/main/resources/static/css/merchant/bootstrap.min.css b/src/main/resources/static/css/merchant/bootstrap.min.css new file mode 100644 index 0000000..a23f75b --- /dev/null +++ b/src/main/resources/static/css/merchant/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} \ No newline at end of file diff --git a/src/main/resources/static/css/merchant/style.css b/src/main/resources/static/css/merchant/style.css new file mode 100644 index 0000000..2da10b0 --- /dev/null +++ b/src/main/resources/static/css/merchant/style.css @@ -0,0 +1,228 @@ +body{ + display:flex; + height:100vh; + min-height:35rem; + align-items:center; + justify-content:center; + font-family:'Josefin Sans', sans-serif; +} + +.card{ + position:absolute; + top:50%; + left:50%; + width:100%; + padding-top:1rem; + padding-bottom:1rem; + -webkit-transform:translate(-50%,-50%); + transform:translate(-50%,-50%); +} + +.card-wrap{ + position:relative; + margin:0 auto; +} + +@media (min-width: 769px){ + + .card-wrap{ + max-width:450px + } +} + +.card-body{ + display:flex; + flex-direction:column; + align-items:center; + justify-content:center; + text-align:center; +} + +.card-body p{ + font-size:1.1rem; +} + +.card-title{ + font-weight:bold; + font-size:1.8rem; +} + +.badge-wrap{ + display:flex; + justify-content:center; +} + +.badge-wrap a.badge{ + display:flex; + align-items:center; + justify-content:center; + width:2.5rem; + height:2.5rem; + margin:0 .2rem; + padding:0; + opacity:.7; + border-radius:50%; + transition:opacity .3s ease-in; + font-size:1rem; + color:#fff; + text-decoration:none; + cursor:pointer; +} + +.badge-wrap a.badge:hover{ + opacity:1; + color:#fff; +} + +.btn{ + color:#fff !important; + width:10em; + transition:all .4s; + border-radius:20px; + border:2px solid transparent; +} +.btn.btn-back{ + position:absolute; + top:0; + left:0; + border-radius:0; + width:3rem; + height:3rem; + font-size:1.5rem; + border:0; +} +.btn.btn-back:hover{ + border:0 !important; +} + +.form-control{ + font-family:'Handle', cursive; +} + +.form-control::-webkit-input-placeholder{ + font-family:'Josefin Sans', sans-serif; + letter-spacing:.1em; + font-size:.9rem; +} + +.form-control:-ms-input-placeholder{ + font-family:'Josefin Sans', sans-serif; + letter-spacing:.1em; + font-size:.9rem; +} + +.form-control::-ms-input-placeholder{ + font-family:'Josefin Sans', sans-serif; + letter-spacing:.1em; + font-size:.9rem; +} + +.form-control::placeholder{ + font-family:'Josefin Sans', sans-serif; + letter-spacing:.1em; + font-size:.9rem; +} +.card--welcome{ + z-index:3; +} +.card--welcome .card-title{ + color:#ee9ca7; +} +.card--welcome .btn-wrap{ + display:flex; + flex-direction:column; +} +.card--welcome .btn{ + color:#fff; + transition:all .3s; +} +.card--welcome .btn:hover{ + background-color:rgba(238,156,167,.25); + font-weight:bold; +} +.card--welcome .btn-register{ + margin-bottom:.8em; + background-color:#ee9ca7; +} +.card--welcome .btn-register:hover{ + color:#ee9ca7; +} +.card--welcome .btn-login{ + background-color:#a7bfe8; +} +.card--register .card-title{ + color:#ee9ca7; +} +.card--register .badge{ + background-color:#ee9ca7; +} +.card--register .btn{ + background-color:#ee9ca7; +} +.card--register .btn:hover{ + background-color:#fff; + color:#ee9ca7 !important; + font-weight:bold; + border:2px solid rgba(238,156,167,.25); +} +.card--register .btn:focus{ + box-shadow:0 0 0 0.2rem rgba(238,156,167,.25); +} +.card--register .form-control{ + color:#ee9ca7; + border-color:rgba(238,156,167,.25); +} +.card--register .form-control:focus{ + box-shadow:0 0 0 0.2rem rgba(238,156,167,.25); +} +.card--login .card-title{ + color:#a7bfe8; +} +.card--login .badge{ + background-color:#a7bfe8; +} +.card--login .btn{ + background-color:#a7bfe8; +} +.card--login .btn:hover{ + background-color:#fff; + color:#a7bfe8 !important; + font-weight:bold; + border:2px solid rgba(167,191,232,.25); +} +.card--login .btn:focus{ + box-shadow:0 0 0 0.2rem rgba(167,191,232,.25); +} +.card--login .form-control{ + color:#a7bfe8; + border-color:rgba(167,191,232,.25); +} +.card--login .form-control:focus{ + box-shadow:0 0 0 0.2rem rgba(167,191,232,.25); +} +body{ + background:linear-gradient(to right, #ffdde1, #ee9ca7, #a7bfe8, #6190e8); + background-size:500% 500%; + transition:background 3s ease; + background-position:50% 50%; +} +body.is-register{ + background-position:0% 50%; +} +body.is-login{ + background-position:100% 50%; +} +.card{ + transition:all .3s .1s ease-out; +} +.card:not(.is-show){ + opacity:0; + -webkit-transform:translate(-50%,-50%) rotateX(95deg); + transform:translate(-50%,-50%) rotateX(95deg); +} +.card.is-show{ + opacity:1; + -webkit-transform:translate(-50%,-50%); + transform:translate(-50%,-50%); + z-index:5; +} \ No newline at end of file diff --git a/src/main/resources/static/css/user/home/animate.css b/src/main/resources/static/css/user/home/animate.css new file mode 100644 index 0000000..60025f3 --- /dev/null +++ b/src/main/resources/static/css/user/home/animate.css @@ -0,0 +1,3181 @@ +@charset "UTF-8"; + +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2015 Daniel Eden +*/ + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} + +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} + +.animated.bounceIn, +.animated.bounceOut { + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +.animated.flipOutX, +.animated.flipOutY { + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-webkit-keyframes bounce { + 0%, 20%, 53%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +@keyframes bounce { + 0%, 20%, 53%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes flash { + 0%, 50%, 100% { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +@keyframes flash { + 0%, 50%, 100% { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@-webkit-keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + 0%, 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +@keyframes shake { + 0%, 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes wobble { + 0% { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes wobble { + 0% { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes bounceIn { + 0%, 20%, 40%, 60%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes bounceIn { + 0%, 20%, 40%, 60%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} + +@-webkit-keyframes bounceInDown { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInDown { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInLeft { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInRight { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInUp { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; +} + +@-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} + +@-webkit-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} + +@-webkit-keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} + +@-webkit-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} + +@-webkit-keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} + +@-webkit-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} + +@-webkit-keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} + +@-webkit-keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + +@-webkit-keyframes fadeOut { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +@keyframes fadeOut { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOutDown { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes fadeOutDown { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} + +@-webkit-keyframes fadeOutDownBig { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes fadeOutDownBig { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} + +@-webkit-keyframes fadeOutLeft { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes fadeOutLeft { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} + +@-webkit-keyframes fadeOutLeftBig { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes fadeOutLeftBig { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} + +@-webkit-keyframes fadeOutRight { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes fadeOutRight { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} + +@-webkit-keyframes fadeOutRightBig { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes fadeOutRightBig { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} + +@-webkit-keyframes fadeOutUp { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes fadeOutUp { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} + +@-webkit-keyframes fadeOutUpBig { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes fadeOutUpBig { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} + +@-webkit-keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@-webkit-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} + +@-webkit-keyframes lightSpeedIn { + 0% { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + 100% { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes lightSpeedIn { + 0% { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + 100% { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} + +@-webkit-keyframes lightSpeedOut { + 0% { + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + 0% { + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; +} + +@-webkit-keyframes rotateIn { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateIn { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; +} + +@-webkit-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; +} + +@-webkit-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; +} + +@-webkit-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; +} + +@-webkit-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} + +@-webkit-keyframes rotateOut { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; +} + +@-webkit-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} + +@-webkit-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} + +@-webkit-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} + +@-webkit-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollOut { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +@keyframes rollOut { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} + +@-webkit-keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; +} + +@-webkit-keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; +} + +@-webkit-keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; +} + +@-webkit-keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; +} + +@-webkit-keyframes zoomOut { + 0% { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 100% { + opacity: 0; + } +} + +@keyframes zoomOut { + 0% { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 100% { + opacity: 0; + } +} + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; +} + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; +} + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; +} + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; +} + +@-webkit-keyframes slideInDown { + 0% { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInDown { + 0% { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} + +@-webkit-keyframes slideInLeft { + 0% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInLeft { + 0% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} + +@-webkit-keyframes slideInRight { + 0% { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInRight { + 0% { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} + +@-webkit-keyframes slideInUp { + 0% { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInUp { + 0% { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; +} + +@-webkit-keyframes slideOutDown { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes slideOutDown { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes slideOutLeft { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes slideOutLeft { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} + +@-webkit-keyframes slideOutRight { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes slideOutRight { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} + +@-webkit-keyframes slideOutUp { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes slideOutUp { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} \ No newline at end of file diff --git a/src/main/resources/static/css/user/home/bootstrap.min.css b/src/main/resources/static/css/user/home/bootstrap.min.css new file mode 100644 index 0000000..cd1c616 --- /dev/null +++ b/src/main/resources/static/css/user/home/bootstrap.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.4 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/src/main/resources/static/css/user/home/fancybox/blank.gif b/src/main/resources/static/css/user/home/fancybox/blank.gif new file mode 100644 index 0000000..35d42e8 Binary files /dev/null and b/src/main/resources/static/css/user/home/fancybox/blank.gif differ diff --git a/src/main/resources/static/css/user/home/fancybox/fancybox_loading.gif b/src/main/resources/static/css/user/home/fancybox/fancybox_loading.gif new file mode 100644 index 0000000..a03a40c Binary files /dev/null and b/src/main/resources/static/css/user/home/fancybox/fancybox_loading.gif differ diff --git a/src/main/resources/static/css/user/home/fancybox/fancybox_loading@2x.gif b/src/main/resources/static/css/user/home/fancybox/fancybox_loading@2x.gif new file mode 100644 index 0000000..9205aeb Binary files /dev/null and b/src/main/resources/static/css/user/home/fancybox/fancybox_loading@2x.gif differ diff --git a/src/main/resources/static/css/user/home/fancybox/fancybox_overlay.png b/src/main/resources/static/css/user/home/fancybox/fancybox_overlay.png new file mode 100644 index 0000000..a439139 Binary files /dev/null and b/src/main/resources/static/css/user/home/fancybox/fancybox_overlay.png differ diff --git a/src/main/resources/static/css/user/home/fancybox/fancybox_sprite.png b/src/main/resources/static/css/user/home/fancybox/fancybox_sprite.png new file mode 100644 index 0000000..fd8d5ca Binary files /dev/null and b/src/main/resources/static/css/user/home/fancybox/fancybox_sprite.png differ diff --git a/src/main/resources/static/css/user/home/fancybox/fancybox_sprite@2x.png b/src/main/resources/static/css/user/home/fancybox/fancybox_sprite@2x.png new file mode 100644 index 0000000..d0e4779 Binary files /dev/null and b/src/main/resources/static/css/user/home/fancybox/fancybox_sprite@2x.png differ diff --git a/src/main/resources/static/css/user/home/fancybox/jquery.fancybox.css b/src/main/resources/static/css/user/home/fancybox/jquery.fancybox.css new file mode 100644 index 0000000..c75d051 --- /dev/null +++ b/src/main/resources/static/css/user/home/fancybox/jquery.fancybox.css @@ -0,0 +1,273 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +.fancybox-wrap, +.fancybox-skin, +.fancybox-outer, +.fancybox-inner, +.fancybox-image, +.fancybox-wrap iframe, +.fancybox-wrap object, +.fancybox-nav, +.fancybox-nav span, +.fancybox-tmp +{ + padding: 0; + margin: 0; + border: 0; + outline: none; + vertical-align: top; +} + +.fancybox-wrap { + position: absolute; + top: 0; + left: 0; + z-index: 8020; +} + +.fancybox-skin { + position: relative; + background: #f9f9f9; + color: #444; + text-shadow: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.fancybox-opened { + z-index: 8030; +} + +.fancybox-opened .fancybox-skin { + -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); +} + +.fancybox-outer, .fancybox-inner { + position: relative; +} + +.fancybox-inner { + overflow: hidden; +} + +.fancybox-type-iframe .fancybox-inner { + -webkit-overflow-scrolling: touch; +} + +.fancybox-error { + color: #444; + font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + margin: 0; + padding: 15px; + white-space: nowrap; +} + +.fancybox-image, .fancybox-iframe { + display: block; + width: 100%; + height: 100%; +} + +.fancybox-image { + max-width: 100%; + max-height: 100%; +} + +#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { + background-image: url(fancybox_sprite.png); +} + +#fancybox-loading { + position: fixed; + top: 50%; + left: 50%; + margin-top: -22px; + margin-left: -22px; + background-position: 0 -108px; + opacity: 0.8; + cursor: pointer; + z-index: 8060; +} + +#fancybox-loading div { + width: 44px; + height: 44px; + background: url(fancybox_loading.gif) center center no-repeat; +} + +.fancybox-close { + position: absolute; + top: -18px; + right: -18px; + width: 36px; + height: 36px; + cursor: pointer; + z-index: 8040; +} + +.fancybox-nav { + position: absolute; + top: 0; + width: 40%; + height: 100%; + cursor: pointer; + text-decoration: none; + background: transparent url(blank.gif); /* helps IE */ + -webkit-tap-highlight-color: rgba(0,0,0,0); + z-index: 8040; +} + +.fancybox-prev { + left: 0; +} + +.fancybox-next { + right: 0; +} + +.fancybox-nav span { + position: absolute; + top: 50%; + width: 36px; + height: 34px; + margin-top: -18px; + cursor: pointer; + z-index: 8040; + visibility: hidden; +} + +.fancybox-prev span { + left: 10px; + background-position: 0 -36px; +} + +.fancybox-next span { + right: 10px; + background-position: 0 -72px; +} + +.fancybox-nav:hover span { + visibility: visible; +} + +.fancybox-tmp { + position: absolute; + top: -99999px; + left: -99999px; + max-width: 99999px; + max-height: 99999px; + overflow: visible !important; +} + +/* Overlay helper */ + +.fancybox-lock { + overflow: visible !important; + width: auto; +} + +.fancybox-lock body { + overflow: hidden !important; +} + +.fancybox-lock-test { + overflow-y: hidden !important; +} + +.fancybox-overlay { + position: absolute; + top: 0; + left: 0; + overflow: hidden; + display: none; + z-index: 8010; + background: url(fancybox_overlay.png); +} + +.fancybox-overlay-fixed { + position: fixed; + bottom: 0; + right: 0; +} + +.fancybox-lock .fancybox-overlay { + overflow: auto; + overflow-y: scroll; +} + +/* Title helper */ + +.fancybox-title { + visibility: hidden; + font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + position: relative; + text-shadow: none; + z-index: 8050; +} + +.fancybox-opened .fancybox-title { + visibility: visible; +} + +.fancybox-title-float-wrap { + position: absolute; + bottom: 0; + right: 50%; + margin-bottom: -35px; + z-index: 8050; + text-align: center; +} + +.fancybox-title-float-wrap .child { + display: inline-block; + margin-right: -100%; + padding: 2px 20px; + background: transparent; /* Fallback for web browsers that doesn't support RGBa */ + background: rgba(0, 0, 0, 0.8); + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; + text-shadow: 0 1px 2px #222; + color: #FFF; + font-weight: bold; + line-height: 24px; + white-space: nowrap; +} + +.fancybox-title-outside-wrap { + position: relative; + margin-top: 10px; + color: #fff; +} + +.fancybox-title-inside-wrap { + padding-top: 10px; +} + +.fancybox-title-over-wrap { + position: absolute; + bottom: 0; + left: 0; + color: #fff; + padding: 10px; + background: #000; + background: rgba(0, 0, 0, .8); +} + +/*Retina graphics!*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-device-pixel-ratio: 1.5){ + + #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { + background-image: url(fancybox_sprite@2x.png); + background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/ + } + + #fancybox-loading div { + background-image: url(fancybox_loading@2x.gif); + background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/ + } +} \ No newline at end of file diff --git a/src/main/resources/static/css/user/home/font-awesome.min.css b/src/main/resources/static/css/user/home/font-awesome.min.css new file mode 100644 index 0000000..8e43c6d --- /dev/null +++ b/src/main/resources/static/css/user/home/font-awesome.min.css @@ -0,0 +1,12 @@ +/*! + * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{ + font-family:'FontAwesome'; + src:url('../../../fonts/user/home/fontawesome-webfont.eot?v=4.3.0'); + src:url('../../../fonts/user/home/fontawesome-webfont.eot?#iefix&v=4.3.0') + format('embedded-opentype'),url('../../../fonts/user/home/fontawesome-webfont.woff2?v=4.3.0') + format('woff2'),url('../../../fonts/user/home/fontawesome-webfont.woff?v=4.3.0') + format('woff'),url('../../../fonts/user/home/fontawesome-webfont.ttf?v=4.3.0') + format('truetype'),url('../../../fonts/user/home/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') + format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} \ No newline at end of file diff --git a/src/main/resources/static/css/user/home/jquery-ui.css b/src/main/resources/static/css/user/home/jquery-ui.css new file mode 100644 index 0000000..1c22746 --- /dev/null +++ b/src/main/resources/static/css/user/home/jquery-ui.css @@ -0,0 +1,1225 @@ +/*! jQuery UI - v1.11.4 - 2015-03-11 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ + font-size: 100%; +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + position: relative; + margin: 0; + padding: 3px 1em 3px .4em; + cursor: pointer; + min-height: 0; /* support: IE7 */ + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + /* Support: IE7 */ + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-button { + display: inline-block; + overflow: hidden; + position: relative; + text-decoration: none; + cursor: pointer; +} +.ui-selectmenu-button span.ui-icon { + right: 0.5em; + left: auto; + margin-top: -8px; + position: absolute; + top: 50%; +} +.ui-selectmenu-button span.ui-selectmenu-text { + text-align: left; + padding: 0.4em 2.1em 0.4em 1em; + display: block; + line-height: 1.4; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertically center icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999999; + background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #212121; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_888888_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-active .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-highlight .ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cd0a0a_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ + border-radius: 8px; +} diff --git a/src/main/resources/static/css/user/home/main.css b/src/main/resources/static/css/user/home/main.css new file mode 100644 index 0000000..8dcdea2 --- /dev/null +++ b/src/main/resources/static/css/user/home/main.css @@ -0,0 +1,279 @@ +/*! HTML5 Boilerplate v5.1.0 | MIT License | https://html5boilerplate.com/ */ + +/* + * What follows is the result of much research on cross-browser styling. + * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal, + * Kroc Camen, and the H5BP dev community and team. + */ + +/* ========================================================================== + Base styles: opinionated defaults + ========================================================================== */ + +html { + color: #222; + font-size: 1em; + line-height: 1.4; +} + +/* + * Remove text-shadow in selection highlight: + * https://twitter.com/miketaylr/status/12228805301 + * + * These selection rule sets have to be separate. + * Customize the background color to match your design. + */ + +::-moz-selection { + background: #b3d4fc; + text-shadow: none; +} + +::selection { + background: #b3d4fc; + text-shadow: none; +} + +/* + * A better looking default horizontal rule + */ + +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0; +} + +/* + * Remove the gap between audio, canvas, iframes, + * images, videos and the bottom of their containers: + * https://github.com/h5bp/html5-boilerplate/issues/440 + */ + +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} + +/* + * Remove default fieldset styles. + */ + +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +/* + * Allow only vertical resizing of textareas. + */ + +textarea { + resize: vertical; +} + +/* ========================================================================== + Browser Upgrade Prompt + ========================================================================== */ + +.browserupgrade { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; +} + +/* ========================================================================== + Author's custom styles + ========================================================================== */ + + + + + + + + + + + + + + + + + +/* ========================================================================== + Helper classes + ========================================================================== */ + +/* + * Hide visually and from screen readers: + */ + +.hidden { + display: none !important; +} + +/* + * Hide only visually, but have it available for screen readers: + * http://snook.ca/archives/html_and_css/hiding-content-for-accessibility + */ + +.visuallyhidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +/* + * Extends the .visuallyhidden class to allow the element + * to be focusable when navigated to via the keyboard: + * https://www.drupal.org/node/897638 + */ + +.visuallyhidden.focusable:active, +.visuallyhidden.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; +} + +/* + * Hide visually and from screen readers, but maintain layout + */ + +.invisible { + visibility: hidden; +} + +/* + * Clearfix: contain floats + * + * For modern browsers + * 1. The space content is one way to avoid an Opera bug when the + * `contenteditable` attribute is included anywhere else in the document. + * Otherwise it causes space to appear at the top and bottom of elements + * that receive the `clearfix` class. + * 2. The use of `table` rather than `block` is only necessary if using + * `:before` to contain the top-margins of child elements. + */ + +.clearfix:before, +.clearfix:after { + content: " "; /* 1 */ + display: table; /* 2 */ +} + +.clearfix:after { + clear: both; +} + +/* ========================================================================== + EXAMPLE Media Queries for Responsive Design. + These examples override the primary ('mobile first') styles. + Modify as content requires. + ========================================================================== */ + +@media only screen and (min-width: 35em) { + /* Style adjustments for viewports that meet the condition */ +} + +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + /* Style adjustments for high resolution devices */ +} + +/* ========================================================================== + Print styles. + Inlined to avoid the additional HTTP request: + http://www.phpied.com/delay-loading-your-print-css/ + ========================================================================== */ + +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; /* Black prints faster: + http://www.sanbeiji.com/archives/953 */ + box-shadow: none !important; + text-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + /* + * Don't show links that are fragment identifiers, + * or use the `javascript:` pseudo protocol + */ + + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + /* + * Printing Tables: + * http://css-discuss.incutio.com/wiki/Printing_Tables + */ + + thead { + display: table-header-group; + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } +} diff --git a/src/main/resources/static/css/user/home/meanmenu.min.css b/src/main/resources/static/css/user/home/meanmenu.min.css new file mode 100644 index 0000000..7fbe75c --- /dev/null +++ b/src/main/resources/static/css/user/home/meanmenu.min.css @@ -0,0 +1,19 @@ +a.meanmenu-reveal{display:none} +.mean-container .mean-bar{float:left;width:100%;position:relative;background:#0c1923;padding:4px 0;min-height:42px;z-index:999999} +.mean-container a.meanmenu-reveal{width:22px;height:22px;padding:13px 13px 11px;top:0;right:0;cursor:pointer;color:#fff;text-decoration:none;font-size:16px;text-indent:-9999em;line-height:22px;font-size:1px;display:block;font-family:Arial,Helvetica,sans-serif;font-weight:700;margin:0 auto} +.mean-container a.meanmenu-reveal span{display:block;background:#fff;height:3px;margin-top:3px} +.mean-container .mean-nav{float:left;width:100%;background:#0c1923} +.mean-container .mean-nav ul{padding:0;margin:0;width:100%;list-style-type:none} +.mean-container .mean-nav ul li{position:relative;float:left;width:100%} +.mean-container .mean-nav ul li a{display:block;float:left;width:90%;padding:1em 5%;margin:0;text-align:left;color:#fff;border-top:1px solid #383838;border-top:1px solid rgba(255,255,255,.5);text-decoration:none;text-transform:uppercase} +.mean-container .mean-nav ul li li a{width:80%;padding:1em 10%;border-top:1px solid #f1f1f1;border-top:1px solid rgba(255,255,255,.25);opacity:.75;filter:alpha(opacity=75);text-shadow:none!important;visibility:visible} +.mean-container .mean-nav ul li.mean-last a{border-bottom:0;margin-bottom:0} +.mean-container .mean-nav ul li li li a{width:70%;padding:1em 15%} +.mean-container .mean-nav ul li li li li a{width:60%;padding:1em 20%} +.mean-container .mean-nav ul li li li li li a{width:50%;padding:1em 25%} +.mean-container .mean-nav ul li a:hover{background:#252525;background:rgba(255,255,255,.1)} +.mean-container .mean-nav ul li a.mean-expand{margin-top:1px;width:26px;height:22px;padding:12px!important;text-align:center;position:absolute;right:0;top:0;z-index:2;font-weight:700;background:rgba(255,255,255,.1);border:0!important;border-left:1px solid rgba(255,255,255,.4)!important;border-bottom:1px solid rgba(255,255,255,.2)!important}.mean-container .mean-nav ul li a.mean-expand:hover{background:rgba(0,0,0,.9)} +.mean-container .mean-push{float:left;width:100%;padding:0;margin:0;clear:both} +.mean-nav .wrapper{width:100%;padding:0;margin:0} +.mean-container .mean-bar,.mean-container .mean-bar *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box} +.mean-remove{display:none!important} \ No newline at end of file diff --git a/src/main/resources/static/css/user/home/normalize.css b/src/main/resources/static/css/user/home/normalize.css new file mode 100644 index 0000000..5e5e3c8 --- /dev/null +++ b/src/main/resources/static/css/user/home/normalize.css @@ -0,0 +1,424 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device orientation change, + * without disabling user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + box-sizing: content-box; /* 2 */ +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/src/main/resources/static/css/user/home/owl.carousel.css b/src/main/resources/static/css/user/home/owl.carousel.css new file mode 100644 index 0000000..4e3c17c --- /dev/null +++ b/src/main/resources/static/css/user/home/owl.carousel.css @@ -0,0 +1,71 @@ +/* + * Core Owl Carousel CSS File + * v1.3.3 + */ + +/* clearfix */ +.owl-carousel .owl-wrapper:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} +/* display none until init */ +.owl-carousel{ + display: none; + position: relative; + width: 100%; + -ms-touch-action: pan-y; +} +.owl-carousel .owl-wrapper{ + display: none; + position: relative; + -webkit-transform: translate3d(0px, 0px, 0px); +} +.owl-carousel .owl-wrapper-outer{ + overflow: hidden; + position: relative; + width: 100%; +} +.owl-carousel .owl-wrapper-outer.autoHeight{ + -webkit-transition: height 500ms ease-in-out; + -moz-transition: height 500ms ease-in-out; + -ms-transition: height 500ms ease-in-out; + -o-transition: height 500ms ease-in-out; + transition: height 500ms ease-in-out; +} + +.owl-carousel .owl-item{ + float: left; +} +.owl-controls .owl-page, +.owl-controls .owl-buttons div{ + cursor: pointer; +} +.owl-controls { + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +/* mouse grab icon */ +.grabbing { + cursor:url(grabbing.png) 8 8, move; +} + +/* fix */ +.owl-carousel .owl-wrapper, +.owl-carousel .owl-item{ + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + -webkit-transform: translate3d(0,0,0); + -moz-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); +} + diff --git a/src/main/resources/static/css/user/home/owl.theme.css b/src/main/resources/static/css/user/home/owl.theme.css new file mode 100644 index 0000000..9772975 --- /dev/null +++ b/src/main/resources/static/css/user/home/owl.theme.css @@ -0,0 +1,79 @@ +/* +* Owl Carousel Owl Demo Theme +* v1.3.3 +*/ + +.owl-theme .owl-controls{ + margin-top: 10px; + text-align: center; +} + +/* Styling Next and Prev buttons */ + +.owl-theme .owl-controls .owl-buttons div{ + color: #FFF; + display: inline-block; + zoom: 1; + *display: inline;/*IE7 life-saver */ + margin: 5px; + padding: 3px 10px; + font-size: 12px; + -webkit-border-radius: 30px; + -moz-border-radius: 30px; + border-radius: 30px; + background: #869791; + filter: Alpha(Opacity=50);/*IE7 fix*/ + opacity: 0.5; +} +/* Clickable class fix problem with hover on touch devices */ +/* Use it for non-touch hover action */ +.owl-theme .owl-controls.clickable .owl-buttons div:hover{ + filter: Alpha(Opacity=100);/*IE7 fix*/ + opacity: 1; + text-decoration: none; +} + +/* Styling Pagination*/ + +.owl-theme .owl-controls .owl-page{ + display: inline-block; + zoom: 1; + *display: inline;/*IE7 life-saver */ +} +.owl-theme .owl-controls .owl-page span{ + display: block; + width: 12px; + height: 12px; + margin: 5px 7px; + filter: Alpha(Opacity=50);/*IE7 fix*/ + opacity: 0.5; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + background: #869791; +} + +.owl-theme .owl-controls .owl-page.active span, +.owl-theme .owl-controls.clickable .owl-page:hover span{ + filter: Alpha(Opacity=100);/*IE7 fix*/ + opacity: 1; +} + +/* If PaginationNumbers is true */ + +.owl-theme .owl-controls .owl-page span.owl-numbers{ + height: auto; + width: auto; + color: #FFF; + padding: 2px 10px; + font-size: 12px; + -webkit-border-radius: 30px; + -moz-border-radius: 30px; + border-radius: 30px; +} + +/* preloading images */ +.owl-item.loading{ + min-height: 150px; + background: url(AjaxLoader.gif) no-repeat center center +} \ No newline at end of file diff --git a/src/main/resources/static/css/user/home/owl.transitions.css b/src/main/resources/static/css/user/home/owl.transitions.css new file mode 100644 index 0000000..b2d55d5 --- /dev/null +++ b/src/main/resources/static/css/user/home/owl.transitions.css @@ -0,0 +1,163 @@ +/* + * Owl Carousel CSS3 Transitions + * v1.3.2 + */ + +.owl-origin { + -webkit-perspective: 1200px; + -webkit-perspective-origin-x : 50%; + -webkit-perspective-origin-y : 50%; + -moz-perspective : 1200px; + -moz-perspective-origin-x : 50%; + -moz-perspective-origin-y : 50%; + perspective : 1200px; +} +/* fade */ +.owl-fade-out { + z-index: 10; + -webkit-animation: fadeOut .7s both ease; + -moz-animation: fadeOut .7s both ease; + animation: fadeOut .7s both ease; +} +.owl-fade-in { + -webkit-animation: fadeIn .7s both ease; + -moz-animation: fadeIn .7s both ease; + animation: fadeIn .7s both ease; +} +/* backSlide */ +.owl-backSlide-out { + -webkit-animation: backSlideOut 1s both ease; + -moz-animation: backSlideOut 1s both ease; + animation: backSlideOut 1s both ease; +} +.owl-backSlide-in { + -webkit-animation: backSlideIn 1s both ease; + -moz-animation: backSlideIn 1s both ease; + animation: backSlideIn 1s both ease; +} +/* goDown */ +.owl-goDown-out { + -webkit-animation: scaleToFade .7s ease both; + -moz-animation: scaleToFade .7s ease both; + animation: scaleToFade .7s ease both; +} +.owl-goDown-in { + -webkit-animation: goDown .6s ease both; + -moz-animation: goDown .6s ease both; + animation: goDown .6s ease both; +} +/* scaleUp */ +.owl-fadeUp-in { + -webkit-animation: scaleUpFrom .5s ease both; + -moz-animation: scaleUpFrom .5s ease both; + animation: scaleUpFrom .5s ease both; +} + +.owl-fadeUp-out { + -webkit-animation: scaleUpTo .5s ease both; + -moz-animation: scaleUpTo .5s ease both; + animation: scaleUpTo .5s ease both; +} +/* Keyframes */ +/*empty*/ +@-webkit-keyframes empty { + 0% {opacity: 1} +} +@-moz-keyframes empty { + 0% {opacity: 1} +} +@keyframes empty { + 0% {opacity: 1} +} +@-webkit-keyframes fadeIn { + 0% { opacity:0; } + 100% { opacity:1; } +} +@-moz-keyframes fadeIn { + 0% { opacity:0; } + 100% { opacity:1; } +} +@keyframes fadeIn { + 0% { opacity:0; } + 100% { opacity:1; } +} +@-webkit-keyframes fadeOut { + 0% { opacity:1; } + 100% { opacity:0; } +} +@-moz-keyframes fadeOut { + 0% { opacity:1; } + 100% { opacity:0; } +} +@keyframes fadeOut { + 0% { opacity:1; } + 100% { opacity:0; } +} +@-webkit-keyframes backSlideOut { + 25% { opacity: .5; -webkit-transform: translateZ(-500px); } + 75% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); } + 100% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); } +} +@-moz-keyframes backSlideOut { + 25% { opacity: .5; -moz-transform: translateZ(-500px); } + 75% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); } + 100% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); } +} +@keyframes backSlideOut { + 25% { opacity: .5; transform: translateZ(-500px); } + 75% { opacity: .5; transform: translateZ(-500px) translateX(-200%); } + 100% { opacity: .5; transform: translateZ(-500px) translateX(-200%); } +} +@-webkit-keyframes backSlideIn { + 0%, 25% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(200%); } + 75% { opacity: .5; -webkit-transform: translateZ(-500px); } + 100% { opacity: 1; -webkit-transform: translateZ(0) translateX(0); } +} +@-moz-keyframes backSlideIn { + 0%, 25% { opacity: .5; -moz-transform: translateZ(-500px) translateX(200%); } + 75% { opacity: .5; -moz-transform: translateZ(-500px); } + 100% { opacity: 1; -moz-transform: translateZ(0) translateX(0); } +} +@keyframes backSlideIn { + 0%, 25% { opacity: .5; transform: translateZ(-500px) translateX(200%); } + 75% { opacity: .5; transform: translateZ(-500px); } + 100% { opacity: 1; transform: translateZ(0) translateX(0); } +} +@-webkit-keyframes scaleToFade { + to { opacity: 0; -webkit-transform: scale(.8); } +} +@-moz-keyframes scaleToFade { + to { opacity: 0; -moz-transform: scale(.8); } +} +@keyframes scaleToFade { + to { opacity: 0; transform: scale(.8); } +} +@-webkit-keyframes goDown { + from { -webkit-transform: translateY(-100%); } +} +@-moz-keyframes goDown { + from { -moz-transform: translateY(-100%); } +} +@keyframes goDown { + from { transform: translateY(-100%); } +} + +@-webkit-keyframes scaleUpFrom { + from { opacity: 0; -webkit-transform: scale(1.5); } +} +@-moz-keyframes scaleUpFrom { + from { opacity: 0; -moz-transform: scale(1.5); } +} +@keyframes scaleUpFrom { + from { opacity: 0; transform: scale(1.5); } +} + +@-webkit-keyframes scaleUpTo { + to { opacity: 0; -webkit-transform: scale(1.5); } +} +@-moz-keyframes scaleUpTo { + to { opacity: 0; -moz-transform: scale(1.5); } +} +@keyframes scaleUpTo { + to { opacity: 0; transform: scale(1.5); } +} \ No newline at end of file diff --git a/src/main/resources/static/css/user/home/responsive.css b/src/main/resources/static/css/user/home/responsive.css new file mode 100644 index 0000000..d8945fe --- /dev/null +++ b/src/main/resources/static/css/user/home/responsive.css @@ -0,0 +1,481 @@ +/* Normal desktop :992px. */ +@media (min-width: 992px) and (max-width: 1200px) { + +.container {width:970px} +/* home-1 */ +.banner-top-4 { + margin-top: 19px; +} +.banner-bottom { + margin-top: 13px; +} +.footer-icons a { + display: inline-block; + margin-right: 1px; +} +/* home 4 */ +.home-4 .header-search input { + width: 210px; +} +.home-4 .mainmenu ul li { + margin-right: 25px; +} +/* shop page */ +.price_slider_amount > input[type="text"] { + margin-left: 0; + width: 105px; +} +.about-text h2 { + margin: 0 0 10px; +} +.service-text { + overflow: hidden; +} +.four-zero-four h1 { + font-size: 16.91em; +} + + + + + +} + + +/* Tablet desktop :768px. */ +@media (min-width: 768px) and (max-width: 991px) { +.container {width:750px} +/* home-1 */ +.top-menu ul li a { + margin-right: 10px; +} +.banner-top-4 { + margin-top: 16px; +} +.banner-bottom { + margin-top: 9px; +} +.payment { + margin-top: 12px; + text-align: left; +} +.payment img { + margin-left: 0; + margin-right: 10px; +} +/* home 2 */ +.top-message { + display: none; +} +.phone-number { + margin-left: 0; +} +.home-2 .header-search { + width: 100%; + margin-top: 25px; +} +.home-2 .header-search input { + width: 100%; +} +.home-2 .logo { + text-align: center; +} +/* home 3 */ +.timer::before { + width: 45px; +} +.timer { + padding-left: 45px; +} +/* home 4 */ +.home-4 .logo { + text-align: center; +} +.home-4 .mainmenu ul li { + margin-right: 28px; +} +.home-4 .header-search input { + width: 220px; +} +.home-4 .header-search { + margin-top: 10px; +} +.home-4 .header-mid-area { + padding: 20px 0; +} +.home-4 .logo { + margin-bottom: 20px; +} +/* blog */ +.blog-area .col-lg-3 { + margin-bottom: 50px; + overflow: hidden; +} +/* shop page */ +.shop-header-title h1 { + font-size: 50px; +} +.top-product-widget li { + float: left; + width: 33.3%; +} +.top-product-widget li { + border: medium none; +} +.single-product-info { + margin-top: 20px; +} +.product-tab-area .top-product-widget li { + width: 50%; +} +.product-tabs { + margin-bottom: 30px; + overflow: hidden; +} +.upsells_products_widget { + margin-bottom: 40px; +} +.service-text { + overflow: hidden; +} +.faq-content { + margin-top: 50px; +} +.four-zero-four h1 { + font-size: 14.91em; +} +.portfolio-menu li { + padding: 12px 20px; +} +.portfolio-information { + margin-top: 40px; +} +.single-product-tab .tab-content img { + width: 100%; +} + + +} + + +/* small mobile :320px. */ +@media (max-width: 767px) { +.container {width:300px} +/* home-1 */ +.mainmenu-area { + border-bottom: 1px solid #e8e8e9; + display: none; +} +.mainmenu { + display: none; +} +.header-top-area { + line-height: 26px; + padding: 5px 0; +} +.top-message:after { + display: none; +} +.top-message { + float: none; + padding-right: 0; +} +.header-top-left { + text-align: center; +} +.phone-number { + display: inline-block; + float: none; + margin-left: 0; +} +.lang-select { + float: none; + text-align: center; +} +.top-menu { + float: none; + text-align: center; +} +.top-menu ul li a { + margin: 0 5px; +} +.logo { + text-align: center; + margin-bottom: 15px; +} +.cart-total { + float: none; + margin: auto; + text-align: left; + width: 170px; + margin-top: 10px; +} +.header-mid-area { + text-align: center; +} +.cart-total ul li { + display: inline-block; + float: none; +} +.header-search { + float: left; + width: 100%; +} +.header-search input { + width: 100%; +} +.mean-container .mean-nav ul li a.mean-expand { + height: 17px; +} +.header-mid-area { + padding: 20px 0; +} +.single-banner { + margin-bottom: 15px; + overflow: hidden; +} +.banner-top-4 { + margin-top: 0; +} +.section-heading h3 { + font-size: 15px; +} +.footer-middle-menu ul { + text-align: center; +} +.payment { + text-align: center; +} +.payment img { + display: inline-block; + margin: 3px 2px; +} +.post-thumb a img { + width: 100%; +} +.home-2 .cart-total { + float: right; + height: 38px; + margin-bottom: 10px; + margin-top: 37px; + width: 160px; +} +.home-2 .top-menu { + width: 100%; + overflow: hidden; +} +.home-2 .header-search { + width: 100%; +} +.home-2 .header-search input { + width: 100%; +} +.home-2 .header-mid-area { + padding: 20px 0; +} +.single-category a img { + width: 100%; +} +.single-banner a img { + width: 100%; +} +/* home 3 */ +.latest-deals-curosel { + margin-bottom: 50px; +} +.new-product-curosel { + margin-bottom: 50px; +} +/* home 4 */ +.home-4 .top-menu { + width: 100%; + overflow: hidden; +} +.home-4 .cart-total { + margin-top: 40px; +} +.banner-4-space { + margin-top: 0; +} +.new-best-top-area .row .col-lg-4{ + margin-bottom: 40px; +} +.new-best-top-area .row .col-lg-4:nth-child(3){margin-bottom:0} +/* blog */ +.blog-area .col-lg-3 { + margin-bottom: 50px; + overflow: hidden; +} +.post-thumbnail { + padding-right: 0; + width: 100%; +} +.post-information { + float: left; + margin-top: 10px; + width: 100%; +} +nav.nav-single .nav-next { + float: left; + margin-top: 13px; +} +.single-blog .social-sharing .sharing-icon { + float: left; +} +.shop-header-title h1 { + font-size: 41px; +} +.widget:last-child { + margin: 0 0 40px; +} +.toolbar-form { + display: none; +} +.shop-header-title ul li { + padding-left: 20px; +} +.product-list-wrapper .add-to-cart a { + padding: 0 20px; +} +.product-desc { + margin-bottom: 20px; +} +.product-list-wrapper .add-to-links { + margin-left: 8px; +} +.shop-category-title h3 { + font-size: 50px; +} +.shop-category-title h3::before { + left: 0; + width: 100%; +} +.form-action label { + float: left; +} +.buttons-cart > input { + margin-bottom: 15px; +} +p.checkout-coupon input[type="submit"] { + margin-left: 0; + margin-top: 7px; +} +.your-order { + margin-bottom: 40px; + padding: 20px 12px 45px; +} +.single-product-info { + margin-top: 20px; +} +.single-product-info .quantity input { + margin-right: 20px; +} +.single-product-info .add-to-wishlist { + margin-left: 0; + margin-top: 10px; +} +.product-tab-area h3.sidebar-title { + margin: 25px 0 20px; +} +.product-tab-area .widget:last-child { + margin: 0; +} +.single-product-info .product-nav { + float: left; + margin-bottom: 10px; +} +.product-tabs .nav-tabs > li { + margin-right: 25px; +} +.upsells_products_widget .single-product { + margin-bottom: 30px; +} +.single-service h3 { + margin: 0 0 7px; +} +.single-service { + margin-bottom: 15px; + overflow: hidden; +} +.single-about-team { + margin-bottom: 20px; +} +.contact-info { + margin-bottom: 35px; + overflow: hidden; +} +.faq-accordion .panel-title a.collapsed::before, .faq-accordion .panel-title a::after { + right: -8px; +} +.faq-accordion .panel-title a { + margin-right: 20px; +} +.four-zero-four h1 { + font-size: 8.91em; +} +.four-zero-four form input { + width: 69%; +} +.four-zero-four form button { + padding: 0 20px; +} +.portfolio-header-area h1.entry-title { + font-size: 40px; +} +.portfolio-menu li { + margin-bottom: 10px; + padding: 12px 28px; +} +.portfolio-large { + margin-bottom: 30px; +} +.footer-top-area .col-lg-3{margin-bottom:30px} +.footer-top-area .col-lg-3:last-child{margin-bottom:0px} +ul.footer-contact li:last-child { + margin: 0; +} +.footer-bottom-area { + text-align: center; +} +.payment-img { + float: none; + margin-top: 15px; +} +.single-brand { + text-align: center; +} +.cart-total ul li .mini-cart-content { + right: -61px; +} + + +} + +/* Large Mobile :480px. */ +@media only screen and (min-width: 480px) and (max-width: 767px) { +.container {width:450px} +.section-heading h3 { + font-size: 18px; +} +.single-blog .social-sharing .sharing-icon { + float: right; +} +nav.nav-single .nav-next { + float: right; + margin-top:0px; +} +.shop-header-title ul li { + padding-left: 17px; +} +.form-action label { + float: right; +} +.single-product-info .add-to-wishlist { + margin-left: 12px; + margin-top: 0; +} + + + +} + diff --git a/src/main/resources/static/css/user/home/style.css b/src/main/resources/static/css/user/home/style.css new file mode 100644 index 0000000..94369ea --- /dev/null +++ b/src/main/resources/static/css/user/home/style.css @@ -0,0 +1,2755 @@ +/*----------------------------------------------------------------------------------- + + Template Name: pure-shop E-commerce Html Temaplate + Template URI: http://themepure.net + Description: This is html5 template + Author: themepure + Author URI: http://themepure.net + Version: 1.0 + +----------------------------------------------------------------------------------- + + CSS INDEX + =================== + + 1. Theme Default CSS (body, link color, section etc) + 2. header + 2.1 header-top-area + 2.2 header-mid-area + 2.3 mainmenu-area + 3. slider-area + 4. banner-area + 5. features-area + 6. new-product-area + 7. banner-2-area + 8. top-sells-area + 9. latest-blog-area + 10. brand-area + 11. footer + 12. blog + 13. shop page + 14. account page + 15. order page + 16. cart page + 17. checkout page + 18. product page + 19. about page + 20. contact page + 21. error-page + 27. portfolio page + 28. portfolio single page + 5. +-----------------------------------------------------------------------------------*/ + +/*----------------------------------------*/ +/* 1. Theme default CSS +/*----------------------------------------*/ +html, body {height: 100%;} +.floatleft {float:left} +.floatright {float:right} +.alignleft {float:left;margin-right:15px;margin-bottom: 15px} +.alignright {float:right;margin-left:15px;margin-bottom: 15px} +.aligncenter {display:block;margin:0 auto 15px} +a:focus {outline:0px solid;text-decoration:none} +img {max-width:100%;height:auto} +.fix {overflow:hidden} +p {margin:0 0 15px;} +h1, h2, h3, h4, h5, h6 { + color: #252525; + font-family: 'Montserrat', sans-serif; + line-height: 1.35; + margin: 0 0 10px; +} +a {transition: all 0.3s ease 0s;text-decoration:none;color:#777} +a:hover { + color: #ec4445; + text-decoration: none; +} +a:active, a:hover { + outline: 0 none; +} +ul{ +list-style: outside none none; +margin: 0; +padding: 0 +} +body { + color: #777; + font-family: "Open Sans",sans-serif; + font-size: 13px; + font-style: normal; + font-weight: 400; + line-height: 18px; + visibility: visible; +} +.clear{clear:both} +.slicknav{display:none} +.container{width:1200px} + +/* ========================= +2. header +============================*/ +/*----------------------------------- +2.1 header-top-area +-------------------------------------*/ +header.header-home { + position: absolute; + top: 0; + left: 0; + z-index: 99; + width: 100%; + background:rgba(19, 17, 15, 0.8) none repeat scroll 0 0; +} +header { + background:rgba(19, 17, 15, 0.8) none repeat scroll 0 0; +} +.header-top-area { + border-bottom: 1px solid #515151; + color: #d5d5d5; + line-height: 38px; +} +.header-top-left{} +.top-message{float: left; +padding-right: 20px; +position: relative;} +.top-message:after { + border-right: 1px solid #d5d5d5; + content: ""; + height: 20px; + position: absolute; + right: 0; + top: 10px; + width: 0; +} +.top-message{} +.phone-number{float: left; +margin-left: 20px;} +.phone-number:after{content: ""; +display: inline-block; +float: left; +font-family: FontAwesome; +margin-right: 5px; +} +.phone-number span{color: #ec4445;} +.lang-select { + float: right; +} +.lang-select ul{} +.lang-select ul li{} +.lang-select ul li a{} +.top-menu { + float: right; +} +.top-menu ul{} +.top-menu ul li{display: inline-block;} +.top-menu ul li a{display: inline-block; +margin-right: 20px; +color: #d5d5d5; +} +.top-menu ul li a:hover{color: #ec4445;} +/*----------------------------------- +2.2 header-mid-area +-------------------------------------*/ +.header-mid-area { + padding: 30px 0 10px; +} +.logo{} +.logo a{} +.logo a img{} +.header-search { + float: right; + position: relative; +} +.header-search ,.cart-total{ + margin-top: 15px; +} +.header-search input { + background: #d5d5d5; + border: 0 none; + border-radius: 0; + box-shadow: none; + height: 34px; + left: -245px; + padding: 0 15px; + width: 250px; + color: #000; +} +.header-search button { + background: none; + border: medium none; + color: #000; + font-size: 16px; + line-height: 16px; + padding: 0; + position: absolute; + right: 0; + top: 0; + transition: all 0.3s ease 0s; + width: 40px; + height: 34px; +} +.header-search button:hover { + color: #fff; + background: #EC4445; +} +.cart-total{ +float: right; +margin-left: 10px;} +.cart-total ul{} +.cart-total ul li{float: left;position:relative} +.cart-total ul li a{display: block;} +.cart-total ul li a span.cart-no { + border-color: #EC4445; + border-image: none; + border-style: solid solid solid none; + border-width: 1px 1px 1px 0; + font-family: Montserrat,Arial,Helvetica,sans-serif; + font-weight: bold; + height: 34px; + line-height: 34px; + padding: 0 15px; + text-transform: uppercase; +} +.cart-total ul li a span.cart-icon i{background-color: #ec4445; +color: #fff; +float: left; +font-size: 16px; +height: 34px; +line-height: 34px; +text-align: center; +width: 50px; +} +.cart-total ul li a span.cart-no { + color: #fff; + display: block; + float: right; + transition: all 0.3s ease 0s; +} +.cart-total ul li:hover a span.cart-no { + color: #fff; + background: #ec4445; +} +.cart-total ul li a:hover{} +.cart-total ul li .mini-cart-content{background: #fff none repeat scroll 0 0; +box-shadow: 0 1px 5px rgba(0, 0, 0, 0.15); +opacity: 0; +padding: 10px 0 0; +position: absolute; +right: 0; +top: 100%; +transform: scaleY(0); +transform-origin: 0 0 0; +transition: all 0.5s ease 0s; +width: 280px; +z-index: -99;} +.cart-total ul li:hover .mini-cart-content { + opacity: 1; + transform: scaleY(1); + z-index: 9999999; +} +.cart-total ul li .mini-cart-content .cart-img-details{border-bottom: 0 none; +margin-bottom: 10px; +overflow: hidden; +padding: 12px 12px 0; +position: relative;} +.cart-total ul li .mini-cart-content .cart-img-details .cart-img-photo{float: left; +margin-right: 10px; +width: 50px;} +.cart-total ul li .mini-cart-content .cart-img-details .cart-img-photo a{} +.cart-total ul li .mini-cart-content .cart-img-details .cart-img-photo img{} +.cart-total ul li .mini-cart-content .cart-img-details .cart-img-contaent{float: left;} +.cart-total ul li .mini-cart-content .cart-img-details .cart-img-contaent p{color: #252525; +font-size: 13px; +font-weight: normal; +line-height: 20px; +margin: 0 0 5px; +text-align: left; +width: 190px; +transition: all 0.3s ease 0s;} +.cart-total ul li .mini-cart-content .cart-img-details .cart-img-contaent p:hover{color:#EC4445} +.cart-total ul li .mini-cart-content .cart-img-details .cart-img-contaent span{color: #6f6f6f; +font-weight: 600; +text-align: left;} +.pro-del{float: right; +position: absolute; +right: 15px; +top: 23px;} +.pro-del a{} +.pro-del a i{color: #909295; +font-size: 18px;} +.pro-del a i:hover{color:#EC4445} +span.quantity{background: #EC4445; +border-radius: 50%; +color: #fff; +height: 20px; +left: 5px; +position: absolute; +text-align: center; +top: 5px; +width: 20px;} +p.total{border: medium none; +color: #6f6f6f; +float: left; +font-size: 12px; +font-weight: 600; +line-height: 40px; +margin: 8px 0 0; +text-align: left; +text-transform: uppercase; +width: 100%;} +p.total span{float: right; +font-size: 18px; +font-weight: 700;} +p.cart-button-top{margin-top: 15px; +overflow: hidden;} +.mini-cart-content p.cart-button-top a{background: #ec4445 none repeat scroll 0 0; +border: 1px solid #e5e5e5; +color: #fff; +display: inline-block; +float: right; +font-size: 12px; +font-weight: 600; +padding: 10px 35px; +text-align: center; +text-transform: uppercase;} +.mini-cart-content p.cart-button-top a:hover{background: #252525 none repeat scroll 0 0; +border: 1px solid; +color: #fff;} +.cart-inner-bottom{padding: 0 12px;} +/*----------------------------------- +2.3 mainmenu-area +-------------------------------------*/ +.mainmenu-area { +} +.mainmenu{} +.mainmenu ul{} +.mainmenu ul li{display: inline-block; +margin-right: 40px;position:relative} +.mainmenu ul li a { + color: #fff; + display: block; + font-size: 14px; + font-weight: 700; + padding: 20px 0; + text-transform: uppercase; +} +.mainmenu ul li:hover a{color:#EC4445} +.mainmenu ul li ul.sub-menu{background: #fff none repeat scroll 0 0; +border: 1px solid #e8e8e9; +box-shadow: 0 3px 5px rgba(0, 0, 0, 0.3); +opacity: 0; +position: absolute; +width: 205px; +z-index: -99;} +.mainmenu ul li ul.sub-menu,.mainmenu ul li .mega-menu{transform: scaleY(0); +transform-origin: 0 0 0; +transition: all 0.5s ease 0s;} +.mainmenu ul li:hover ul.sub-menu,.mainmenu ul li:hover .mega-menu{opacity:1;z-index:9999;transform: scaleY(1);} +.mainmenu ul li ul.sub-menu li{margin-right: 0; +width: 100%;} +.mainmenu ul li ul.sub-menu li a { + color: #909295; + font-weight: normal; + padding: 8px 10px; + text-transform: capitalize; +} +.mainmenu ul li:hover ul.sub-menu li a:hover{color:#EC4445;padding-left:15px} +.mainmenu ul li .mega-menu { + background-color: #fff; + left:0px; + margin: 0; + opacity: 0; + padding: 20px 30px; + position: absolute; + text-align: left; + top: 100%; + transition: all 0.3s ease 0s; + visibility: hidden; + width: 923px; + z-index: 9999; +} +.mainmenu ul li:hover .mega-menu{opacity:1;visibility:visible;} +.mainmenu ul li .mega-menu span { + float: left; + padding-right: 30px; + width: 24.6%; +} +.mainmenu ul li .mega-menu span a.mega-title { + border-bottom: 1px solid #ccc; + color: #000; + font-weight: 600; + text-transform: uppercase; +} +.mainmenu ul li .mega-menu span a { + color: #444; + display: block; + font-weight: 400; + padding: 8px 0; + text-transform: capitalize; +} +.mainmenu ul li:hover .mega-menu span a{color:#444} +.mainmenu ul li:hover .mega-menu span a:hover{color:#fe4847} +.mainmenu ul li .mega-menu span.mega-menu-img { + width: 26%; +} +.mainmenu ul li .mega-menu span:last-child { + padding-right: 0; +} +.mainmenu ul li .mega-menu .mega-left { + float: left; + width: 75%; +} +.mainmenu ul li .mega-menu .mega-left span { + width: 33.33%; +} +.mainmenu ul li .mega-menu .mega-right { + float: right; + width: 25%; +} +.mainmenu ul li .mega-menu .mega-right span { + width: 100%; +} +/*----------------------------------- +3. slider-area +-------------------------------------*/ +.slider-wrap{margin-bottom:35px} +/*----------------------------------- +4. banner-area +-------------------------------------*/ +.banner-area { + margin-bottom: 50px; +} +.single-banner{} +.single-banner a{display: block; +float: left; +overflow: hidden; +padding: 0; +position: relative; +text-align: center; +width: 100%;} +.single-banner a:before{animation-duration: 0.5s; +background: rgba(0, 0, 0, 0.3) none repeat scroll 0 0; +content: ""; +display: block; +height: 100%; +left: 50%; +opacity: 0; +pointer-events: none; +position: absolute; +top: 0; +transition: all 0.5s ease 0s; +width: 0;} +.single-banner a:hover:before{left: 0; +opacity: 1; +width: 100%;} +.single-banner a:after{animation-duration: 0.5s; +background: rgba(255, 255, 255, 0.3) none repeat scroll 0 0; +border-radius: 100%; +bottom: 0; +box-shadow: 0 0 0 8px rgba(246, 249, 250, 0.42); +color: #fff; +content: ""; +display: block; +font-family: FontAwesome; +font-size: 30px; +height: 60px; +left: 0; +line-height: 60px; +margin: auto; +opacity: 0; +position: absolute; +right: 0; +text-align: center; +top: 0; +transform: scale(3); +transition: all 0.5s ease 0s; +visibility: hidden; +width: 60px; +z-index: 2;} +.single-banner a:hover:after{opacity: 1; +transform: scale(1); +visibility: visible;} +.single-banner a{} +.single-banner a{} +.single-banner a img{} +.single-banner { + overflow: hidden; +} +.banner-margin { + margin-bottom: 20px; +} +/*----------------------------------- +5. features-area +-------------------------------------*/ +.features-area {} +.pad-60 { + padding: 60px 0; + border-top: 1px solid #e1e1e1; +} +.section-heading { + font-weight: bold; + margin: 0 0 25px; + position: relative; + text-align: center; +} +.section-heading h1 { + display: inline-block; + font-size: 20px; + font-weight: bold; + margin-bottom: 0; + padding: 0 15px; + text-transform: uppercase; + width: auto; + color: #444; +} +.title-icon span { + font-size: 22px; + position: relative; +} +.title-icon span::before, .title-icon span::after { + border-top: 4px double #666; + bottom: 10px; + content: ""; + height: 1px; + left: -85px; + position: absolute; + width: 80px; +} +.title-icon span::after { + left: auto; + right: -85px; +} +.single-product{overflow: hidden;position:relative} +.product-img{position:relative;display:block} +.product-img a{display: block} +.product-img a img{ +transition: all 0.3s ease 0s; +width: 100%;} +.product-img a img.primary-image{} +.product-img a img.secondary-image{left: 0; +opacity: 0; +position: absolute; +top: 0; +z-index: 1;} +.actions{position: absolute; +text-align: center; +top: 50%; +width: 100%;opacity:0;transition: all 0.3s ease 0s;} +.action-buttons{} +.add-to-cart { + display: block; + margin-bottom: 15px; +} +.add-to-cart a { + color: #fff; + display: inline-block; + font-size: 14px; + font-weight: 700; + padding: 8px 32px; + text-transform: uppercase; + border: 2px solid #fff; +} +.add-to-links{display: inline-block;} +.add-to-wishlist,.compare-button,.quickviewbtn{display:inline-block} +.add-to-wishlist a,.compare-button a,.quickviewbtn a{display: inline-block; +margin: 0 8px;} +.add-to-wishlist a i,.compare-button a i,.quickviewbtn a i{border: 2px solid #fff; +color: #fff; +font-size: 14px; +height: 40px; +padding-top: 11px; +transition: all 0.3s ease 0s; +width: 40px;} +.compare-button{} +.compare-button a{} +.compare-button a i{} +.quickviewbtn{display: inline-block;} +.quickviewbtn a{} +.quickviewbtn a i{} +.action-buttons a:hover i, .add-to-cart a:hover { + border-color: #ec4445; + color: #fff; + background: #ec4445; +} +.single-product:hover .product-img a img.secondary-image{opacity:1} +.product-img>a:before{ background-color: #000; + content: ""; + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + transition: all 0.3s ease 0s; + width: 100%;} +.single-product:hover .product-img a:before{opacity:.4;z-index:9} +.single-product:hover .actions{opacity:1;top:40%;z-index:9} +.product-content{} +h2.product-name{font-size: 15px; +font-weight: normal; +margin: 15px 0 10px;} +.product-name > a { + color: #444; +} +.pro-rating { + float: right; +} +.pro-rating a{} +.pro-rating a i{} +.price-box { + color: #ec4445; + font-family: Montserrat,Arial,Helvetica,sans-serif; + font-size: 18px; + font-weight: 400; + float: left; +} +span.new-price{} +span.old-price{color: #909295; +font-size: 15px; +margin-left: 10px; +text-decoration: line-through;} +span.sale-text{background: #ec4445 none repeat scroll 0 0; +border-radius: 0; +box-shadow: none; +color: #fff; +font-family: Montserrat,Arial,Helvetica,sans-serif; +font-size: 13px; +font-weight: normal; +height: 26px; +left: 0; +line-height: 26px; +min-height: 26px; +padding: 0 15px; +position: absolute; +text-align: center; +text-shadow: none; +text-transform: capitalize; +top: 0; +z-index: 10;} +ul.product-nav { + margin-bottom: 25px; + text-align: center; +} +ul.product-nav li { + display: inline-block; + margin: 0 10px; + position: relative; +} +ul.product-nav li a { + color: #666; + font-size: 15px; + font-weight: 700; + text-transform: uppercase; +} +ul.product-nav li.active a, ul.product-nav li a:hover { + color: #fe4847; +} +ul.product-nav li::before { + background: #666 none repeat scroll 0 0; + content: ""; + height: 13px; + position: absolute; + right: -12px; + top: 3px; + width: 2px; +} +ul.product-nav li:last-child::before { + display: none; +} +.features-curosel .col-lg-3,.new-pro-curosel .col-lg-3{width:100%} +.owl-theme .owl-controls .owl-buttons div { + background: rgba(0, 0, 0, 0) none repeat scroll 0 0; + border: 1px solid #e8e8e9; + border-radius: 0; + color: #252525; + display: inline-block; + font-size: 25px; + height: 40px; + left: -35px; + margin: 0; + opacity: 0; + padding: 6px 0 0; + position: absolute; + text-align: center; + top: 50%; + width: 40px; + transition: all 0.3s ease 0s; + margin-top:-50px; + visibility:hidden; +} +.owl-theme .owl-controls .owl-buttons div.owl-next{ + left:auto;right:-35px +} +.owl-carousel:hover.owl-theme .owl-controls .owl-buttons div{ + opacity:1;visibility:visible;z-index: 9; +} +.owl-theme .owl-controls .owl-buttons div:hover{ + border-color:#EC4445;color:#EC4445; +} +.owl-theme .owl-controls { + margin-top: 0; + text-align: center; +} +/*----------------------------------- +6. new-product-area +-------------------------------------*/ +.new-product-area {} +.new-product-area .section-heading { + margin: 0 0 35px; +} +/*----------------------------------- +7. banner-2-area +-------------------------------------*/ +.banner-2-area{} +.banner-bottom{margin-top:15px} +/*----------------------------------- +8. top-sells-area +-------------------------------------*/ +.top-sells-area {} +.top-sells-area .section-heading { + margin-bottom: 35px; +} +.top-sells-area .single-product{} +.top-sells-area .product-img,.new-product-curosel .product-img,.new-category-product .product-img { + width: 40%; + float: left; +} +.top-sells-area .product-content,.new-product-curosel .product-content,.new-category-product .product-content { + float: right; + width: 60%; + padding-left: 13px; +} +.top-sells-area h2.product-name, .new-product-curosel h2.product-name, .new-category-product h2.product-name { + font-size: 13px; + margin: 0; +} +.top-sells-area .pro-rating, .new-product-curosel .pro-rating, .new-category-product .pro-rating { + float: none; + padding: 5px 0; +} +.top-sells-area .price-box, .new-product-curosel .price-box,.new-category-product .price-box { + float: none; + font-size: 16px; + margin-top: 5px; +} +.top-sells-area span.old-price,.new-product-curosel span.old-price, .new-category-product span.old-price { + font-size: 14px; +} +.top-sells-area .actions, .new-product-curosel .actions,.new-category-product .actions { + opacity: 0; + position: inherit; + top: inherit; + width: 100%; +} +.top-sells-area .add-to-cart,.new-product-curosel .add-to-cart,.new-category-product .add-to-cart { + margin-bottom: 0; +} +.top-sells-area .add-to-cart a,.new-product-curosel .add-to-cart a,.new-category-product .add-to-cart a { + background: #252525 none repeat scroll 0 0; + border-bottom: 0 none; + border-top: 0 none; + font-size: 12px; + padding: 5px 11px; +} +.top-sells-area .add-to-cart a:hover,.new-product-curosel .add-to-cart a:hover,.new-category-product .add-to-cart a:hover{background:#EC4445;color:#fff} +.top-sells-area .action-buttons { + margin-top: 10px; + text-align: left; +} +.top-sells-area .product-img::before, .new-product-curosel .product-img::before,.new-category-product .product-img::before { + display: none; +} +.first-sells{margin-bottom:40px} +.top-sells-curosel .col-lg-3{width:100%} +.top-sells-curosel.owl-theme .owl-controls .owl-buttons div { + margin: -20px 0 0; +} +/*----------------------------------- +9. latest-blog-area +-------------------------------------*/ +.latest-blog-area{} +.latest-blog-area .section-heading { + margin-bottom: 35px; +} +.latest-blog-img { + overflow: hidden; +} +.latest-blog-img a { + display: block; + position: relative; +} +.latest-blog-img a::before, .latest-blog-img a::after { + background: rgba(255, 255, 255, 0.3) none repeat scroll 0 0; + content: ""; + height: 100%; + position: absolute; + transition: all 0.5s ease 0s; + width: 100%; + z-index: 8; +} +.latest-blog-img a::before { + left: -100%; + top: -100%; +} +.latest-blog-img a::after { + bottom: -100%; + right: -100%; +} +.single-latest-blog:hover a::before { + left: 0; + top: 0; +} +.single-latest-blog:hover a::after { + bottom: 0; + right: 0; +} +.latest-blog-content > h3 { + font-size: 16px; + text-transform: uppercase; +} +.latest-blog-content h3 a { + color: #444; +} +.post-category > a { + color: #EB3B60; +} +.meta-border { + padding: 0 6px; +} +.latest-blog-content > p { + color: #444; + font-size: 14px; + margin: 0; +} +.latest-blog-content { + padding-top: 15px; +} +.meta { + margin-bottom: 10px; +} +/*----------------------------------- +10. brand-area +-------------------------------------*/ +.brand-area{} +.brand-area .section-heading{margin-bottom: 35px;} +.brand-curosel{} +.brand-curosel .col-md-2{width:100%} +.single-brand{} +.single-brand a { + border: 1px solid #e8e8e9; + display: block; + margin-bottom: 5px; + padding: 3px; +} +.single-brand a img{} +.single-brand a:hover{border-color: #ec4445;} +.brand-curosel.owl-theme .owl-controls .owl-buttons div { + margin: -20px 0 0; +} +/*--------------------------- +11. footer +----------------------------- */ +.footer-top-area { + background: #2d2d2d none repeat scroll 0 0; + padding: 50px 0; +} +.footer-widget{} +.footer-widget h3 { + border-bottom: 1px solid #5b5b5b; + color: #fff; + display: block; + font-size: 14px; + font-weight: 700; + padding-bottom: 15px; + text-transform: uppercase; + line-height: 11px; +} +ul.footer-menu{} +ul.footer-menu li {} +ul.footer-menu li a { + color: #d5d5d5; + display: block; + font-size: 13px; + font-weight: 400; + line-height: 40px; + border-bottom: 1px solid #5b5b5b; +} +ul.footer-menu li:last-child a{padding-bottom:0;} +ul.footer-menu li a:hover{color:#EB3B60} +ul.footer-menu li a::before { + content: "\f101"; + display: inline-block; + font-family: fontawesome; + margin-right: 8px; + position: relative; + top: 0; +} +.footer-widget img{} +.footer-widget p { + color: #d5d5d5; + font-size: 13px; + font-weight: 500; + line-height: 25px; + margin-top: 22px; +} +.widget-icon{} +.widget-icon a { + border: 1px solid #d5d5d5; + color: #d5d5d5; + display: inline-block; + font-size: 14px; + height: 32px; + line-height: 30px; + position: relative; + text-align: center; + width: 32px; + margin-right: 8px; +} +.widget-icon a:hover{background:#EB3B60;color:#fff;border-color:#EB3B60} +.widget-icon a i{} +ul.footer-contact{} +ul.footer-contact li { + clear: both; + display: inline-block; + margin-bottom: 15px; + padding-bottom: 15px; + color: #d5d5d5; +} +ul.footer-contact li i { + border: 1px solid #d5d5d5; + border-radius: 0; + color: #d5d5d5; + float: left; + font-size: 16px; + height: 34px; + line-height: 30px; + margin-right: 15px; + text-align: center; + width: 32px; +} +.footer-bottom-area { + background: #212121; + padding: 20px 0; +} +.copyright { + margin-top: 4px; +} +.copyright p { + color: #d5d5d5; + margin: 0; +} +.copyright p a{color:#EB3B60} +.copyright p a:hover{text-decoration:underline} +.payment-img { + float: right; +} +.payment-img img{} + +#scrollUp { + background: #fff none repeat scroll 0 0; + border: 1px solid #252525; + border-radius: 0; + bottom: 20px; + color: #252525; + font-size: 20px; + height: 40px; + line-height: 0; + right: 20px; + text-align: center; + text-decoration: none; + width: 40px; +} +#scrollUp i { + display: block; + padding-top: 8px; +} +#scrollUp:hover{background:#EC4445;border:1px solid #EC4445;color:#fff} +/* ==================== +12. blog +=======================*/ +.breadcrumb-area { + padding: 20px 0; +} +.breadcrumb { + background: rgba(0, 0, 0, 0) none repeat scroll 0 0; + border-radius: 0; + color: #ec4445; + display: block; + float: left; + font-size: 12px; + margin: 0; + padding: 0; + width: 100%; +} +.breadcrumb ul{} +.breadcrumb ul li{display:inline-block} +.breadcrumb ul li a{color: #777; +display: inline-block; +font-weight: bold;} +.breadcrumb ul li i{color: #777; +margin: 0 10px;} +.breadcrumb ul li a:hover{color: #ec4445;} +.post-slider.owl-theme .owl-controls .owl-buttons div.owl-next{left:auto;right:10px} +.post-thumbnail{float: left; +padding-right: 30px; +position: relative; +width: 45%;} +.post-thumbnail{} +.post-thumbnail a{display: block; +overflow: hidden; +position: relative; +text-align: center;} +.post-thumbnail a:before{animation-duration: 0.5s; +background: rgba(0, 0, 0, 0.3) none repeat scroll 0 0; +content: ""; +display: block; +height: 100%; +left: 0; +opacity: 0; +position: absolute; +top: 0; +transform: translateX(-100%); +transition: all 0.5s ease 0s; +width: 50%; +z-index: 1;} +.post-thumbnail a:after{animation-duration: 0.5s; +background: rgba(0, 0, 0, 0.3) none repeat scroll 0 0; +content: ""; +display: block; +height: 100%; +opacity: 0; +position: absolute; +right: 0; +top: 0; +transform: translateX(100%); +transition: all 0.5s ease 0s; +width: 50%; +z-index: 1;} +.post-thumbnail a:hover:before{opacity: 1; +transform: translateX(0px); +visibility: visible;} +.post-thumbnail a:hover:after{opacity: 1; +transform: translateX(0px); +visibility: visible;} +.post-information { + float: left; + width: 55%; +} +.post-information h2{font-size: 15px; +margin: 0 0 10px; +padding: 0;} +.post-information h1 a { + color: #252525; + text-transform: uppercase; +} +.post-information h1 a:hover{color: #ec4445;} +.small-meta { + margin-bottom: 15px; +} +.small-meta:after { + border-bottom: 2px solid #e8e8e9; + content: ""; + display: block; + margin: 10px 0 0; + width: 70px; +} +.small-meta span i{margin-right: 5px;} +.small-meta span time{} +.small-meta a{margin-left: 7px;} +.small-meta a i{} +a.readmore{background: #252525 none repeat scroll 0 0; +color: #fff; +display: inline-block; +padding: 5px 10px; +text-transform: capitalize;} +a.readmore:before { + content: ""; + display: inline-block; + float: right; + font-family: FontAwesome; + margin-left: 5px; +} +a.readmore:hover{background:#EC4445} +.blog-post-wrapper { + border-bottom: 1px solid #e8e8e9; + float: left; + margin: 0 0 40px; + overflow: hidden; + padding: 0 0 40px; + width: 100%; +} +audio.audio-format{width:100%} +.player{margin-bottom:15px} +.pagination { + float: right; + margin: 0; +} +.pagination ul{} +.pagination ul li{display: inline-block;} +.pagination ul li.active{background: #ec4445 none repeat scroll 0 0; +border: 1px solid transparent; +color: #fff; +font-weight: bold; +height: 25px; +line-height: 25px; +margin-right: 6px; +padding: 0; +text-align: center; +width: 25px;} +.pagination ul li a{background: #fff none repeat scroll 0 0; +border: 1px solid #e8e8e9; +color: #777; +display: inline-block; +font-weight: bold; +height: 25px; +line-height: 25px; +margin-right: 6px; +padding: 0; +text-align: center; +width: 25px;} +.pagination ul li a:hover{border: 1px solid #ec4445; +color: #ec4445;} + +.archive-header { + border-bottom: 1px solid #e8e8e9; + margin-bottom: 30px; +} +h1.archive-title { + font-size: 22px; + margin: 0 0 10px; + padding: 0; + text-transform: uppercase; +} +h1.archive-title span { + color: #ec4445; +} +h1.archive-title span a{} +/*----------------------------------- +15.3 blog-post +-------------------------------------*/ +.single-blog{} +.single-blog .post-thumbnail { + padding-right: 0; + width: 100%; +} +.single-blog .post-information h2 { + text-transform: uppercase; + margin: 30px 0 20px; +} +.single-blog .post-information { + width: 100%; +} +.single-blog .entry-meta{border: 1px solid #e5e5e5; +color: #909295; +float: left; +margin: 0 0 20px; +padding: 10px 15px 10px 0; +width: 100%;} +.single-blog .entry-meta.entry-meta i { + margin: 0 5px 0 15px; +} +.single-blog .entry-content{} +.single-blog .entry-content p{margin-bottom:10px} +.single-blog .entry-content blockquote { + background: #ededed none repeat scroll 0 0; + border-left: 5px solid #ec4445; + font-size: 14px; + font-style: italic; + margin: 20px 40px; + padding: 20px; +} +.single-blog .social-sharing { + border: 1px solid #e8e8e9; + float: left; + margin: 30px 0; + padding: 10px; + width: 100%; +} +.single-blog .social-sharing h3{background: rgba(0, 0, 0, 0) none repeat scroll 0 0; +color: #909295; +float: left; +font-size: 16px; +line-height: 30px; +margin: 0 20px 0 0; +text-transform: none; +width: auto;} +.single-blog .social-sharing .sharing-icon{float: right;} +.single-blog .social-sharing .sharing-icon a{display:inline-block} +.single-blog .social-sharing .sharing-icon a i{border: 1px solid #e8e8e9; +color: #909295; +font-size: 18px; +height: 35px; +line-height: 35px; +text-align: center; +transition: all 0.3s ease 0s; +width: 35px;} +.single-blog .social-sharing .sharing-icon a i{} +.single-blog .social-sharing .sharing-icon a i.fa-facebook:hover { + background: #3b579d none repeat scroll 0 0; + border: 1px solid #3b579d; +} +.single-blog .social-sharing .sharing-icon a i.fa-twitter:hover { + background: #3acaff; + border: 1px solid #3acaff; +} +.single-blog .social-sharing .sharing-icon a i.fa-pinterest:hover { + background: #CB2027; + border: 1px solid #CB2027; +} +.single-blog .social-sharing .sharing-icon a i.fa-google-plus:hover { + background: #D11717; + border: 1px solid #D11717; +} +.single-blog .social-sharing .sharing-icon a i.fa-linkedin:hover { + background: #0097BD; + border: 1px solid #0097BD; +} +.single-blog .social-sharing .sharing-icon a i:hover { + color:#fff; +} +.single-blog .author-avatar { + float: left; + margin-right: 10px; +} +.single-blog .author-description{} +.single-blog .author-description h2 { + font-size: 18px; + margin: 0; + padding: 0 0 5px; +} +.author-info { + background: #f5f5f5 none repeat scroll 0 0; + float: left; + margin: 0; + padding: 15px; + width: 100%; +} +.single-post-comments { + margin-bottom: 60px; + max-width: 650px; +} +.comments-area{} +.comments-heading{} +.comments-heading h3,h3.comment-reply-title { + border-bottom: 1px solid #e8e8e9; + font-size: 18px; + margin: 0 0 20px; + padding: 0 0 5px; + text-transform: uppercase; +} +.comments-list{} +.comments-list ul{} +.comments-list ul li{margin-bottom: 25px;} +.comments-details{} +.comments-list-img{float: left; +margin-right: 15px;} +.comments-list-img img{} +.comments-content-wrap{border: 1px solid #ddd; +color: #42414f; +font-size: 12px; +line-height: 1; +margin: 0 0 15px 63px; +padding: 10px; +position: relative;} +.comments-content-wrap:before{background: #fff none repeat scroll 0 0; +border-bottom: 1px solid #ececec; +border-left: 1px solid #ececec; +content: ""; +display: block; +height: 10px; +left: -5px; +position: absolute; +top: 10px; +transform: rotate(45deg); +width: 10px;} +.comments-content-wrap span{} +.comments-content-wrap span b{margin-right:5px} +.comments-content-wrap span a{} +.comments-content-wrap span a:hover{} +span.post-time{margin-right:5px} +.comments-content-wrap p { + color: #909295; + line-height: 18px; + margin-bottom: 5px; + margin-top: 15px; +} +li.threaded-comments{margin-left:50px} +.comment-respond { + margin-top: 60px; +} +h3.comment-reply-title{} +span.email-notes{color: #42414f; +display: block; +font-size: 12px; +margin-bottom: 10px;} +.comment-respond p{margin-bottom: 5px;} +.comment-respond input[type=text],.comment-respond input[type=email]{background: #fff none repeat scroll 0 0; +border: 1px solid #e5e5e5; +border-radius: 0; +height: 32px; +margin-bottom: 15px; +padding: 0 0 0 10px; +width: 100%;} +.comment-respond textarea#message{background: #fff none repeat scroll 0 0; +border: 1px solid #e5e5e5; +border-radius: 0; +max-width: 100%; +padding: 10px;height: 130px; +width: 100%;} +.comment-respond input[type="submit"] { + background: #252525 none repeat scroll 0 0; + border: medium none; + border-radius: 0; + box-shadow: none; + color: #fff; + display: inline-block; + font-family: Montserrat,Arial,Helvetica,sans-serif; + font-size: 12px; + font-weight: 700; + height: 40px; + line-height: 40px; + margin-top: 20px; + padding: 0 15px; + text-shadow: none; + text-transform: uppercase; + transition: all 0.3s ease 0s; + white-space: nowrap; +} +.comment-respond input[type=submit]:hover{background:#EC4445} +nav.nav-single { + border-bottom: 1px solid #e8e8e9; + border-top: 1px solid #e8e8e9; + float: left; + font-size: 13px; + padding: 10px 0; + width: 100%; +} +nav.nav-single .nav-previous { + float: left; +} +nav.nav-single .nav-next { + float: right; +} +.post-slider a img { + width: 100%; +} +/*=========================== +13. shop page +============================= */ +.shop-header-area { + margin: 50px 0 70px; + text-align: center; + text-transform: uppercase; +} +.shop-header-title{} +.shop-header-title h1 { + font-size: 70px; +} +.shop-header-title ul { + border-bottom: 2px solid #252525; + display: inline-block; +} +.shop-header-title ul li:first-child{padding:0} +.shop-header-title ul li { + display: inline-block; + padding-left: 40px; +} +.shop-header-title ul li a { + display: block; + font-family: Montserrat,Arial,Helvetica,sans-serif; + font-size: 12px; + font-weight: 700; + padding-bottom: 6px; +} +.shop-header-title ul li a:hover{} +.shop-area { + margin-bottom: 40px; +} +span.count{float:right} +.price_filter { + padding-top: 13px; +} +.price_filter .ui-slider.ui-slider-horizontal.ui-widget.ui-widget-content.ui-corner-all { + background: #eeeeee none repeat scroll 0 0; + border: medium none; + border-radius: 0; + height: 9px; + margin-bottom: 30px; + margin-left: auto; +} +.price_filter .ui-slider-handle.ui-state-default.ui-corner-all { +background: #fff none repeat scroll 0 0; +border: 3px solid #EC4445; +border-radius: 50%; +height: 21px; +margin-top: -2px; +width: 21px; +} +.price_filter .ui-slider-range { + background: #EC4445; +} +.price_slider_amount > input[type="text"] { +border-color: #cccccc #ddd #cccccc #cccccc; +border-image: none; +border-style: solid; +border-width: 1px; +font-weight: bold; +height: 40px; +letter-spacing: 3px; +margin-left: 28px; +text-align: center; +width: 130px; +float: right; +} +.price_slider_amount > input[type="submit"] { +background: #252525; +border-color: #cccccc #cccccc #cccccc -moz-use-text-color; +border-image: none; +border-style: solid solid solid none; +border-width: 0; +color: #fff; +float: left; +font-weight: bold; +height: 40px; +letter-spacing: 1px; +text-transform: uppercase; +transition: all 400ms ease-out 0s; +width: 85px; +} +.price_slider_amount > input[type=submit]:hover { +background: #EC4445; +} +.shop-filter h2.shop-sidebar-title { + margin: 0 0 20px; +} +.top-product-widget{} +.top-product-widget .product-img { + float: left; + width: 30%; +} +.top-product-widget .product-img > a::before { + display: none; +} +.top-product-widget .product-content { + float: left; + padding-left: 10px; + width: 70%; +} +.top-product-widget h2.product-name { + font-size: 13px; + margin: 0 0 10px; +} +.top-product-widget .price-box { + font-size: 15px; +} +.top-product-widget span.old-price { + font-size: 13px; +} +.top-product-widget li{ + border-bottom: 1px dashed #e8e8e9; + margin-bottom: 20px; + padding: 0 0 20px; +} +.top-product-widget li:last-child{ + border-bottom: 0; + margin-bottom: 0; + padding:0; +} +.widget-search{} +.widget{float: left; +margin: 0 0 25px; +padding: 0 0 25px; +width: 100%;} +.widget:last-child{margin:0;padding:0} +h3.sidebar-title{border-bottom: 1px solid #e8e8e9; +margin: 0 0 20px; +padding: 0 0 5px;font-size: 14px; +text-transform: uppercase;} +.widget-form{background: #fff none repeat scroll 0 0; +border: 1px solid #e8e8e9; +color: #909295; +float: left; +font-family: Open Sans,Arial,Helvetica,sans-serif; +width: 100%;} +.widget-form input { + border: medium none; + float: left; + font-style: italic; + height: 34px; + padding-left: 10px; + width: 80%; +} +.widget-form button { + background: rgba(0, 0, 0, 0) none repeat scroll 0 0; + border: medium none; + float: right; + height: 34px; + padding: 0 12px; + text-align: right; + width: 20%; +} +.widget-categories{} +ul.sidebar-menu{} +ul.sidebar-menu li{border-bottom: 1px solid #e8e8e9; +float: left; +font-size: 12px; +line-height: 40px; +list-style: outside none none; +margin: 0; +padding: 0; +width: 100%;} +ul.sidebar-menu li a{text-transform: uppercase;} +ul.sidebar-menu li a::before { + color: #909295; + content: ""; + display: inline-block; + font-family: FontAwesome; + margin-right: 10px; +} +ul.sidebar-menu li a:hover{} +.widget-recent{} +.widget-recent ul{} +.widget-recent ul li{ +border-color: #e8e8e9; +border-image: none; +border-style: solid none none; +border-width: 1px medium medium; +line-height: 1.35; +margin: 15px 0 0; +padding: 15px 0 0;} +.widget-recent ul li:first-child{border: medium none; +margin: 0; +padding: 0;} +.widget-recent ul li .post-wrapper { + overflow: hidden; +} +.widget-recent ul li .post-sidebar-img { + float: left; + margin-right: 5px; + width: 60px; +} +.widget-recent ul li .post-sidebar-img a { + border: 2px solid transparent; + display: block; +} +.widget-recent ul li .post-sidebar-img a:hover{border: 2px solid #ec4445; +padding-left: 0;} +.widget-recent ul li .post-sidebar-img a img{} +.widget-recent ul li .post-sidebar-info{} +.widget-recent ul li .post-sidebar-info h3 { + font-size: 13px; + font-weight: normal; + margin: 0 0 5px; +} +.widget-recent ul li .post-sidebar-info h3 a{text-transform:uppercase} +.widget-recent ul li .r-post-date{} +.widget-tags{} +.widget-tags ul{} +.widget-tags ul li{display: inline-block;} +.widget-tags ul li a{border: 1px solid #ddd; +display: block; +font-size: 14px; +margin-bottom: 5px; +padding: 5px 7px; +text-transform: capitalize;} +.widget-tags ul li a:hover{border-color:#ec4445} +.toolbar { + margin-bottom: 30px; + overflow: hidden; +} +.view-mode{float: left;} +.view-mode a.active{background: #ec4445 none repeat scroll 0 0; +color: #fff;} +.view-mode a{background: #909295 none repeat scroll 0 0; +color: #fff; +float: left; +font-size: 14px; +height: 29px; +line-height: 29px; +margin-right: 10px; +text-align: center; +width: 29px;} +.view-mode a i{} +.show-result{} +.show-result p{color: #252525; +float: left; +height: 28px; +line-height: 28px; +margin: 0 0 0 10px; +padding: 0;} +.toolbar-form{float: right; +margin: 0;} +.toolbar-form select{border: 1px solid #e8e8e9; +color: #252525; +font-family: Montserrat,Arial,Helvetica,sans-serif; +height: 28px; +line-height: 28px; +margin: 0 0 0 25px; +padding: 0 10px; +text-transform: uppercase;} +.grid-view{} +.grid-view .single-product{margin-bottom:40px} +.grid-view .single-product .product-content { + padding-bottom: 25px; +} +.shop-pagination{border-top: 1px solid #e8e8e9;} +.shop-area .pagination { + margin: 12px 0 0; +} +.list-view{} +.product-list-wrapper{} +.product-list-wrapper h2.product-name { + font-size: 18px; +} +.product-list-wrapper .pro-rating { + float: none; + margin-bottom: 10px; +} +.product-list-wrapper .price-box { + float: none; + font-size: 18px; +} +.product-list-wrapper .actions { + opacity: 1; + position: inherit; + text-align: left; + top: inherit; +} +.product-list-wrapper .actions { + opacity: 1; + overflow: hidden; + position: inherit; + text-align: left; + top: inherit; +} +.product-list-wrapper .add-to-cart { + float: left; + margin-bottom: 0; +} +.product-list-wrapper .add-to-cart a { + background: #252525 none repeat scroll 0 0; + border: 0 none; + line-height: 40px; + padding: 0 40px; +} +.product-list-wrapper .add-to-wishlist a i,.product-list-wrapper .compare-button a i,.product-list-wrapper .quickviewbtn a i { + background: #252525 none repeat scroll 0 0; + border: 0 none; + line-height: 40px; + text-align: center; + padding:0; +} +.product-list-wrapper .add-to-links { + margin-left: 15px; +} +.product-list-wrapper .add-to-links { + float: left; +} +.product-list-wrapper .add-to-wishlist { + float: left; +} +.product-list-wrapper .add-to-wishlist a, .product-list-wrapper .compare-button a, .product-list-wrapper .quickviewbtn a { + margin: 0; +} +.product-desc { + margin-bottom: 30px; + margin-top: 20px; +} +.product-list-wrapper .add-to-wishlist a i:hover, .product-list-wrapper .compare-button a i:hover, .product-list-wrapper .quickviewbtn a i:hover { + background:#EC4445!important;color:#fff +} +.product-list-wrapper .actions a:hover{background:#EC4445!important;color:#fff} +.product-list-wrapper .single-product{margin-bottom:30px} +.shop-category-area { + background: rgba(0, 0, 0, 0) url("img/shop/1.jpg") no-repeat scroll center center / cover ; + padding: 60px 0; +} +.shop-category-title { + text-align: center; +} +.shop-category-title h3 { + color: #fff; + display: inline-block; + font-size: 70px; + margin-bottom: 0; + position: relative; + text-transform: uppercase; +} +.shop-category-title h3:before{border-bottom: 4px double #fff; +bottom: 0; +content: ""; +display: block; +left: -15%; +position: absolute; +width: 130%;} +/*=========================== +14. account page +============================= */ +.entry-header-area{padding: 30px 0;} +.entry-header{} +h1.entry-title{font-size: 20px; +margin: 0; +text-transform: uppercase;} +.my-account-area { + padding-bottom: 70px; +} +.form-fields{border-color: #e8e8e9 #e8e8e9 -moz-use-text-color; +border-style: solid solid none; +border-width: 1px 1px medium; +float: left; +padding: 20px 25px; +width: 100%;} +.form-fields h2{border-bottom: 1px solid #e8e8e9; +font-size: 18px; +margin: 0 0 15px; +padding: 0 0 5px; +text-transform: uppercase;} +.form-fields p{} +.form-fields p label { + display: block; + font-family: Montserrat,Arial,Helvetica,sans-serif; + font-weight: 400; + margin: 0 0 5px; +} +.form-fields p label span.required{} +.form-fields p input{background: #fff none repeat scroll 0 0; +border: 1px solid #e8e8e9; +border-radius: 0; +height: 32px; +width: 100%; +padding: 0 0 0 10px;} +.form-action{background: #f5f5f5 none repeat scroll 0 0; +border-color: #e8e8e9 #e8e8e9; +border-style: none solid solid; +border-width: medium 1px 1px; +float: left; +padding: 15px 10px; +width: 100%;} +.form-action p.lost_password{float: left; +line-height: 36px; +margin: 0;} +.form-action input[type="submit"] { + background: #252525 none repeat scroll 0 0; + border: medium none; + border-radius: 0; + box-shadow: none; + color: #fff; + display: inline-block; + float: right; + font-family: Montserrat,Arial,Helvetica,sans-serif; + font-size: 12px; + font-weight: bold; + height: 40px; + line-height: 40px; + padding: 0 15px; + text-shadow: none; + text-transform: uppercase; + transition: all 0.3s ease 0s; +} +.form-action input[type="submit"]:hover{background:#EC4445} +.form-action label{float: right; +font-weight: normal; +line-height: 36px; +margin: 0 20px 0 0;} +.form-action label input{margin-right: 3px; +margin-top: 0; +position: relative; +top: 2px;} +/*=========================== +15. order page +============================= */ +.wishlist-area{} +.wishlist-content{} +.wishlist-title{} +.wishlist-title h2{} +.wishlist-table{} +.wishlist-table table { + background: #fff none repeat scroll 0 0; + border-color: #e8e8e9; + border-radius: 0; + border-style: solid; + border-width: 1px 0 0 1px; + margin: 20px 0 50px; + width: 100%; +} +.wishlist-table table{} +.wishlist-table table th { + font-weight: 600; +} +.wishlist-table table th, .wishlist-table table td { + border-bottom: 1px solid #e5e5e5; + border-right: 1px solid #e5e5e5; + font-size: 14px; + padding: 15px 10px; + text-align: center; +} +.wishlist-table table .product-remove { + padding: 0 15px; + width: 20px; +} +.wishlist-table table .product-remove > a { + font-size: 25px; +} +.wishlist-table table .product-thumbnail { + width: 150px; +} +.wishlist-table table td.product-price .amount { + font-weight: 700; +} +.wishlist-table table .wishlist-in-stock { + color: #ec4445; +} +.wishlist-table table .product-add-to-cart > a { + background: #000 none repeat scroll 0 0; + color: #fff; + display: block; + font-weight: 700; + padding: 10px 56px; + text-transform: uppercase; + width: 260px; +} +.wishlist-table table .product-add-to-cart > a:hover{background:#EC4445} +.wishlist-table table .product-add-to-cart { + width: 240px; +} +.wishlist-table table +.wishlist-table table +.wishlist-share{} +h3.wishlist-share-title{} +.wishlist-share { + margin-bottom: 35px; + margin-top: 20px; +} +.wishlist-share ul{} +.wishlist-share ul li { + display: inline-block; + height: 21px; + margin-left: 0; + margin-right: 0; +} +.wishlist-share ul li a{background-position: left top; +border: medium none; +display: inline-block; +height: 21px; +width: 21px;} +.wishlist-share ul li a.facebook{background: url("../../../image/user/home/icon/facebook.png") no-repeat scroll 0 0;} +.wishlist-share ul li a.twitter{background: url("../../../image/user/home/icon/twitter.png") no-repeat scroll 0 0;} +.wishlist-share ul li a.pinterest{background: url("../../../image/user/home/icon/pinterest.jpg") no-repeat scroll 0 0;} +.wishlist-share ul li a.googleplus{background: url("../../../image/user/home/icon/googleplus.jpg") no-repeat scroll 0 0;} +.wishlist-share ul li a.email{background: url("../../../image/user/home/icon/email.jpg") no-repeat scroll 0 0;} +.wishlist-share ul li a{} +.wishlist-share ul li a{} +.wishlist-share ul li a:hover{background-position: left bottom;} +/*=========================== +16. cart page +============================= */ +.cart-main-area { + margin-bottom: 60px; +} +.cart-title-area{padding-top: 30px;} +.car-header-title{} +.car-header-title h2{font-size: 20px; +margin: 0; +text-transform: uppercase;} +.table-content{} +.table-content table{background: #fff none repeat scroll 0 0; +border-color: #e5e5e5; +border-radius: 0; +border-style: solid; +border-width: 1px 0 0 1px; +margin: 0 0 50px; +text-align: center; +width: 100%;} +.table-content table{} +.table-content table th{border-top: medium none; +font-family: Montserrat,Arial,Helvetica,sans-serif; +font-weight: normal; +padding: 20px 10px; +text-align: center; +text-transform: uppercase; +vertical-align: middle; +white-space: nowrap;} +.table-content table th,.table-content table td{border-bottom: 1px solid #e5e5e5; +border-right: 1px solid #e5e5e5;} +.table-content table td{border-top: medium none; +padding: 20px 10px; +vertical-align: middle;font-size: 13px;} +.table-content table td input{background: #e5e5e5 none repeat scroll 0 0; +border: medium none; +border-radius: 3px; +color: #6f6f6f; +font-family: Montserrat,Arial,Helvetica,sans-serif; +font-size: 15px; +font-weight: normal; +height: 40px; +padding: 0 5px 0 10px; +width: 60px;} +.table-content table td.product-subtotal{font-size: 14px; +font-weight: bold; +width: 120px;} +.table-content table td.product-name a{font-size: 14px; +font-weight: 700; +margin-left: 10px; +color: #6f6f6f;} +.table-content table td.product-name{width: 270px;} +.table-content table td.product-thumbnail{width: 130px;} +.table-content table td.product-remove i{color: #919191; +display: inline-block; +font-size: 20px; +height: 40px; +line-height: 40px; +text-align: center; +width: 40px;} +.table-content table .product-price .amount { + font-size: 15px; + font-weight: 700; +} +.table-content table td.product-remove i:hover{color:#EC4445} +.table-content table td.product-quantity{width: 180px;} +.table-content table td.product-remove{width: 150px;} +.table-content table td.product-price{width: 130px;} +.table-content table td.product-name a:hover,.buttons-cart a:hover{color:#EC4445} +.buttons-cart{margin-bottom: 30px; +overflow: hidden;} +.buttons-cart input, .coupon input[type="submit"],.buttons-cart a,.coupon-info p.form-row input[type="submit"] { + background: #252525 none repeat scroll 0 0; + border: medium none; + border-radius: 0; + box-shadow: none; + color: #fff; + display: inline-block; + float: left; + font-family: Montserrat,Arial,Helvetica,sans-serif; + font-size: 12px; + font-weight: 700; + height: 40px; + line-height: 40px; + margin-right: 15px; + padding: 0 15px; + text-shadow: none; + text-transform: uppercase; + transition: all 0.3s ease 0s; + white-space: nowrap; +} +.buttons-cart input:hover,.coupon input[type=submit]:hover,.buttons-cart a:hover{background:#EC4445;color:#fff} +.buttons-cart a { + color: #fff; + float: left; + height: 40px; + line-height: 40px; +} +.coupon { + margin-bottom: 40px; + overflow: hidden; + padding-bottom: 20px; +} +.coupon h3{margin: 0 0 10px;font-size: 14px; +text-transform: uppercase;} +.coupon p{} +.coupon input[type=text]{border: 1px solid #e5e5e5; +float: left; +height: 40px; +margin: 0 6px 20px 0; +max-width: 100%; +padding: 0 0 0 10px; +width: 170px;} +.coupon input[type=submit]{} +.cart_totals{float: left; +text-align: right; +width: 100%;} +.cart_totals h2{border-bottom: 2px solid #333; +display: inline-block; +font-size: 30px; +margin: 0 0 35px; +text-transform: uppercase;} +.cart_totals table{border: medium none; +float: right; +margin: 0; +text-align: right;} +.cart_totals table th{border: medium none; +font-size: 14px; +font-weight: bold; +padding: 0 20px 12px 0; +text-align: right; +text-transform: uppercase; +vertical-align: top;} +.cart_totals table td{border: medium none; +padding: 0 0 12px; +vertical-align: top;} +.cart_totals table{} +.cart_totals table td .amount { + color: #ec4445; + float: right; + font-size: 13px; + font-weight: bold; + margin-left: 5px; + text-align: right; + text-transform: uppercase; +} +.cart_totals table td ul#shipping_method{list-style: outside none none; +margin: 0; +padding: 0;} +.cart_totals table td ul#shipping_method li{float: left; +margin: 0 0 10px; +padding: 0; +text-indent: 0; +width: 100%;} +.cart_totals table td ul#shipping_method li input{margin: 0; +position: relative; +top: 2px;} +.cart_totals table{} +a.shipping-calculator-button{font-weight: bold;color: #6f6f6f;} +a.shipping-calculator-button:hover{color:#83CBDC} +.cart_totals table tr.order-total th,.cart_totals table tr.order-total .amount{font-size: 20px; +text-transform: uppercase; +white-space: nowrap;} +.cart_totals table tr.order-total .amount{} +.wc-proceed-to-checkout a{background: #ec4445 none repeat scroll 0 0; +color: #fff; +display: inline-block; +font-size: 14px; +font-weight: 700; +height: 50px; +line-height: 50px; +margin-top: 20px; +padding: 0 30px; +text-transform: none;} +.wc-proceed-to-checkout a:hover{background: #E61719;} +/*=========================== +17. checkout page +============================= */ +.coupon-area{} +.coupon-accordion{} +.coupon-accordion h3 { + background-color: #f7f6f7; + border-top: 3px solid #1e85be; + color: #515151; + font-size: 12px; + font-weight: 300; + list-style: outside none none !important; + margin: 0 0 2em !important; + padding: 1em 2em 1em 3.5em !important; + position: relative; + width: auto; +} +.coupon-accordion h3::before { + color: #1e85be; + content: ""; + display: inline-block; + font-family: fontawesome; + left: 1.5em; + position: absolute; + top: 1em; +} +.coupon-accordion span { + cursor: pointer;color: #6f6f6f; +} +.coupon-accordion span:hover,p.lost-password a:hover{color: #EC4445;} +.coupon-content { + border: 1px solid #e5e5e5; + display: none; + margin-bottom: 20px; + padding: 20px; +} +.coupon-info{} +.coupon-info p.coupon-text{margin-bottom:15px} +.coupon-info p{margin-bottom:0} +.coupon-info p.form-row-first{} +.coupon-info p.form-row-first label,.coupon-info p.form-row-last label{display: block;} +.coupon-info p.form-row-first label span.required,.coupon-info p.form-row-last label span.required{ +color: red; +font-weight: 700;} +.coupon-info p.form-row-first input,.coupon-info p.form-row-last input{border: 1px solid #e5e5e5; +height: 36px; +margin: 0 0 14px; +max-width: 100%; +padding: 0 0 0 10px; +width: 370px;} +.coupon-info p.form-row-last{} +.coupon-info p.form-row input[type="submit"]:hover,p.checkout-coupon input[type="submit"]:hover{background:#EC4445 } +.coupon-info p.form-row input[type="checkbox"] { + position: relative; + top: 2px; +} +.form-row > label { + margin-top: 7px; +} +p.lost-password{ +margin-top: 15px;} +p.lost-password a{color: #6f6f6f;} +p.checkout-coupon{} +p.checkout-coupon input[type=text]{height: 36px; +padding-left: 10px; +width: 170px;} +p.checkout-coupon input[type=submit]{background: #333 none repeat scroll 0 0; +border: medium none; +border-radius: 0; +color: #fff; +height: 36px; +margin-left: 6px; +padding: 5px 10px;transition: all 0.3s ease 0s;} +.coupon-checkout-content { + margin-bottom: 30px; + display:none; +} +.checkout-area{} +.checkbox-form{} +.checkbox-form h3 { + border-bottom: 1px solid #e5e5e5; + font-size: 30px; + margin: 0 0 20px; + padding-bottom: 10px; + text-transform: uppercase; + width: 100%; +} +.country-select{margin-bottom: 30px; +position: relative;} +.country-select label,.checkout-form-list label{color: #333; +font-family: Montserrat,Arial,Helvetica,sans-serif; +margin: 0 0 5px;display:block} +.country-select label span.required,.checkout-form-list label span.required{color:red} +.country-select select{-moz-appearance: none; +border: 1px solid #ddd; +height: 32px; +padding-left: 10px; +width: 100%;} +.country-select::before { + content: ""; + display: inline-block; + font-family: fontawesome; + font-size: 20px; + position: absolute; + right: 12px; + top: 31px; +} +.checkout-form-list{margin-bottom: 30px;} +.checkout-form-list label{color: #333;} +.checkout-form-list label span.required{} +.checkout-form-list input[type=text],.checkout-form-list input[type=password],.checkout-form-list input[type=email]{background: #fff none repeat scroll 0 0; +border: 1px solid #e5e5e5; +border-radius: 0; +height: 42px; +width: 100%; +padding: 0 0 0 10px;} +.checkout-form-list{} +.checkout-form-list input[type=checkbox]{display: inline-block; +margin-right: 10px; +position: relative; +top: 2px;} +.create-acc label { + color: #333; + display: inline-block; +} +.checkout-form-list input[type=password]{} +.create-account{display:none} +.ship-different-title{} +.ship-different-title h3 label{display: inline-block; +margin-right: 20px;} +.ship-different-title input{} +.order-notes{} +.order-notes textarea{height: 90px; +padding: 15px;width:100%} +#ship-box-info{display:none} + +.your-order{background: #f2f2f2 none repeat scroll 0 0; +padding: 30px 40px 45px;} +.your-order h3{border-bottom: 1px solid #d8d8d8; +font-size: 30px; +margin: 0 0 20px; +padding-bottom: 10px; +text-transform: uppercase; +width: 100%;} +.your-order-table table{background: rgba(0, 0, 0, 0) none repeat scroll 0 0; +border: medium none; +width: 100%;} +.your-order-table table th, .your-order-table table td { + border-bottom: 1px solid #d8d8d8; + border-right: medium none; + font-size: 14px; + padding: 15px 0; + text-align: center; +} +.your-order-table table th{border-top: medium none; +font-family: Montserrat,Arial,Helvetica,sans-serif; +font-weight: normal; +text-align: center; +text-transform: uppercase; +vertical-align: middle; +white-space: nowrap; +width: 250px;} +.your-order-table table .shipping ul li input{position: relative; +top: 2px;} +.your-order-table table .shipping th{vertical-align: top;} +.your-order-table table .order-total th{border-bottom: medium none; +font-size: 18px;} +.your-order-table table .order-total td{border-bottom: medium none;} +.your-order-table table tr.cart_item:hover{background:#F9F9F9} +.your-order-table table tr.order-total td span { + color: #ec4445; + font-size: 20px; +} +.your-order-table table{} +.payment-method { + margin-top: 40px; +} +.payment-accordion{} +.payment-accordion h3{border-bottom: 0 none; +margin-bottom: 10px; +padding-bottom: 0;} +.payment-accordion h3 a{color: #6f6f6f; +font-size: 14px; +padding-left: 25px; +position: relative; +text-transform: capitalize;text-decoration:none} +.payment-accordion h3 a:before,.payment-accordion h3.open a:after{content: ""; +display: inline-block; +font-family: fontawesome; +font-size: 20px; +left: 0; +position: absolute; +top: -2px;} +.payment-accordion h3.open a:after{content: "\f056";} +.payment-content{} +.payment-content p{font-size: 13px;} +.payment-accordion img { + height: 60px; + margin-left: 15px; +} +.order-button-payment{} +.order-button-payment input { + background: #ec4445 none repeat scroll 0 0; + border: medium none; + color: #fff; + font-size: 17px; + font-weight: 600; + height: 50px; + margin: 20px 0 0; + padding: 0; + text-transform: uppercase; + transition: all 0.3s ease 0s; + width: 100%; +} +.order-button-payment input:hover{background:#E61719} +/*=========================== +18. product page +============================= */ +.product-simple-area{} +.single-product-image{} +.single-product-image a{} +.single-product-image a img{width:100%} +.single-product-info{} +.single-product-info{} +.single-product-info .product-nav { + float: right; +} +.single-product-info .product-nav a{} +.single-product-info .product-nav a i { + border: 1px solid #ddd; + font-size: 17px; + height: 20px; + text-align: center; + width: 20px; +} +.single-product-info .product-nav a i:hover{border-color:#EC4445;color:#EC4445} +.single-product-info h1.product_title{float: left; +font-size: 14px; +font-weight: bold; +text-transform: uppercase;} +.single-product-info .price-box { + clear: both; + float: none; + font-size: 20px; +} +.single-product-info .pro-rating { + float: none; + margin-top: 10px; +} +.single-product-info .short-description { + margin-top: 10px; +} +.single-product-info .short-description > p { + font-size: 13px; + line-height: 22px; +} +.single-product-info .stock-status { + color: #ec4445; + float: left; + margin: 0 0 15px; + width: 100%; +} +.single-product-info .stock-status label{display: inline-block; +font-weight: normal; +margin: 0;} +.single-product-info .quantity{} +.single-product-info .quantity input { + background: #e8e8e9 none repeat scroll 0 0; + border: medium none; + color: #000; + float: left; + font-size: 17px; + height: 40px; + line-height: 40px; + margin-right: 40px; + padding: 0 10px 0 0; + text-align: center; + width: 90px; +} +.single-product-info .quantity button{background: #252525 none repeat scroll 0 0; +border: medium none; +border-radius: 0; +box-shadow: none; +color: #fff; +font-family: Montserrat,Arial,Helvetica,sans-serif; +font-size: 14px; +font-weight: bold; +height: 40px; +line-height: 40px; +margin: 0; +padding: 0 30px; +text-shadow: none; +text-transform: uppercase; +transition: all 0.3s ease 0s;} +.single-product-info .quantity button:hover{background:#EC4445} +.single-product-info .add-to-wishlist { + margin-left: 25px; +} +.single-product-info .add-to-wishlist a { + margin-left: 2px; + margin-right: 0; +} +.single-product-info .add-to-wishlist a i { + background: #252525; + border: 0 none; + line-height: 40px; + padding-top: 0; + text-align: center; +} +.single-product-info .add-to-wishlist a i:hover{background:#EC4445} +.single-product-info > form { + float: left; +} +.single-product-info .share_buttons{border-top: 1px solid #ececec; +float: left; +padding-top: 15px; +width: 100%;margin-top:20px} +.single-product-info .share_buttons a{} +.product-tab-area { + margin-bottom: 50px; + margin-top: 50px; +} +.product-tabs .nav-tabs > li > a { + border: 0 none; + border-radius: 0; + color: #ec4445; + font-size: 14px; + font-weight: 700; + line-height: 1.42857; + margin:0; + text-transform: uppercase; + border-bottom:4px double transparent; + padding:0 0 5px; +} +.product-tabs .nav > li > a:focus, .product-tabs .nav > li > a:hover { + background-color: inherit; + border-color:#ec4445; + border-style: none none double; + border-width: 0 0 4px; + text-decoration: none; +} +.product-tabs .nav-tabs > li.active > a,.product-tabs .nav-tabs > li.active > a:focus,.product-tabs .nav-tabs > li.active > a:hover { +border: medium none; +border-bottom: 4px double #EC4445; +} +.product-tabs .nav-tabs > li { + float: left; + margin-bottom: -1px; + margin-right: 51px; +} +.product-tabs .nav-tabs { + border-bottom: 0 none; +} +.product-tab-desc { + border: 1px solid #e8e8e9; + border-radius: 0; + box-shadow: none; + float: left; + font-size: 12px; + line-height: 24px; + margin: 20px 0 0; + padding: 25px 20px; + width: 100%; +} +.product-tab-desc p{line-height:22px} +.product-tab-desc{} +.product-tab-desc table{border-color: #e8e8e9 #e8e8e9; +border-style: solid none none solid; +border-width: 1px medium medium 1px;width:100%} +.product-tab-desc table{} +.product-tab-desc table th{color: #252525; +font-family: Montserrat,Arial,Helvetica,sans-serif; +font-size: 12px; +font-weight: normal; +text-transform: uppercase; +padding: 8px; +width: 150px;} +.product-tab-desc table td{padding: 8px;} +.product-tab-desc table th,.product-tab-desc table td{border-bottom: 1px dotted rgba(0, 0, 0, 0.1); +border-top: 0 none; +line-height: 1.5; +margin: 0;border-right:1px solid #e8e8e9} +.product-tab-desc table tr.pro-back{background:#F9F9F9} +.single-product-tab{} +.single-product-tab .nav-tabs > li > a { + border: 1px solid transparent; + border-radius: 0; + line-height: 0; + margin-right: 0; + padding: 0; + overflow:hidden; +} +.single-product-tab .nav-tabs { + border-bottom: 0 none; + width: 20%; +} +.single-product-tab .nav-tabs > li:first-child{padding-top:0;} +.single-product-tab .nav-tabs > li { + float: none; + margin-bottom: 0; + padding: 5px; +} +.single-product-tab .tab-content { + float: left; + padding-right: 14px; + width: 80%; +} +.single-product-tab .nav-tabs { + border-bottom: 0 none; + float: right; + width: 20%; +} +.single-product-tab .nav > li > a > img { + max-width: none; + transition:all 0.3s ease 0s; +} +.single-product-tab .nav > li > a > img:hover{transform:scale(1.2)} +.product-tab .product-page-comments{margin: 35px auto; +max-width: 650px; +width: 100%;} +.product-page-comments h2 { + font-size: 16px; + font-weight: 400; + margin-bottom: 22px; + text-transform: uppercase; +} +.product-comments{margin-bottom: 30px;} +.product-comments img{ +float: left;} +.product-comments .product-comments-content { + border: 1px solid #ddd; + margin-left: 85px; + padding: 10px; + position: relative; +} +.product-comments .product-comments-content:before{background: #fff none repeat scroll 0 0; +border-bottom: 1px solid #e5e5e5; +border-left: 1px solid #e5e5e5; +content: ""; +display: block; +height: 10px; +left: -6px; +position: absolute; +top: 10px; +transform: rotate(45deg); +width: 10px;} +.product-comments .product-comments-content p{font-size: 16px;} +.product-comments .product-comments-content p strong{font-family: Montserrat,Arial,Helvetica,sans-serif; +text-transform: uppercase;} +.product-comments .product-comments-content span.pro-comments-rating{float: right;} +.product-comments .product-comments-content span i{} +.product-tab .desc{} +.product-tab +.review-form-wrapper{} +.review-form-wrapper h3 { + font-size: 20px; + font-weight: 700; + text-transform: uppercase; +} +.review-form-wrapper input[type=text],.review-form-wrapper input[type=email]{border: 1px solid #e5e5e5; +height: 32px; +margin-bottom: 20px; +padding: 0 0 0 10px; +width: 100%;} +.review-form-wrapper input[type=email]{} +.review-form-wrapper input[type=submit]{background:#252525 none repeat scroll 0 0; +border: medium none; +border-radius: 0; +box-shadow: none; +color: #fff; +display: inline-block; +font-family: Montserrat,Arial,Helvetica,sans-serif; +font-size: 12px; +font-weight: normal; +height: 38px; +line-height: 40px; +padding: 0 30px; +text-shadow: none; +text-transform: capitalize; +transition: all 0.3s ease 0s; +white-space: nowrap; +width: auto;text-transform:uppercase} +.review-form-wrapper textarea{border: 1px solid #e5e5e5; +border-radius: 3px; +height: 80px; +margin-bottom: 20px; +margin-top: 20px; +padding: 10px; +width: 100%;} +.review-form-wrapper input[type=submit]:hover{background:#EC4445} +.your-rating{} +.your-rating span{margin-right: 25px;} +.your-rating span a{} +.your-rating span a i{color: #919191;} +.your-rating span:hover a i{color: #ec4445;} +.your-rating h5 { + margin-bottom: 10px; +} +.upsells_products_widget { + margin-top: 35px; +} +.upsells_products_widget .section-heading { + margin: 0 0 25px; +} +.upsells_products_widget h2.product-name { + font-size: 13px; +} +.upsells_products_widget .price-box { + font-size: 15px; +} +.upsells_products_widget span.old-price { + font-size: 13px; + margin-left:3px; +} +/*=========================== +19. about page +============================= */ +.about-header-area { + background: rgba(0, 0, 0, 0) url("img/about/bg.png") no-repeat fixed center center / cover ; +} +.about-header{text-align: center;padding:110px 0} +.about-header h1{color: #fff; +display: inline-block; +font-size: 50px; +margin: 0; +padding:0 40px; +position: relative; +text-transform: capitalize;} +.about-header h1:before,.about-header h1:after{background: #fff none repeat scroll 0 0; +content: ""; +height: 2px; +position: absolute; +right: 0; +top: 35px; +width: 30px;} +.about-header h1::after { + left: 0; +} +.about-us-area { + padding: 60px 0; +} +.about-img{} +.about-img img{} +.about-text{} +.about-text h2{margin: 10px 0;} +.about-text p{font-size: 13px; +line-height: 20px; +margin-bottom: 20px;} +.about-counter-area { + background: rgba(0, 0, 0, 0) url("img/about/about-bg.jpg") no-repeat fixed center center / cover ; + padding: 120px 0; +} +.single-counter { + text-align: center; +} +.single-counter i { + border-radius: 100%; + box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.56); + color: #fff; + font-size: 3em !important; + height: 100px; + overflow: hidden; + padding-top: 32px; + transition: background 0.3s ease 0s, color 0.3s ease 0s, box-shadow 0.3s ease 0s; + width: 100px; +} +.single-counter i:hover{box-shadow: 0 0 0 8px rgba(255, 255, 255, 0.3);} +.single-counter h3{color: #fff; +font-size: 40px; +font-weight: bold; +margin: 0;} +.single-counter p{color: #fff; +font-size: 13px;} +.about-service-area { + background: #f2f2f2 none repeat scroll 0 0; + padding: 60px 0; +} +.single-service{} +.single-service h3{font-size: 18px; +margin: 0 0 20px;} +.single-service {} +.sercice-icon { + float: left; + margin-right: 10px; +} +.sercice-icon i { + border: 1px solid #666; + font-size: 28px; + height: 60px; + padding-top: 15px; + text-align: center; + width: 60px; +} +.service-text{} +.service-text p{} +.about-team-area{padding:80px 0} +.single-about-team { + background: #eeeeee none repeat scroll 0 0; + padding: 20px; +} +.about-team-img { + text-align: center; +} +.about-team-img img { + width: 100%; +} +.about-team-info{} +.about-team-info h3{font-size: 18px; +margin: 10px 0; +text-transform: uppercase;} +.about-team-info p{} +/*=========================== +20. contact page +============================= */ +.contact-area { + padding: 50px 0; +} +.contact-info{} +.contact-info h3, .contact-form h3 { + border-bottom: 2px solid #e8e8e9 !important; + font-size: 16px; + margin-bottom: 20px; + text-transform: uppercase; + padding-bottom: 8px; +} +.contact-info h3:before{content: ""; +display: inline-block; +font-family: FontAwesome; +margin-right: 5px; +vertical-align: text-bottom;} +.contact-info ul{} +.contact-info ul li{border-bottom: 1px solid #e8e8e9; +float: left; +font-size: 12px; +line-height: 40px; +list-style: outside none none; +margin: 0; +padding: 0; +width: 100%;} +.contact-info ul li i{font-size: 16px; +margin-right: 5px; +width: 20px;} +.contact-info ul li a{} +.contact-form{} +.contact-form h3 { + margin-bottom: 30px; +} +.contact-form input[type="text"], .contact-form input[type="email"] { + border: 1px solid #ccc; + border-radius: 0; + height: 50px; + padding-left: 20px; + width: 100%; + margin-bottom: 16px; +} +.contact-form textarea#message{border: 1px solid #ccc; +border-radius: 0; +height: 180px; +padding: 20px; +width: 100%;} +.contact-form input[type="submit"] { + background: #252525 none repeat scroll 0 0; + border: medium none; + border-radius: 0; + color: #fff; + font-size: 12px; + font-weight: 700; + height: 40px; + padding: 0 15px; + text-transform: uppercase; + transition: all 0.3s ease 0s; + margin-top: 16px; +} +.contact-form input[type=submit]:hover{background:#EC4445} +/*=========================== +21. error-page +============================= */ +.error-page{background: rgba(0, 0, 0, 0) url("img/404/404.jpg") repeat scroll center center / cover ;} +.four-zero-four{text-align: center;} +.four-zero-four h1{color: #fff; +font-size: 22.91em; +line-height: 1; +margin-top: 210px;} +.four-zero-four h1 span{display: inline-block; +position: relative;} +.four-zero-four h1 span:before,.four-zero-four h1 span:after{border-bottom: 4px solid #fff; +bottom: 40px; +content: ""; +display: block; +position: absolute; +right: -50%; +width: 40%;} +.four-zero-four h1 span:after{left:-50%} +.four-zero-four label{color: #fff; +display: block; +font-family: Montserrat,Arial,Helvetica,sans-serif; +font-size: 20px; +font-weight: normal; +letter-spacing: 2px; +margin-top: 90px;} +.four-zero-four form{margin-top: 185px;margin-bottom:100px} +.four-zero-four form input{background: #c3c5c5 none repeat scroll 0 0; +border: medium none; +height: 45px; +padding-left: 10px; +vertical-align: middle; +width: 420px;} +.four-zero-four form button{background: #fff none repeat scroll 0 0; +border: medium none; +color: #252525; +display: inline-block; +font-size: 20px; +height: 45px; +padding: 0 30px; +transition: all 0.3s ease 0s; +vertical-align: middle;} +.four-zero-four form button:hover{background: #ec4445 none repeat scroll 0 0; +color: #fff;} + +/* mobile menu css */ +.mean-container .mean-bar { + background: #EC4445; + padding: 0; +} +.mean-container a.meanmenu-reveal { + float: right; +} +.mean-container .mean-bar:before { + color: #fff; + content: "MENU"; + font-size: 18px; + font-weight: 700; + left: 10px; + position: absolute; + top: 14px; +} +.mobile-menu { + display: none; +} \ No newline at end of file diff --git a/src/main/resources/static/css/user/style.css b/src/main/resources/static/css/user/style.css new file mode 100644 index 0000000..7e95d1b --- /dev/null +++ b/src/main/resources/static/css/user/style.css @@ -0,0 +1,350 @@ + +* { + margin: 0px auto; + padding: 0px; + text-align: center; +font-family: 'Lato', sans-serif; +} + +.cotn_principal { + position: absolute; + width: 100%; + height: 100%; +/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#cfd8dc+0,607d8b+100,b0bec5+100 */ +background: #7ec4b4; /* Old browsers */ +background: -moz-linear-gradient(-45deg, #7ec4b4 0%, #ecbecf 100%, #eed5a9 100%); /* FF3.6-15 */ +background: -webkit-linear-gradient(-45deg, #7ec4b4 0%, #ecbecf 100%,#eed5a9 100%); /* Chrome10-25,Safari5.1-6 */ +background: linear-gradient(135deg, #7ec4b4 0%, #ecbecf 100%,#eed5a9 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ +filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cfd8dc', endColorstr='#b0bec5',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ + +} + + +.cont_centrar { + position: relative; + float: left; + width: 100%; + top: 15%; + +} + +.cont_login { + position: relative; + width: 640px; +left: 50%; +margin-left: -320px; + +} + +.cont_back_info { +position: relative; + float: left; + width: 640px; + height: 280px; +overflow: hidden; + background-color: #fff; + margin-top: 100px; +box-shadow: 1px 10px 30px -10px rgba(0,0,0,0.5); +} + +.cont_forms { + position: absolute; + overflow: hidden; + top:100px; +left: 0px; + width: 320px; + height: 280px; + background-color: #eee; +-webkit-transition: all 0.5s; +-moz-transition: all 0.5s; +-ms-transition: all 0.5s; +-o-transition: all 0.5s; +transition: all 0.5s; +} + +.cont_forms_active_login { +box-shadow: 1px 10px 30px -10px rgba(0,0,0,0.5); + height: 420px; +top:20px; +left: 0px; + -webkit-transition: all 0.5s; +-moz-transition: all 0.5s; +-ms-transition: all 0.5s; +-o-transition: all 0.5s; +transition: all 0.5s; + +} + +.cont_forms_active_sign_up { +box-shadow: 1px 10px 30px -10px rgba(0,0,0,0.5); + height: 420px; +top:20px; +left:320px; +-webkit-transition: all 0.5s; +-moz-transition: all 0.5s; +-ms-transition: all 0.5s; +-o-transition: all 0.5s; +transition: all 0.5s; +} + +.cont_img_back_grey { + position: absolute; + width: 950px; +top:-80px; + left: -116px; +} + +.cont_img_back_grey > img { + width: 100%; + -webkit-filter: grayscale(100%); filter: grayscale(100%); +opacity: 0.2; +animation-name: animar_fondo; + animation-duration: 20s; +animation-timing-function: linear; +animation-iteration-count: infinite; +animation-direction: alternate; + +} + +.cont_img_back_ { + position: absolute; + width: 950px; +top:-80px; + left: -116px; +} + +.cont_img_back_ > img { + width: 100%; +opacity: 0.3; +animation-name: animar_fondo; +animation-duration: 20s; +animation-timing-function: linear; +animation-iteration-count: infinite; +animation-direction: alternate; +} + +.cont_forms_active_login > .cont_img_back_ { +top:0px; + -webkit-transition: all 0.5s; +-moz-transition: all 0.5s; +-ms-transition: all 0.5s; +-o-transition: all 0.5s; +transition: all 0.5s; +} + +.cont_forms_active_sign_up > .cont_img_back_ { +top:0px; +left: -435px; + -webkit-transition: all 0.5s; +-moz-transition: all 0.5s; +-ms-transition: all 0.5s; +-o-transition: all 0.5s; +transition: all 0.5s; +} + + +.cont_info_log_sign_up { +position: absolute; + width: 640px; + height: 280px; + top: 100px; +z-index: 1; +} + +.col_md_login { + position: relative; + float: left; + width: 50%; +} + +.col_md_login > h2 { + font-weight: 400; +margin-top: 70px; + color: #757575; +} + +.col_md_login > p { + font-weight: 400; +margin-top: 15px; +width: 80%; + color: #37474F; +} + +.btn_login { +background-color: #FF9800; + border: none; + padding: 10px; +width: 200px; +border-radius:3px; +box-shadow: 1px 5px 20px -5px rgba(0,0,0,0.4); + color: #fff; +margin-top: 10px; +cursor: pointer; +} + +.col_md_sign_up { + position: relative; + float: left; + width: 50%; +} + +.cont_ba_opcitiy > h2 { + font-weight: 400; + color: #fff; +} + +.cont_ba_opcitiy > p { + font-weight: 400; +margin-top: 15px; + color: #fff; +} +/* ---------------------------------- +background text +------------------------------------ + */ +.cont_ba_opcitiy { + position: relative; + background-color: rgba(187, 168, 170, 0.79); + width: 80%; + border-radius:3px ; +margin-top: 60px; +padding: 15px 0px; +} + +.btn_sign_up { +background-color: #f44336; + border: none; + padding: 10px; +width: 200px; +border-radius:3px; +box-shadow: 1px 5px 20px -5px rgba(0,0,0,0.4); + color: #fff; +margin-top: 10px; +cursor: pointer; +} +.cont_forms_active_sign_up { +z-index: 2; +} + + +@-webkit-keyframes animar_fondo { + from { -webkit-transform: scale(1) translate(0px); +-moz-transform: scale(1) translate(0px); +-ms-transform: scale(1) translate(0px); +-o-transform: scale(1) translate(0px); +transform: scale(1) translate(0px); } + to { -webkit-transform: scale(1.5) translate(50px); +-moz-transform: scale(1.5) translate(50px); +-ms-transform: scale(1.5) translate(50px); +-o-transform: scale(1.5) translate(50px); +transform: scale(1.5) translate(50px); } +} +@-o-keyframes identifier { + from { -webkit-transform: scale(1); +-moz-transform: scale(1); +-ms-transform: scale(1); +-o-transform: scale(1); +transform: scale(1); } + to { -webkit-transform: scale(1.5); +-moz-transform: scale(1.5); +-ms-transform: scale(1.5); +-o-transform: scale(1.5); +transform: scale(1.5); } + +} +@-moz-keyframes identifier { + from { -webkit-transform: scale(1); +-moz-transform: scale(1); +-ms-transform: scale(1); +-o-transform: scale(1); +transform: scale(1); } + to { -webkit-transform: scale(1.5); +-moz-transform: scale(1.5); +-ms-transform: scale(1.5); +-o-transform: scale(1.5); +transform: scale(1.5); } + +} +@keyframes identifier { + from { -webkit-transform: scale(1); +-moz-transform: scale(1); +-ms-transform: scale(1); +-o-transform: scale(1); +transform: scale(1); } + to { -webkit-transform: scale(1.5); +-moz-transform: scale(1.5); +-ms-transform: scale(1.5); +-o-transform: scale(1.5); +transform: scale(1.5); } +} +.cont_form_login { + position: absolute; + opacity: 0; +display: none; + width: 320px; + -webkit-transition: all 0.5s; +-moz-transition: all 0.5s; +-ms-transition: all 0.5s; +-o-transition: all 0.5s; +transition: all 0.5s; +} + +.cont_forms_active_login { +z-index: 2; +} +.cont_forms_active_login >.cont_form_login { +} + +.cont_form_sign_up { + position: absolute; + width: 320px; +float: left; + opacity: 0; +display: none; + -webkit-transition: all 0.5s; +-moz-transition: all 0.5s; +-ms-transition: all 0.5s; +-o-transition: all 0.5s; +transition: all 0.5s; +} + + +.cont_form_sign_up > form > input { +text-align: left; + padding: 15px 5px; +margin-left: 10px; +margin-top: 20px; + width: 260px; +border: none; + color: #757575; +} + +.cont_form_sign_up > h2 { +margin-top: 50px; +font-weight: 400; + color: #757575; +} + + +.cont_form_login > form > input { + padding: 15px 5px; +margin-left: 10px; +margin-top: 20px; + width: 260px; +border: none; +text-align: left; + color: #757575; +} + +.cont_form_login > h2 { +margin-top: 110px; +font-weight: 400; + color: #757575; +} +.cont_form_login > a,.cont_form_sign_up > a { + color: #757575; + position: relative; + float: left; + margin: 10px; +margin-left: 30px; +} \ No newline at end of file diff --git a/src/main/resources/static/data/goods/5/20201109204752392935.jpg b/src/main/resources/static/data/goods/5/20201109204752392935.jpg new file mode 100644 index 0000000..3f86896 Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201109204752392935.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201109205306213001.jpg b/src/main/resources/static/data/goods/5/20201109205306213001.jpg new file mode 100644 index 0000000..b321da7 Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201109205306213001.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201109205751273390.jpg b/src/main/resources/static/data/goods/5/20201109205751273390.jpg new file mode 100644 index 0000000..3f5ffa4 Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201109205751273390.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201109205945154276.jpg b/src/main/resources/static/data/goods/5/20201109205945154276.jpg new file mode 100644 index 0000000..dd10f2d Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201109205945154276.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201109210325235653.jpg b/src/main/resources/static/data/goods/5/20201109210325235653.jpg new file mode 100644 index 0000000..7569e9a Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201109210325235653.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201109210622705242.jpg b/src/main/resources/static/data/goods/5/20201109210622705242.jpg new file mode 100644 index 0000000..380f3a7 Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201109210622705242.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201110142709402793.jpg b/src/main/resources/static/data/goods/5/20201110142709402793.jpg new file mode 100644 index 0000000..875fe1f Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201110142709402793.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201110142841106068.jpg b/src/main/resources/static/data/goods/5/20201110142841106068.jpg new file mode 100644 index 0000000..99506b6 Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201110142841106068.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201110143028570004.jpg b/src/main/resources/static/data/goods/5/20201110143028570004.jpg new file mode 100644 index 0000000..90455b1 Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201110143028570004.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201110143155960319.jpg b/src/main/resources/static/data/goods/5/20201110143155960319.jpg new file mode 100644 index 0000000..60018b4 Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201110143155960319.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201110143316976441.jpg b/src/main/resources/static/data/goods/5/20201110143316976441.jpg new file mode 100644 index 0000000..fa2c410 Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201110143316976441.jpg differ diff --git a/src/main/resources/static/data/goods/5/20201110143451872085.jpg b/src/main/resources/static/data/goods/5/20201110143451872085.jpg new file mode 100644 index 0000000..5113641 Binary files /dev/null and b/src/main/resources/static/data/goods/5/20201110143451872085.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110214136520879.jpg b/src/main/resources/static/data/goods/8/20201110214136520879.jpg new file mode 100644 index 0000000..11d28d9 Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110214136520879.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110224214151666.jpg b/src/main/resources/static/data/goods/8/20201110224214151666.jpg new file mode 100644 index 0000000..b5a265c Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110224214151666.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110224428269386.jpg b/src/main/resources/static/data/goods/8/20201110224428269386.jpg new file mode 100644 index 0000000..c2d9d22 Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110224428269386.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110224542348334.jpg b/src/main/resources/static/data/goods/8/20201110224542348334.jpg new file mode 100644 index 0000000..72598ec Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110224542348334.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110224729185763.jpg b/src/main/resources/static/data/goods/8/20201110224729185763.jpg new file mode 100644 index 0000000..7a8ddd8 Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110224729185763.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110224846847911.jpg b/src/main/resources/static/data/goods/8/20201110224846847911.jpg new file mode 100644 index 0000000..0594be7 Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110224846847911.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110225011851415.jpg b/src/main/resources/static/data/goods/8/20201110225011851415.jpg new file mode 100644 index 0000000..7c480b3 Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110225011851415.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110225219159233.jpg b/src/main/resources/static/data/goods/8/20201110225219159233.jpg new file mode 100644 index 0000000..996853a Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110225219159233.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110225330615623.jpg b/src/main/resources/static/data/goods/8/20201110225330615623.jpg new file mode 100644 index 0000000..0dd3194 Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110225330615623.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110225449776961.jpg b/src/main/resources/static/data/goods/8/20201110225449776961.jpg new file mode 100644 index 0000000..75974ac Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110225449776961.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110225601894276.jpg b/src/main/resources/static/data/goods/8/20201110225601894276.jpg new file mode 100644 index 0000000..5a51367 Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110225601894276.jpg differ diff --git a/src/main/resources/static/data/goods/8/20201110225703611247.jpg b/src/main/resources/static/data/goods/8/20201110225703611247.jpg new file mode 100644 index 0000000..12a91e0 Binary files /dev/null and b/src/main/resources/static/data/goods/8/20201110225703611247.jpg differ diff --git a/src/main/resources/static/data/goods/8/20210109201101998677.jpg b/src/main/resources/static/data/goods/8/20210109201101998677.jpg new file mode 100644 index 0000000..0dc6ea1 Binary files /dev/null and b/src/main/resources/static/data/goods/8/20210109201101998677.jpg differ diff --git a/src/main/resources/static/data/goods/9/20201112192043550007.jpg b/src/main/resources/static/data/goods/9/20201112192043550007.jpg new file mode 100644 index 0000000..523d5f0 Binary files /dev/null and b/src/main/resources/static/data/goods/9/20201112192043550007.jpg differ diff --git a/src/main/resources/static/data/goods/9/20201112192208777150.jpg b/src/main/resources/static/data/goods/9/20201112192208777150.jpg new file mode 100644 index 0000000..534d60f Binary files /dev/null and b/src/main/resources/static/data/goods/9/20201112192208777150.jpg differ diff --git a/src/main/resources/static/data/goods/9/20201112192355215509.jpg b/src/main/resources/static/data/goods/9/20201112192355215509.jpg new file mode 100644 index 0000000..87dbbc9 Binary files /dev/null and b/src/main/resources/static/data/goods/9/20201112192355215509.jpg differ diff --git a/src/main/resources/static/data/header/merchant/20201130143514856044.jpg b/src/main/resources/static/data/header/merchant/20201130143514856044.jpg new file mode 100644 index 0000000..2937d3d Binary files /dev/null and b/src/main/resources/static/data/header/merchant/20201130143514856044.jpg differ diff --git a/src/main/resources/static/data/header/merchant/20201130144501417757.jpg b/src/main/resources/static/data/header/merchant/20201130144501417757.jpg new file mode 100644 index 0000000..1e78f55 Binary files /dev/null and b/src/main/resources/static/data/header/merchant/20201130144501417757.jpg differ diff --git a/src/main/resources/static/data/header/merchant/5.jpg b/src/main/resources/static/data/header/merchant/5.jpg new file mode 100644 index 0000000..d02d605 Binary files /dev/null and b/src/main/resources/static/data/header/merchant/5.jpg differ diff --git a/src/main/resources/static/data/header/user/1.jpg b/src/main/resources/static/data/header/user/1.jpg new file mode 100644 index 0000000..4743b98 Binary files /dev/null and b/src/main/resources/static/data/header/user/1.jpg differ diff --git a/src/main/resources/static/data/header/user/2.jpg b/src/main/resources/static/data/header/user/2.jpg new file mode 100644 index 0000000..42078da Binary files /dev/null and b/src/main/resources/static/data/header/user/2.jpg differ diff --git a/src/main/resources/static/data/header/user/default.jpg b/src/main/resources/static/data/header/user/default.jpg new file mode 100644 index 0000000..69bd7b6 Binary files /dev/null and b/src/main/resources/static/data/header/user/default.jpg differ diff --git a/src/main/resources/static/data/library/20201106191900642246.jpg b/src/main/resources/static/data/library/20201106191900642246.jpg new file mode 100644 index 0000000..982d340 Binary files /dev/null and b/src/main/resources/static/data/library/20201106191900642246.jpg differ diff --git a/src/main/resources/static/data/library/20201106192206806286.jpg b/src/main/resources/static/data/library/20201106192206806286.jpg new file mode 100644 index 0000000..dded86c Binary files /dev/null and b/src/main/resources/static/data/library/20201106192206806286.jpg differ diff --git a/src/main/resources/static/data/library/20201130222817664532.jpg b/src/main/resources/static/data/library/20201130222817664532.jpg new file mode 100644 index 0000000..37006e5 Binary files /dev/null and b/src/main/resources/static/data/library/20201130222817664532.jpg differ diff --git a/src/main/resources/static/data/library/20201130223715934619.jpg b/src/main/resources/static/data/library/20201130223715934619.jpg new file mode 100644 index 0000000..92c9361 Binary files /dev/null and b/src/main/resources/static/data/library/20201130223715934619.jpg differ diff --git a/src/main/resources/static/data/library/20201201130048784144.jpeg b/src/main/resources/static/data/library/20201201130048784144.jpeg new file mode 100644 index 0000000..5ab623d Binary files /dev/null and b/src/main/resources/static/data/library/20201201130048784144.jpeg differ diff --git a/src/main/resources/static/data/library/20210109210243296422.jpg b/src/main/resources/static/data/library/20210109210243296422.jpg new file mode 100644 index 0000000..3d3e62a Binary files /dev/null and b/src/main/resources/static/data/library/20210109210243296422.jpg differ diff --git a/src/main/resources/static/data/mtui/5/20201111171430806651.jpg b/src/main/resources/static/data/mtui/5/20201111171430806651.jpg new file mode 100644 index 0000000..db9f2b8 Binary files /dev/null and b/src/main/resources/static/data/mtui/5/20201111171430806651.jpg differ diff --git a/src/main/resources/static/data/mtui/5/20201111171436443523.jpg b/src/main/resources/static/data/mtui/5/20201111171436443523.jpg new file mode 100644 index 0000000..ac4db9e Binary files /dev/null and b/src/main/resources/static/data/mtui/5/20201111171436443523.jpg differ diff --git a/src/main/resources/static/data/mtui/8/20201111172245637416.jpg b/src/main/resources/static/data/mtui/8/20201111172245637416.jpg new file mode 100644 index 0000000..532bd07 Binary files /dev/null and b/src/main/resources/static/data/mtui/8/20201111172245637416.jpg differ diff --git a/src/main/resources/static/data/mtui/8/20210109201740252613.jpg b/src/main/resources/static/data/mtui/8/20210109201740252613.jpg new file mode 100644 index 0000000..3029b82 Binary files /dev/null and b/src/main/resources/static/data/mtui/8/20210109201740252613.jpg differ diff --git a/src/main/resources/static/data/mtui/9/20201111174106561114.jpg b/src/main/resources/static/data/mtui/9/20201111174106561114.jpg new file mode 100644 index 0000000..e4a9f9d Binary files /dev/null and b/src/main/resources/static/data/mtui/9/20201111174106561114.jpg differ diff --git a/src/main/resources/static/data/mtui/9/20201111174116118997.jpg b/src/main/resources/static/data/mtui/9/20201111174116118997.jpg new file mode 100644 index 0000000..dcd5991 Binary files /dev/null and b/src/main/resources/static/data/mtui/9/20201111174116118997.jpg differ diff --git a/src/main/resources/static/fonts/error/FontAwesome.otf b/src/main/resources/static/fonts/error/FontAwesome.otf new file mode 100644 index 0000000..401ec0f Binary files /dev/null and b/src/main/resources/static/fonts/error/FontAwesome.otf differ diff --git a/src/main/resources/static/fonts/error/fontawesome-webfont.eot b/src/main/resources/static/fonts/error/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/src/main/resources/static/fonts/error/fontawesome-webfont.eot differ diff --git a/src/main/resources/static/fonts/error/fontawesome-webfont.svg b/src/main/resources/static/fonts/error/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/src/main/resources/static/fonts/error/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/static/fonts/error/fontawesome-webfont.ttf b/src/main/resources/static/fonts/error/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/src/main/resources/static/fonts/error/fontawesome-webfont.ttf differ diff --git a/src/main/resources/static/fonts/error/fontawesome-webfont.woff b/src/main/resources/static/fonts/error/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/src/main/resources/static/fonts/error/fontawesome-webfont.woff differ diff --git a/src/main/resources/static/fonts/error/fontawesome-webfont.woff2 b/src/main/resources/static/fonts/error/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/src/main/resources/static/fonts/error/fontawesome-webfont.woff2 differ diff --git a/src/main/resources/static/fonts/user/home/FontAwesome.otf b/src/main/resources/static/fonts/user/home/FontAwesome.otf new file mode 100644 index 0000000..f7936cc Binary files /dev/null and b/src/main/resources/static/fonts/user/home/FontAwesome.otf differ diff --git a/src/main/resources/static/fonts/user/home/fontawesome-webfont.eot b/src/main/resources/static/fonts/user/home/fontawesome-webfont.eot new file mode 100644 index 0000000..33b2bb8 Binary files /dev/null and b/src/main/resources/static/fonts/user/home/fontawesome-webfont.eot differ diff --git a/src/main/resources/static/fonts/user/home/fontawesome-webfont.svg b/src/main/resources/static/fonts/user/home/fontawesome-webfont.svg new file mode 100644 index 0000000..1ee89d4 --- /dev/null +++ b/src/main/resources/static/fonts/user/home/fontawesome-webfont.svg @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/fonts/user/home/fontawesome-webfont.ttf b/src/main/resources/static/fonts/user/home/fontawesome-webfont.ttf new file mode 100644 index 0000000..ed9372f Binary files /dev/null and b/src/main/resources/static/fonts/user/home/fontawesome-webfont.ttf differ diff --git a/src/main/resources/static/fonts/user/home/fontawesome-webfont.woff b/src/main/resources/static/fonts/user/home/fontawesome-webfont.woff new file mode 100644 index 0000000..8b280b9 Binary files /dev/null and b/src/main/resources/static/fonts/user/home/fontawesome-webfont.woff differ diff --git a/src/main/resources/static/fonts/user/home/fontawesome-webfont.woff2 b/src/main/resources/static/fonts/user/home/fontawesome-webfont.woff2 new file mode 100644 index 0000000..3311d58 Binary files /dev/null and b/src/main/resources/static/fonts/user/home/fontawesome-webfont.woff2 differ diff --git a/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.eot b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.eot differ diff --git a/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.svg b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.ttf b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.ttf differ diff --git a/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.woff b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.woff differ diff --git a/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.woff2 b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/src/main/resources/static/fonts/user/home/glyphicons-halflings-regular.woff2 differ diff --git a/src/main/resources/static/image/error/404.jpg b/src/main/resources/static/image/error/404.jpg new file mode 100644 index 0000000..bd44e7e Binary files /dev/null and b/src/main/resources/static/image/error/404.jpg differ diff --git a/src/main/resources/static/image/pay/pay.jpg b/src/main/resources/static/image/pay/pay.jpg new file mode 100644 index 0000000..8488452 Binary files /dev/null and b/src/main/resources/static/image/pay/pay.jpg differ diff --git a/src/main/resources/static/image/user/home/4.jpg b/src/main/resources/static/image/user/home/4.jpg new file mode 100644 index 0000000..af4fc1d Binary files /dev/null and b/src/main/resources/static/image/user/home/4.jpg differ diff --git a/src/main/resources/static/image/user/home/404/404.jpg b/src/main/resources/static/image/user/home/404/404.jpg new file mode 100644 index 0000000..65a88cf Binary files /dev/null and b/src/main/resources/static/image/user/home/404/404.jpg differ diff --git a/src/main/resources/static/image/user/home/about/1.jpeg b/src/main/resources/static/image/user/home/about/1.jpeg new file mode 100644 index 0000000..b85bc78 Binary files /dev/null and b/src/main/resources/static/image/user/home/about/1.jpeg differ diff --git a/src/main/resources/static/image/user/home/about/about-bg.jpg b/src/main/resources/static/image/user/home/about/about-bg.jpg new file mode 100644 index 0000000..5292ed1 Binary files /dev/null and b/src/main/resources/static/image/user/home/about/about-bg.jpg differ diff --git a/src/main/resources/static/image/user/home/about/bg.png b/src/main/resources/static/image/user/home/about/bg.png new file mode 100644 index 0000000..18c3eaa Binary files /dev/null and b/src/main/resources/static/image/user/home/about/bg.png differ diff --git a/src/main/resources/static/image/user/home/about/team_member_1.jpg b/src/main/resources/static/image/user/home/about/team_member_1.jpg new file mode 100644 index 0000000..6be2850 Binary files /dev/null and b/src/main/resources/static/image/user/home/about/team_member_1.jpg differ diff --git a/src/main/resources/static/image/user/home/about/team_member_2.jpg b/src/main/resources/static/image/user/home/about/team_member_2.jpg new file mode 100644 index 0000000..12196e5 Binary files /dev/null and b/src/main/resources/static/image/user/home/about/team_member_2.jpg differ diff --git a/src/main/resources/static/image/user/home/about/team_member_3.jpg b/src/main/resources/static/image/user/home/about/team_member_3.jpg new file mode 100644 index 0000000..6544103 Binary files /dev/null and b/src/main/resources/static/image/user/home/about/team_member_3.jpg differ diff --git a/src/main/resources/static/image/user/home/about/team_member_4.jpg b/src/main/resources/static/image/user/home/about/team_member_4.jpg new file mode 100644 index 0000000..17f81dc Binary files /dev/null and b/src/main/resources/static/image/user/home/about/team_member_4.jpg differ diff --git a/src/main/resources/static/image/user/home/banner/1.jpg b/src/main/resources/static/image/user/home/banner/1.jpg new file mode 100644 index 0000000..0a71751 Binary files /dev/null and b/src/main/resources/static/image/user/home/banner/1.jpg differ diff --git a/src/main/resources/static/image/user/home/banner/2.jpg b/src/main/resources/static/image/user/home/banner/2.jpg new file mode 100644 index 0000000..8fbd652 Binary files /dev/null and b/src/main/resources/static/image/user/home/banner/2.jpg differ diff --git a/src/main/resources/static/image/user/home/banner/3.jpg b/src/main/resources/static/image/user/home/banner/3.jpg new file mode 100644 index 0000000..af4fc1d Binary files /dev/null and b/src/main/resources/static/image/user/home/banner/3.jpg differ diff --git a/src/main/resources/static/image/user/home/banner/4.jpg b/src/main/resources/static/image/user/home/banner/4.jpg new file mode 100644 index 0000000..af4fc1d Binary files /dev/null and b/src/main/resources/static/image/user/home/banner/4.jpg differ diff --git a/src/main/resources/static/image/user/home/banner/5.jpg b/src/main/resources/static/image/user/home/banner/5.jpg new file mode 100644 index 0000000..f1c3832 Binary files /dev/null and b/src/main/resources/static/image/user/home/banner/5.jpg differ diff --git a/src/main/resources/static/image/user/home/banner/6.jpg b/src/main/resources/static/image/user/home/banner/6.jpg new file mode 100644 index 0000000..f1c3832 Binary files /dev/null and b/src/main/resources/static/image/user/home/banner/6.jpg differ diff --git a/src/main/resources/static/image/user/home/banner/7.jpg b/src/main/resources/static/image/user/home/banner/7.jpg new file mode 100644 index 0000000..f1c3832 Binary files /dev/null and b/src/main/resources/static/image/user/home/banner/7.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/1.jpg b/src/main/resources/static/image/user/home/blog/1.jpg new file mode 100644 index 0000000..f45acd2 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/1.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/2.jpg b/src/main/resources/static/image/user/home/blog/2.jpg new file mode 100644 index 0000000..f45acd2 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/2.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/3.jpg b/src/main/resources/static/image/user/home/blog/3.jpg new file mode 100644 index 0000000..f45acd2 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/3.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/4.jpg b/src/main/resources/static/image/user/home/blog/4.jpg new file mode 100644 index 0000000..f45acd2 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/4.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/5.jpg b/src/main/resources/static/image/user/home/blog/5.jpg new file mode 100644 index 0000000..f45acd2 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/5.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/author.png b/src/main/resources/static/image/user/home/blog/author.png new file mode 100644 index 0000000..b468924 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/author.png differ diff --git a/src/main/resources/static/image/user/home/blog/avatar-68x68.jpg b/src/main/resources/static/image/user/home/blog/avatar-68x68.jpg new file mode 100644 index 0000000..132ae80 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/avatar-68x68.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/avatar.png b/src/main/resources/static/image/user/home/blog/avatar.png new file mode 100644 index 0000000..14e4678 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/avatar.png differ diff --git a/src/main/resources/static/image/user/home/blog/blog1.jpg b/src/main/resources/static/image/user/home/blog/blog1.jpg new file mode 100644 index 0000000..e4c6804 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/blog1.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/blog2.jpg b/src/main/resources/static/image/user/home/blog/blog2.jpg new file mode 100644 index 0000000..e4c6804 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/blog2.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/blog3.jpg b/src/main/resources/static/image/user/home/blog/blog3.jpg new file mode 100644 index 0000000..e4c6804 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/blog3.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/comments/1.png b/src/main/resources/static/image/user/home/blog/comments/1.png new file mode 100644 index 0000000..b6c8b61 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/comments/1.png differ diff --git a/src/main/resources/static/image/user/home/blog/comments/2.jpg b/src/main/resources/static/image/user/home/blog/comments/2.jpg new file mode 100644 index 0000000..9e62512 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/comments/2.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/latest-blog/1.jpg b/src/main/resources/static/image/user/home/blog/latest-blog/1.jpg new file mode 100644 index 0000000..e8099d1 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/latest-blog/1.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/latest-blog/2.jpg b/src/main/resources/static/image/user/home/blog/latest-blog/2.jpg new file mode 100644 index 0000000..e8099d1 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/latest-blog/2.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/latest-blog/3.jpg b/src/main/resources/static/image/user/home/blog/latest-blog/3.jpg new file mode 100644 index 0000000..e8099d1 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/latest-blog/3.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/latest-blog/4.jpg b/src/main/resources/static/image/user/home/blog/latest-blog/4.jpg new file mode 100644 index 0000000..e8099d1 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/latest-blog/4.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/latest-blog/5.jpg b/src/main/resources/static/image/user/home/blog/latest-blog/5.jpg new file mode 100644 index 0000000..e8099d1 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/latest-blog/5.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/latest-blog/6.jpg b/src/main/resources/static/image/user/home/blog/latest-blog/6.jpg new file mode 100644 index 0000000..e8099d1 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/latest-blog/6.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/latest-blog/7.jpg b/src/main/resources/static/image/user/home/blog/latest-blog/7.jpg new file mode 100644 index 0000000..e8099d1 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/latest-blog/7.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/latest-blog/8.jpg b/src/main/resources/static/image/user/home/blog/latest-blog/8.jpg new file mode 100644 index 0000000..e8099d1 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/latest-blog/8.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/latest-blog/9.jpg b/src/main/resources/static/image/user/home/blog/latest-blog/9.jpg new file mode 100644 index 0000000..e8099d1 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/latest-blog/9.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/post-slider/1.jpg b/src/main/resources/static/image/user/home/blog/post-slider/1.jpg new file mode 100644 index 0000000..034df9f Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/post-slider/1.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/post-slider/2.jpg b/src/main/resources/static/image/user/home/blog/post-slider/2.jpg new file mode 100644 index 0000000..034df9f Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/post-slider/2.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/post-slider/3.jpg b/src/main/resources/static/image/user/home/blog/post-slider/3.jpg new file mode 100644 index 0000000..034df9f Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/post-slider/3.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/post-slider/4.jpg b/src/main/resources/static/image/user/home/blog/post-slider/4.jpg new file mode 100644 index 0000000..034df9f Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/post-slider/4.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/post-slider/5.jpg b/src/main/resources/static/image/user/home/blog/post-slider/5.jpg new file mode 100644 index 0000000..034df9f Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/post-slider/5.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/post/1.jpg b/src/main/resources/static/image/user/home/blog/post/1.jpg new file mode 100644 index 0000000..174183d Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/post/1.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/post/2.jpg b/src/main/resources/static/image/user/home/blog/post/2.jpg new file mode 100644 index 0000000..174183d Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/post/2.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/sidebar/1.jpg b/src/main/resources/static/image/user/home/blog/sidebar/1.jpg new file mode 100644 index 0000000..5178841 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/sidebar/1.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/sidebar/2.jpg b/src/main/resources/static/image/user/home/blog/sidebar/2.jpg new file mode 100644 index 0000000..5178841 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/sidebar/2.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/sidebar/3.jpg b/src/main/resources/static/image/user/home/blog/sidebar/3.jpg new file mode 100644 index 0000000..5178841 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/sidebar/3.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/sidebar/4.jpg b/src/main/resources/static/image/user/home/blog/sidebar/4.jpg new file mode 100644 index 0000000..5178841 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/sidebar/4.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/sidebar/5.jpg b/src/main/resources/static/image/user/home/blog/sidebar/5.jpg new file mode 100644 index 0000000..5178841 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/sidebar/5.jpg differ diff --git a/src/main/resources/static/image/user/home/blog/sidebar/6.jpg b/src/main/resources/static/image/user/home/blog/sidebar/6.jpg new file mode 100644 index 0000000..5178841 Binary files /dev/null and b/src/main/resources/static/image/user/home/blog/sidebar/6.jpg differ diff --git a/src/main/resources/static/image/user/home/brand/1.png b/src/main/resources/static/image/user/home/brand/1.png new file mode 100644 index 0000000..339524d Binary files /dev/null and b/src/main/resources/static/image/user/home/brand/1.png differ diff --git a/src/main/resources/static/image/user/home/cart.jpg b/src/main/resources/static/image/user/home/cart.jpg new file mode 100644 index 0000000..43afb7b Binary files /dev/null and b/src/main/resources/static/image/user/home/cart.jpg differ diff --git a/src/main/resources/static/image/user/home/cart/payment.png b/src/main/resources/static/image/user/home/cart/payment.png new file mode 100644 index 0000000..2210013 Binary files /dev/null and b/src/main/resources/static/image/user/home/cart/payment.png differ diff --git a/src/main/resources/static/image/user/home/cart2.jpg b/src/main/resources/static/image/user/home/cart2.jpg new file mode 100644 index 0000000..43afb7b Binary files /dev/null and b/src/main/resources/static/image/user/home/cart2.jpg differ diff --git a/src/main/resources/static/image/user/home/en.png b/src/main/resources/static/image/user/home/en.png new file mode 100644 index 0000000..9afcef0 Binary files /dev/null and b/src/main/resources/static/image/user/home/en.png differ diff --git a/src/main/resources/static/image/user/home/fancybox/blank.gif b/src/main/resources/static/image/user/home/fancybox/blank.gif new file mode 100644 index 0000000..35d42e8 Binary files /dev/null and b/src/main/resources/static/image/user/home/fancybox/blank.gif differ diff --git a/src/main/resources/static/image/user/home/fancybox/fancybox_buttons.png b/src/main/resources/static/image/user/home/fancybox/fancybox_buttons.png new file mode 100644 index 0000000..e0e1ea8 Binary files /dev/null and b/src/main/resources/static/image/user/home/fancybox/fancybox_buttons.png differ diff --git a/src/main/resources/static/image/user/home/fancybox/fancybox_loading.gif b/src/main/resources/static/image/user/home/fancybox/fancybox_loading.gif new file mode 100644 index 0000000..641a269 Binary files /dev/null and b/src/main/resources/static/image/user/home/fancybox/fancybox_loading.gif differ diff --git a/src/main/resources/static/image/user/home/fancybox/fancybox_sprite.png b/src/main/resources/static/image/user/home/fancybox/fancybox_sprite.png new file mode 100644 index 0000000..ae59713 Binary files /dev/null and b/src/main/resources/static/image/user/home/fancybox/fancybox_sprite.png differ diff --git a/src/main/resources/static/image/user/home/favicon.png b/src/main/resources/static/image/user/home/favicon.png new file mode 100644 index 0000000..bf82fdc Binary files /dev/null and b/src/main/resources/static/image/user/home/favicon.png differ diff --git a/src/main/resources/static/image/user/home/gallery/1L.jpg b/src/main/resources/static/image/user/home/gallery/1L.jpg new file mode 100644 index 0000000..5552d4b Binary files /dev/null and b/src/main/resources/static/image/user/home/gallery/1L.jpg differ diff --git a/src/main/resources/static/image/user/home/gallery/1S.jpg b/src/main/resources/static/image/user/home/gallery/1S.jpg new file mode 100644 index 0000000..7dd7fb7 Binary files /dev/null and b/src/main/resources/static/image/user/home/gallery/1S.jpg differ diff --git a/src/main/resources/static/image/user/home/gallery/2L.jpg b/src/main/resources/static/image/user/home/gallery/2L.jpg new file mode 100644 index 0000000..01eec2a Binary files /dev/null and b/src/main/resources/static/image/user/home/gallery/2L.jpg differ diff --git a/src/main/resources/static/image/user/home/gallery/2S.jpg b/src/main/resources/static/image/user/home/gallery/2S.jpg new file mode 100644 index 0000000..dc28f0d Binary files /dev/null and b/src/main/resources/static/image/user/home/gallery/2S.jpg differ diff --git a/src/main/resources/static/image/user/home/icon/email.jpg b/src/main/resources/static/image/user/home/icon/email.jpg new file mode 100644 index 0000000..15187be Binary files /dev/null and b/src/main/resources/static/image/user/home/icon/email.jpg differ diff --git a/src/main/resources/static/image/user/home/icon/facebook.png b/src/main/resources/static/image/user/home/icon/facebook.png new file mode 100644 index 0000000..f1fdde0 Binary files /dev/null and b/src/main/resources/static/image/user/home/icon/facebook.png differ diff --git a/src/main/resources/static/image/user/home/icon/googleplus.jpg b/src/main/resources/static/image/user/home/icon/googleplus.jpg new file mode 100644 index 0000000..c89de51 Binary files /dev/null and b/src/main/resources/static/image/user/home/icon/googleplus.jpg differ diff --git a/src/main/resources/static/image/user/home/icon/pinterest.jpg b/src/main/resources/static/image/user/home/icon/pinterest.jpg new file mode 100644 index 0000000..6bc7734 Binary files /dev/null and b/src/main/resources/static/image/user/home/icon/pinterest.jpg differ diff --git a/src/main/resources/static/image/user/home/icon/twitter.png b/src/main/resources/static/image/user/home/icon/twitter.png new file mode 100644 index 0000000..b8df990 Binary files /dev/null and b/src/main/resources/static/image/user/home/icon/twitter.png differ diff --git a/src/main/resources/static/image/user/home/logo/logo.png b/src/main/resources/static/image/user/home/logo/logo.png new file mode 100644 index 0000000..9c8e10a Binary files /dev/null and b/src/main/resources/static/image/user/home/logo/logo.png differ diff --git a/src/main/resources/static/image/user/home/map-marker.png b/src/main/resources/static/image/user/home/map-marker.png new file mode 100644 index 0000000..8844253 Binary files /dev/null and b/src/main/resources/static/image/user/home/map-marker.png differ diff --git a/src/main/resources/static/image/user/home/payment.png b/src/main/resources/static/image/user/home/payment.png new file mode 100644 index 0000000..61e4834 Binary files /dev/null and b/src/main/resources/static/image/user/home/payment.png differ diff --git a/src/main/resources/static/image/user/home/payment/card.png b/src/main/resources/static/image/user/home/payment/card.png new file mode 100644 index 0000000..377277a Binary files /dev/null and b/src/main/resources/static/image/user/home/payment/card.png differ diff --git a/src/main/resources/static/image/user/home/payment/dicove.png b/src/main/resources/static/image/user/home/payment/dicove.png new file mode 100644 index 0000000..fc62746 Binary files /dev/null and b/src/main/resources/static/image/user/home/payment/dicove.png differ diff --git a/src/main/resources/static/image/user/home/payment/maescard.png b/src/main/resources/static/image/user/home/payment/maescard.png new file mode 100644 index 0000000..332ef45 Binary files /dev/null and b/src/main/resources/static/image/user/home/payment/maescard.png differ diff --git a/src/main/resources/static/image/user/home/payment/paypal1.png b/src/main/resources/static/image/user/home/payment/paypal1.png new file mode 100644 index 0000000..8181747 Binary files /dev/null and b/src/main/resources/static/image/user/home/payment/paypal1.png differ diff --git a/src/main/resources/static/image/user/home/payment/visa.png b/src/main/resources/static/image/user/home/payment/visa.png new file mode 100644 index 0000000..59e8919 Binary files /dev/null and b/src/main/resources/static/image/user/home/payment/visa.png differ diff --git a/src/main/resources/static/image/user/home/product/1.jpg b/src/main/resources/static/image/user/home/product/1.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/1.jpg differ diff --git a/src/main/resources/static/image/user/home/product/10.jpg b/src/main/resources/static/image/user/home/product/10.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/10.jpg differ diff --git a/src/main/resources/static/image/user/home/product/11.jpg b/src/main/resources/static/image/user/home/product/11.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/11.jpg differ diff --git a/src/main/resources/static/image/user/home/product/12.jpg b/src/main/resources/static/image/user/home/product/12.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/12.jpg differ diff --git a/src/main/resources/static/image/user/home/product/13.jpg b/src/main/resources/static/image/user/home/product/13.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/13.jpg differ diff --git a/src/main/resources/static/image/user/home/product/14.jpg b/src/main/resources/static/image/user/home/product/14.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/14.jpg differ diff --git a/src/main/resources/static/image/user/home/product/15.jpg b/src/main/resources/static/image/user/home/product/15.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/15.jpg differ diff --git a/src/main/resources/static/image/user/home/product/16.jpg b/src/main/resources/static/image/user/home/product/16.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/16.jpg differ diff --git a/src/main/resources/static/image/user/home/product/17.jpg b/src/main/resources/static/image/user/home/product/17.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/17.jpg differ diff --git a/src/main/resources/static/image/user/home/product/18.jpg b/src/main/resources/static/image/user/home/product/18.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/18.jpg differ diff --git a/src/main/resources/static/image/user/home/product/19.jpg b/src/main/resources/static/image/user/home/product/19.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/19.jpg differ diff --git a/src/main/resources/static/image/user/home/product/2.jpg b/src/main/resources/static/image/user/home/product/2.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/2.jpg differ diff --git a/src/main/resources/static/image/user/home/product/20.jpg b/src/main/resources/static/image/user/home/product/20.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/20.jpg differ diff --git a/src/main/resources/static/image/user/home/product/21.jpg b/src/main/resources/static/image/user/home/product/21.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/21.jpg differ diff --git a/src/main/resources/static/image/user/home/product/22.jpg b/src/main/resources/static/image/user/home/product/22.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/22.jpg differ diff --git a/src/main/resources/static/image/user/home/product/23.jpg b/src/main/resources/static/image/user/home/product/23.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/23.jpg differ diff --git a/src/main/resources/static/image/user/home/product/3.jpg b/src/main/resources/static/image/user/home/product/3.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/3.jpg differ diff --git a/src/main/resources/static/image/user/home/product/4.jpg b/src/main/resources/static/image/user/home/product/4.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/4.jpg differ diff --git a/src/main/resources/static/image/user/home/product/5.jpg b/src/main/resources/static/image/user/home/product/5.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/5.jpg differ diff --git a/src/main/resources/static/image/user/home/product/6.jpg b/src/main/resources/static/image/user/home/product/6.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/6.jpg differ diff --git a/src/main/resources/static/image/user/home/product/7.jpg b/src/main/resources/static/image/user/home/product/7.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/7.jpg differ diff --git a/src/main/resources/static/image/user/home/product/8.jpg b/src/main/resources/static/image/user/home/product/8.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/8.jpg differ diff --git a/src/main/resources/static/image/user/home/product/9.jpg b/src/main/resources/static/image/user/home/product/9.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/9.jpg differ diff --git a/src/main/resources/static/image/user/home/product/pro-1.jpg b/src/main/resources/static/image/user/home/product/pro-1.jpg new file mode 100644 index 0000000..14d1f84 Binary files /dev/null and b/src/main/resources/static/image/user/home/product/pro-1.jpg differ diff --git a/src/main/resources/static/image/user/home/product/tab/1.jpg b/src/main/resources/static/image/user/home/product/tab/1.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/tab/1.jpg differ diff --git a/src/main/resources/static/image/user/home/product/tab/2.jpg b/src/main/resources/static/image/user/home/product/tab/2.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/tab/2.jpg differ diff --git a/src/main/resources/static/image/user/home/product/tab/3.jpg b/src/main/resources/static/image/user/home/product/tab/3.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/tab/3.jpg differ diff --git a/src/main/resources/static/image/user/home/product/tab/4.jpg b/src/main/resources/static/image/user/home/product/tab/4.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/tab/4.jpg differ diff --git a/src/main/resources/static/image/user/home/product/tab/s1.jpg b/src/main/resources/static/image/user/home/product/tab/s1.jpg new file mode 100644 index 0000000..43afb7b Binary files /dev/null and b/src/main/resources/static/image/user/home/product/tab/s1.jpg differ diff --git a/src/main/resources/static/image/user/home/product/tab/s2.jpg b/src/main/resources/static/image/user/home/product/tab/s2.jpg new file mode 100644 index 0000000..43afb7b Binary files /dev/null and b/src/main/resources/static/image/user/home/product/tab/s2.jpg differ diff --git a/src/main/resources/static/image/user/home/product/tab/s3.jpg b/src/main/resources/static/image/user/home/product/tab/s3.jpg new file mode 100644 index 0000000..43afb7b Binary files /dev/null and b/src/main/resources/static/image/user/home/product/tab/s3.jpg differ diff --git a/src/main/resources/static/image/user/home/product/tab/s4.jpg b/src/main/resources/static/image/user/home/product/tab/s4.jpg new file mode 100644 index 0000000..43afb7b Binary files /dev/null and b/src/main/resources/static/image/user/home/product/tab/s4.jpg differ diff --git a/src/main/resources/static/image/user/home/product/total-cart.jpg b/src/main/resources/static/image/user/home/product/total-cart.jpg new file mode 100644 index 0000000..43afb7b Binary files /dev/null and b/src/main/resources/static/image/user/home/product/total-cart.jpg differ diff --git a/src/main/resources/static/image/user/home/product/total-cart2.jpg b/src/main/resources/static/image/user/home/product/total-cart2.jpg new file mode 100644 index 0000000..43afb7b Binary files /dev/null and b/src/main/resources/static/image/user/home/product/total-cart2.jpg differ diff --git a/src/main/resources/static/image/user/home/product/women/1.jpg b/src/main/resources/static/image/user/home/product/women/1.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/women/1.jpg differ diff --git a/src/main/resources/static/image/user/home/product/women/2.jpg b/src/main/resources/static/image/user/home/product/women/2.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/women/2.jpg differ diff --git a/src/main/resources/static/image/user/home/product/women/3.jpg b/src/main/resources/static/image/user/home/product/women/3.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/women/3.jpg differ diff --git a/src/main/resources/static/image/user/home/product/women/4.jpg b/src/main/resources/static/image/user/home/product/women/4.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/women/4.jpg differ diff --git a/src/main/resources/static/image/user/home/product/women/5.jpg b/src/main/resources/static/image/user/home/product/women/5.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/women/5.jpg differ diff --git a/src/main/resources/static/image/user/home/product/women/6.jpg b/src/main/resources/static/image/user/home/product/women/6.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/women/6.jpg differ diff --git a/src/main/resources/static/image/user/home/product/women/7.jpg b/src/main/resources/static/image/user/home/product/women/7.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/women/7.jpg differ diff --git a/src/main/resources/static/image/user/home/product/women/8.jpg b/src/main/resources/static/image/user/home/product/women/8.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/women/8.jpg differ diff --git a/src/main/resources/static/image/user/home/product/women/9.jpg b/src/main/resources/static/image/user/home/product/women/9.jpg new file mode 100644 index 0000000..b6311ec Binary files /dev/null and b/src/main/resources/static/image/user/home/product/women/9.jpg differ diff --git a/src/main/resources/static/image/user/home/share-img.png b/src/main/resources/static/image/user/home/share-img.png new file mode 100644 index 0000000..bfbc3a9 Binary files /dev/null and b/src/main/resources/static/image/user/home/share-img.png differ diff --git a/src/main/resources/static/image/user/home/slider/slide-img1.jpg b/src/main/resources/static/image/user/home/slider/slide-img1.jpg new file mode 100644 index 0000000..37a1322 Binary files /dev/null and b/src/main/resources/static/image/user/home/slider/slide-img1.jpg differ diff --git a/src/main/resources/static/image/user/home/slider/slide-img2.jpg b/src/main/resources/static/image/user/home/slider/slide-img2.jpg new file mode 100644 index 0000000..46e73e7 Binary files /dev/null and b/src/main/resources/static/image/user/home/slider/slide-img2.jpg differ diff --git a/src/main/resources/static/image/user/po.jpg b/src/main/resources/static/image/user/po.jpg new file mode 100644 index 0000000..77dca94 Binary files /dev/null and b/src/main/resources/static/image/user/po.jpg differ diff --git a/src/main/resources/static/js/admin/index.js b/src/main/resources/static/js/admin/index.js new file mode 100644 index 0000000..27e0f02 --- /dev/null +++ b/src/main/resources/static/js/admin/index.js @@ -0,0 +1,3 @@ +$('.message a').click(function(){ + $('form').animate({height: "toggle", opacity: "toggle"}, "slow"); +}); \ No newline at end of file diff --git a/src/main/resources/static/js/admin/jquery.min.js b/src/main/resources/static/js/admin/jquery.min.js new file mode 100644 index 0000000..18bdbed --- /dev/null +++ b/src/main/resources/static/js/admin/jquery.min.js @@ -0,0 +1,5 @@ +/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) +},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("",error:'

The requested content cannot be loaded.
Please try again later.

',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, +openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, +isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=u(a)?f(a).get():[a]),f.each(a,function(e,c){var l={},g,h,k,n,m;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),u(c)?(l={href:c.data("fancybox-href")||c.attr("href"),title:f("
").text(c.data("fancybox-title")||c.attr("title")).html(),isDom:!0,element:c}, +f.metadata&&f.extend(!0,l,c.metadata())):l=c);g=d.href||l.href||(r(c)?c:null);h=d.title!==w?d.title:l.title||"";n=(k=d.content||l.content)?"html":d.type||l.type;!n&&l.isDom&&(n=c.data("fancybox-type"),n||(n=(n=c.prop("class").match(/fancybox\.(\w+)/))?n[1]:null));r(g)&&(n||(b.isImage(g)?n="image":b.isSWF(g)?n="swf":"#"===g.charAt(0)?n="inline":r(c)&&(n="html",k=c)),"ajax"===n&&(m=g.split(/\s+/,2),g=m.shift(),m=m.shift()));k||("inline"===n?g?k=f(r(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):l.isDom&&(k=c): +"html"===n?k=g:n||g||!l.isDom||(n="inline",k=c));f.extend(l,{href:g,type:n,content:k,title:h,selector:m});a[e]=l}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==w&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1===b.trigger("onCancel")||(b.hideLoading(),a&&(b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(), +b.coming=null,b.current||b._afterZoomOut(a)))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(b.isOpen&&!0!==a?(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]()):(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&& +(b.player.timer=setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};!0===a||!b.player.isActive&&!1!==a?b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==w&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,l;c&&(l=b._getPosition(d),a&&"scroll"===a.type?(delete l.position,c.stop(!0,!0).animate(l,200)):(c.css(l),e.pos=f.extend({},e.dim,l)))}, +update:function(a){var d=a&&a.originalEvent&&a.originalEvent.type,e=!d||"orientationchange"===d;e&&(clearTimeout(C),C=null);b.isOpen&&!C&&(C=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),C=null)},e&&!t?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,t&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"), +b.trigger("onUpdate")),b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){27===(a.which||a.keyCode)&&(a.preventDefault(),b.cancel())});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}));b.trigger("onLoading")},getViewport:function(){var a=b.current&& +b.current.locked||!1,d={x:q.scrollLeft(),y:q.scrollTop()};a&&a.length?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=t&&s.innerWidth?s.innerWidth:q.width(),d.h=t&&s.innerHeight?s.innerHeight:q.height());return d},unbindEvents:function(){b.wrap&&u(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");q.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(q.bind("orientationchange.fb"+(t?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c= +e.which||e.keyCode,l=e.target||e.srcElement;if(27===c&&b.coming)return!1;e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||l&&(l.type||f(l).is("[contenteditable]"))||f.each(d,function(d,l){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();0!==c&&!k&&1g||0>l)&&b.next(0>g?"up":"right"),d.preventDefault())}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&& +b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,{},b.helpers[d].defaults,e),c)})}p.trigger(a)},isImage:function(a){return r(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return r(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=m(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c, +c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"=== +c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=!0);"iframe"===c&&t&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(t?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,x(d.padding[a]))});b.trigger("onReady"); +if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width= +this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming, +d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",t?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);t||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload|| +b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,l,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove()); +b.unbindEvents();e=a.content;c=a.type;l=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
").html(e).find(a.selector):u(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder", +!1)}));break;case "image":e=a.tpl.image.replace(/\{href\}/g,g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}u(e)&&e.parent().is(a.inner)||a.inner.append(e);b.trigger("beforeShow"); +a.inner.css("overflow","yes"===l?"scroll":"no"===l?"hidden":l);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(!b.isOpened)f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();else if(d.prevMethod)b.transitions[d.prevMethod]();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,l=b.skin,g=b.inner,h=b.current,c=h.width,k=h.height,n=h.minWidth,v=h.minHeight,p=h.maxWidth, +q=h.maxHeight,t=h.scrolling,r=h.scrollOutside?h.scrollbarWidth:0,y=h.margin,z=m(y[1]+y[3]),s=m(y[0]+y[2]),w,A,u,D,B,G,C,E,I;e.add(l).add(g).width("auto").height("auto").removeClass("fancybox-tmp");y=m(l.outerWidth(!0)-l.width());w=m(l.outerHeight(!0)-l.height());A=z+y;u=s+w;D=F(c)?(a.w-A)*m(c)/100:c;B=F(k)?(a.h-u)*m(k)/100:k;if("iframe"===h.type){if(I=h.content,h.autoHeight&&1===I.data("ready"))try{I[0].contentWindow.document.location&&(g.width(D).height(9999),G=I.contents().find("body"),r&&G.css("overflow-x", +"hidden"),B=G.outerHeight(!0))}catch(H){}}else if(h.autoWidth||h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(D),h.autoHeight||g.height(B),h.autoWidth&&(D=g.width()),h.autoHeight&&(B=g.height()),g.removeClass("fancybox-tmp");c=m(D);k=m(B);E=D/B;n=m(F(n)?m(n,"w")-A:n);p=m(F(p)?m(p,"w")-A:p);v=m(F(v)?m(v,"h")-u:v);q=m(F(q)?m(q,"h")-u:q);G=p;C=q;h.fitToView&&(p=Math.min(a.w-A,p),q=Math.min(a.h-u,q));A=a.w-z;s=a.h-s;h.aspectRatio?(c>p&&(c=p,k=m(c/E)),k>q&&(k=q,c=m(k*E)),cA||z>s)&&c>n&&k>v&&!(19p&&(c=p,k=m(c/E)),g.width(c).height(k),e.width(c+y),a=e.width(),z=e.height();else c=Math.max(n,Math.min(c,c-(a-A))),k=Math.max(v,Math.min(k,k-(z-s)));r&&"auto"===t&&kA||z>s)&&c>n&&k>v;c=h.aspectRatio?cv&&k
').appendTo(d&&d.lenth?d:"body");this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(q.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay", +function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){q.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),this.el.removeClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%"); +J?(b=Math.max(H.documentElement.offsetWidth,H.body.offsetWidth),p.width()>b&&(a=p.width())):p.width()>q.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&this.fixed&&b.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&!this.el.hasClass("fancybox-lock")&&(!1!==this.fixPosition&&f("*").filter(function(){return"fixed"=== +f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin"),this.scrollV=q.scrollTop(),this.scrollH=q.scrollLeft(),this.el.addClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float", +position:"bottom"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(r(e)&&""!==f.trim(e)){d=f('
'+e+"
");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),J&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(m(d.css("margin-bottom")))}d["top"===a.position?"prependTo": +"appendTo"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||"",l=function(g){var h=f(this).blur(),k=d,l,m;g.ctrlKey||g.altKey||g.shiftKey||g.metaKey||h.is(".fancybox-wrap")||(l=a.groupAttr||"data-fancybox-group",m=h.attr(l),m||(l="rel",m=h.get(0)[l]),m&&""!==m&&"nofollow"!==m&&(h=c.length?f(c):e,h=h.filter("["+l+'="'+m+'"]'),k=h.index(this)),a.index=k,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;c&&!1!==a.live?p.undelegate(c,"click.fb-start").delegate(c+":not('.fancybox-item, .fancybox-nav')", +"click.fb-start",l):e.unbind("click.fb-start").bind("click.fb-start",l);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===w&&(f.scrollbarWidth=function(){var a=f('
').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});f.support.fixedPosition===w&&(f.support.fixedPosition=function(){var a=f('
').appendTo("body"), +b=20===a[0].offsetTop||15===a[0].offsetTop;a.remove();return b}());f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(s).width();K.addClass("fancybox-lock-test");d=f(s).width();K.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); \ No newline at end of file diff --git a/src/main/resources/static/js/user/home/jquery.collapse.js b/src/main/resources/static/js/user/home/jquery.collapse.js new file mode 100644 index 0000000..cb78062 --- /dev/null +++ b/src/main/resources/static/js/user/home/jquery.collapse.js @@ -0,0 +1,173 @@ +/* + * Collapse plugin for jQuery + * -- + * source: http://github.com/danielstocks/jQuery-Collapse/ + * site: http://webcloud.se/jQuery-Collapse + * + * @author Daniel Stocks (http://webcloud.se) + * Copyright 2013, Daniel Stocks + * Released under the MIT, BSD, and GPL Licenses. + */ + +(function($, exports) { + + // Constructor + function Collapse (el, options) { + options = options || {}; + var _this = this, + query = options.query || "> :even"; + + $.extend(_this, { + $el: el, + options : options, + sections: [], + isAccordion : options.accordion || false, + db : options.persist ? jQueryCollapseStorage(el.get(0).id) : false + }); + + // Figure out what sections are open if storage is used + _this.states = _this.db ? _this.db.read() : []; + + // For every pair of elements in given + // element, create a section + _this.$el.find(query).each(function() { + new jQueryCollapseSection($(this), _this); + }); + + // Capute ALL the clicks! + (function(scope) { + _this.$el.on("click", "[data-collapse-summary] " + (scope.options.clickQuery || ""), + $.proxy(_this.handleClick, scope)); + + _this.$el.bind("toggle close open", + $.proxy(_this.handleEvent, scope)); + + }(_this)); + } + + Collapse.prototype = { + handleClick: function(e, state) { + e.preventDefault(); + state = state || "toggle"; + var sections = this.sections, + l = sections.length; + while(l--) { + if($.contains(sections[l].$summary[0], e.target)) { + sections[l][state](); + break; + } + } + }, + handleEvent: function(e) { + if(e.target == this.$el.get(0)) return this[e.type](); + this.handleClick(e, e.type); + }, + open: function(eq) { + this._change("open", eq); + }, + close: function(eq) { + this._change("close", eq); + }, + toggle: function(eq) { + this._change("toggle", eq); + }, + _change: function(action, eq) { + if(isFinite(eq)) return this.sections[eq][action](); + $.each(this.sections, function(i, section) { + section[action](); + }); + } + }; + + // Section constructor + function Section($el, parent) { + + if(!parent.options.clickQuery) $el.wrapInner(''); + + $.extend(this, { + isOpen : false, + $summary : $el.attr("data-collapse-summary",""), + $details : $el.next(), + options: parent.options, + parent: parent + }); + parent.sections.push(this); + + // Check current state of section + var state = parent.states[this._index()]; + + if(state === 0) { + this.close(true); + } + else if(this.$summary.is(".open") || state === 1) { + this.open(true); + } else { + this.close(true); + } + } + + Section.prototype = { + toggle : function() { + this.isOpen ? this.close() : this.open(); + }, + close: function(bypass) { + this._changeState("close", bypass); + }, + open: function(bypass) { + var _this = this; + if(_this.options.accordion && !bypass) { + $.each(_this.parent.sections, function(i, section) { + section.close(); + }); + } + _this._changeState("open", bypass); + }, + _index: function() { + return $.inArray(this, this.parent.sections); + }, + _changeState: function(state, bypass) { + + var _this = this; + _this.isOpen = state == "open"; + if($.isFunction(_this.options[state]) && !bypass) { + _this.options[state].apply(_this.$details); + } else { + _this.$details[_this.isOpen ? "show" : "hide"](); + } + + _this.$summary.toggleClass("open", state !== "close"); + _this.$details.attr("aria-hidden", state === "close"); + _this.$summary.attr("aria-expanded", state === "open"); + _this.$summary.trigger(state === "open" ? "opened" : "closed", _this); + if(_this.parent.db) { + _this.parent.db.write(_this._index(), _this.isOpen); + } + } + }; + + // Expose in jQuery API + $.fn.extend({ + collapse: function(options, scan) { + var nodes = (scan) ? $("body").find("[data-collapse]") : $(this); + return nodes.each(function() { + var settings = (scan) ? {} : options, + values = $(this).attr("data-collapse") || ""; + $.each(values.split(" "), function(i,v) { + if(v) settings[v] = true; + }); + new Collapse($(this), settings); + }); + } + }); + + //jQuery DOM Ready + $(function() { + $.fn.collapse(false, true); + }); + + // Expose constructor to + // global namespace + exports.jQueryCollapse = Collapse; + exports.jQueryCollapseSection = Section; + +})(window.jQuery, window); diff --git a/src/main/resources/static/js/user/home/jquery.countdown.min.js b/src/main/resources/static/js/user/home/jquery.countdown.min.js new file mode 100644 index 0000000..69ac42a --- /dev/null +++ b/src/main/resources/static/js/user/home/jquery.countdown.min.js @@ -0,0 +1,22 @@ +/*! + * The Final Countdown for jQuery v2.0.4 (http://hilios.github.io/jQuery.countdown/) + * Copyright (c) 2014 Edson Hilios + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){"use strict";function b(a){if(a instanceof Date)return a;if(String(a).match(g))return String(a).match(/^[0-9]*$/)&&(a=Number(a)),String(a).match(/\-/)&&(a=String(a).replace(/\-/g,"/")),new Date(a);throw new Error("Couldn't cast `"+a+"` to a date object.")}function c(a){return function(b){var c=b.match(/%(-|!)?[A-Z]{1}(:[^;]+;)?/gi);if(c)for(var e=0,f=c.length;f>e;++e){var g=c[e].match(/%(-|!)?([a-zA-Z]{1})(:[^;]+;)?/),i=new RegExp(g[0]),j=g[1]||"",k=g[3]||"",l=null;g=g[2],h.hasOwnProperty(g)&&(l=h[g],l=Number(a[l])),null!==l&&("!"===j&&(l=d(k,l)),""===j&&10>l&&(l="0"+l.toString()),b=b.replace(i,l.toString()))}return b=b.replace(/%%/,"%")}}function d(a,b){var c="s",d="";return a&&(a=a.replace(/(:|;|\s)/gi,"").split(/\,/),1===a.length?c=a[0]:(d=a[0],c=a[1])),1===Math.abs(b)?d:c}var e=100,f=[],g=[];g.push(/^[0-9]*$/.source),g.push(/([0-9]{1,2}\/){2}[0-9]{4}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g.push(/[0-9]{4}([\/\-][0-9]{1,2}){2}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g=new RegExp(g.join("|"));var h={Y:"years",m:"months",w:"weeks",d:"days",D:"totalDays",H:"hours",M:"minutes",S:"seconds"},i=function(b,c,d){this.el=b,this.$el=a(b),this.interval=null,this.offset={},this.instanceNumber=f.length,f.push(this),this.$el.data("countdown-instance",this.instanceNumber),d&&(this.$el.on("update.countdown",d),this.$el.on("stoped.countdown",d),this.$el.on("finish.countdown",d)),this.setFinalDate(c),this.start()};a.extend(i.prototype,{start:function(){null!==this.interval&&clearInterval(this.interval);var a=this;this.update(),this.interval=setInterval(function(){a.update.call(a)},e)},stop:function(){clearInterval(this.interval),this.interval=null,this.dispatchEvent("stoped")},pause:function(){this.stop.call(this)},resume:function(){this.start.call(this)},remove:function(){this.stop(),f[this.instanceNumber]=null,delete this.$el.data().countdownInstance},setFinalDate:function(a){this.finalDate=b(a)},update:function(){return 0===this.$el.closest("html").length?void this.remove():(this.totalSecsLeft=this.finalDate.getTime()-(new Date).getTime(),this.totalSecsLeft=Math.ceil(this.totalSecsLeft/1e3),this.totalSecsLeft=this.totalSecsLeft<0?0:this.totalSecsLeft,this.offset={seconds:this.totalSecsLeft%60,minutes:Math.floor(this.totalSecsLeft/60)%60,hours:Math.floor(this.totalSecsLeft/60/60)%24,days:Math.floor(this.totalSecsLeft/60/60/24)%7,totalDays:Math.floor(this.totalSecsLeft/60/60/24),weeks:Math.floor(this.totalSecsLeft/60/60/24/7),months:Math.floor(this.totalSecsLeft/60/60/24/30),years:Math.floor(this.totalSecsLeft/60/60/24/365)},void(0===this.totalSecsLeft?(this.stop(),this.dispatchEvent("finish")):this.dispatchEvent("update")))},dispatchEvent:function(b){var d=a.Event(b+".countdown");d.finalDate=this.finalDate,d.offset=a.extend({},this.offset),d.strftime=c(this.offset),this.$el.trigger(d)}}),a.fn.countdown=function(){var b=Array.prototype.slice.call(arguments,0);return this.each(function(){var c=a(this).data("countdown-instance");if(void 0!==c){var d=f[c],e=b[0];i.prototype.hasOwnProperty(e)?d[e].apply(d,b.slice(1)):null===String(e).match(/^[$A-Z_][0-9A-Z_$]*$/i)?(d.setFinalDate.call(d,e),d.start()):a.error("Method %s does not exist on jQuery.countdown".replace(/\%s/gi,e))}else new i(this,b[0],b[1])})}}); \ No newline at end of file diff --git a/src/main/resources/static/js/user/home/jquery.counterup.min.js b/src/main/resources/static/js/user/home/jquery.counterup.min.js new file mode 100644 index 0000000..cddf5a1 --- /dev/null +++ b/src/main/resources/static/js/user/home/jquery.counterup.min.js @@ -0,0 +1,8 @@ +/*! +* jquery.counterup.js 1.0 +* +* Copyright 2013, Benjamin Intal http://gambit.ph @bfintal +* Released under the GPL v2 License +* +* Date: Nov 26, 2013 +*/(function(e){"use strict";e.fn.counterUp=function(t){var n=e.extend({time:400,delay:10},t);return this.each(function(){var t=e(this),r=n,i=function(){var e=[],n=r.time/r.delay,i=t.text(),s=/[0-9]+,[0-9]+/.test(i);i=i.replace(/,/g,"");var o=/^[0-9]+$/.test(i),u=/^[0-9]+\.[0-9]+$/.test(i),a=u?(i.split(".")[1]||[]).length:0;for(var f=n;f>=1;f--){var l=parseInt(i/n*f);u&&(l=parseFloat(i/n*f).toFixed(a));if(s)while(/(\d+)(\d{3})/.test(l.toString()))l=l.toString().replace(/(\d+)(\d{3})/,"$1,$2");e.unshift(l)}t.data("counterup-nums",e);t.text("0");var c=function(){t.text(t.data("counterup-nums").shift());if(t.data("counterup-nums").length)setTimeout(t.data("counterup-func"),r.delay);else{delete t.data("counterup-nums");t.data("counterup-nums",null);t.data("counterup-func",null)}};t.data("counterup-func",c);setTimeout(t.data("counterup-func"),r.delay)};t.waypoint(i,{offset:"100%",triggerOnce:!0})})}})(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/js/user/home/jquery.meanmenu.js b/src/main/resources/static/js/user/home/jquery.meanmenu.js new file mode 100644 index 0000000..81efd1e --- /dev/null +++ b/src/main/resources/static/js/user/home/jquery.meanmenu.js @@ -0,0 +1,285 @@ +/*! +* jQuery meanMenu v2.0.8 +* @Copyright (C) 2012-2014 Chris Wharton @ MeanThemes (https://github.com/meanthemes/meanMenu) +* +*/ +/* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT +* HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, +* INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR +* FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE +* OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, +* COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.COPYRIGHT HOLDERS WILL NOT +* BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL +* DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* Find more information at http://www.meanthemes.com/plugins/meanmenu/ +* +*/ +(function ($) { + "use strict"; + $.fn.meanmenu = function (options) { + var defaults = { + meanMenuTarget: jQuery(this), // Target the current HTML markup you wish to replace + meanMenuContainer: '.mobile-menu-area .container', // Choose where meanmenu will be placed within the HTML + meanMenuClose: "X", // single character you want to represent the close menu button + meanMenuCloseSize: "18px", // set font size of close button + meanMenuOpen: "", // text/markup you want when menu is closed + meanRevealPosition: "right", // left right or center positions + meanRevealPositionDistance: "0", // Tweak the position of the menu + meanRevealColour: "", // override CSS colours for the reveal background + meanScreenWidth: "767", // set the screen width you want meanmenu to kick in at + meanNavPush: "", // set a height here in px, em or % if you want to budge your layout now the navigation is missing. + meanShowChildren: true, // true to show children in the menu, false to hide them + meanExpandableChildren: true, // true to allow expand/collapse children + meanExpand: "+", // single character you want to represent the expand for ULs + meanContract: "-", // single character you want to represent the contract for ULs + meanRemoveAttrs: false, // true to remove classes and IDs, false to keep them + onePage: false, // set to true for one page sites + meanDisplay: "block", // override display method for table cell based layouts e.g. table-cell + removeElements: "" // set to hide page elements + }; + options = $.extend(defaults, options); + + // get browser width + var currentWidth = window.innerWidth || document.documentElement.clientWidth; + + return this.each(function () { + var meanMenu = options.meanMenuTarget; + var meanContainer = options.meanMenuContainer; + var meanMenuClose = options.meanMenuClose; + var meanMenuCloseSize = options.meanMenuCloseSize; + var meanMenuOpen = options.meanMenuOpen; + var meanRevealPosition = options.meanRevealPosition; + var meanRevealPositionDistance = options.meanRevealPositionDistance; + var meanRevealColour = options.meanRevealColour; + var meanScreenWidth = options.meanScreenWidth; + var meanNavPush = options.meanNavPush; + var meanRevealClass = ".meanmenu-reveal"; + var meanShowChildren = options.meanShowChildren; + var meanExpandableChildren = options.meanExpandableChildren; + var meanExpand = options.meanExpand; + var meanContract = options.meanContract; + var meanRemoveAttrs = options.meanRemoveAttrs; + var onePage = options.onePage; + var meanDisplay = options.meanDisplay; + var removeElements = options.removeElements; + + //detect known mobile/tablet usage + var isMobile = false; + if ( (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i)) || (navigator.userAgent.match(/Android/i)) || (navigator.userAgent.match(/Blackberry/i)) || (navigator.userAgent.match(/Windows Phone/i)) ) { + isMobile = true; + } + + if ( (navigator.userAgent.match(/MSIE 8/i)) || (navigator.userAgent.match(/MSIE 7/i)) ) { + // add scrollbar for IE7 & 8 to stop breaking resize function on small content sites + jQuery('html').css("overflow-y" , "scroll"); + } + + var meanRevealPos = ""; + var meanCentered = function() { + if (meanRevealPosition === "center") { + var newWidth = window.innerWidth || document.documentElement.clientWidth; + var meanCenter = ( (newWidth/2)-22 )+"px"; + meanRevealPos = "left:" + meanCenter + ";right:auto;"; + + if (!isMobile) { + jQuery('.meanmenu-reveal').css("left",meanCenter); + } else { + jQuery('.meanmenu-reveal').animate({ + left: meanCenter + }); + } + } + }; + + var menuOn = false; + var meanMenuExist = false; + + + if (meanRevealPosition === "right") { + meanRevealPos = "right:" + meanRevealPositionDistance + ";left:auto;"; + } + if (meanRevealPosition === "left") { + meanRevealPos = "left:" + meanRevealPositionDistance + ";right:auto;"; + } + // run center function + meanCentered(); + + // set all styles for mean-reveal + var $navreveal = ""; + + var meanInner = function() { + // get last class name + if (jQuery($navreveal).is(".meanmenu-reveal.meanclose")) { + $navreveal.html(meanMenuClose); + } else { + $navreveal.html(meanMenuOpen); + } + }; + + // re-instate original nav (and call this on window.width functions) + var meanOriginal = function() { + jQuery('.mean-bar,.mean-push').remove(); + jQuery(meanContainer).removeClass("mean-container"); + jQuery(meanMenu).css('display', meanDisplay); + menuOn = false; + meanMenuExist = false; + jQuery(removeElements).removeClass('mean-remove'); + }; + + // navigation reveal + var showMeanMenu = function() { + var meanStyles = "background:"+meanRevealColour+";color:"+meanRevealColour+";"+meanRevealPos; + if (currentWidth <= meanScreenWidth) { + jQuery(removeElements).addClass('mean-remove'); + meanMenuExist = true; + // add class to body so we don't need to worry about media queries here, all CSS is wrapped in '.mean-container' + jQuery(meanContainer).addClass("mean-container"); + jQuery('.mean-container').prepend(''); + + //push meanMenu navigation into .mean-nav + var meanMenuContents = jQuery(meanMenu).html(); + jQuery('.mean-nav').html(meanMenuContents); + + // remove all classes from EVERYTHING inside meanmenu nav + if(meanRemoveAttrs) { + jQuery('nav.mean-nav ul, nav.mean-nav ul *').each(function() { + // First check if this has mean-remove class + if (jQuery(this).is('.mean-remove')) { + jQuery(this).attr('class', 'mean-remove'); + } else { + jQuery(this).removeAttr("class"); + } + jQuery(this).removeAttr("id"); + }); + } + + // push in a holder div (this can be used if removal of nav is causing layout issues) + jQuery(meanMenu).before('
'); + jQuery('.mean-push').css("margin-top",meanNavPush); + + // hide current navigation and reveal mean nav link + jQuery(meanMenu).hide(); + jQuery(".meanmenu-reveal").show(); + + // turn 'X' on or off + jQuery(meanRevealClass).html(meanMenuOpen); + $navreveal = jQuery(meanRevealClass); + + //hide mean-nav ul + jQuery('.mean-nav ul').hide(); + + // hide sub nav + if(meanShowChildren) { + // allow expandable sub nav(s) + if(meanExpandableChildren){ + jQuery('.mean-nav ul ul').each(function() { + if(jQuery(this).children().length){ + jQuery(this,'li:first').parent().append(''+ meanExpand +''); + } + }); + jQuery('.mean-expand').on("click",function(e){ + e.preventDefault(); + if (jQuery(this).hasClass("mean-clicked")) { + jQuery(this).text(meanExpand); + jQuery(this).prev('ul').slideUp(300, function(){}); + } else { + jQuery(this).text(meanContract); + jQuery(this).prev('ul').slideDown(300, function(){}); + } + jQuery(this).toggleClass("mean-clicked"); + }); + } else { + jQuery('.mean-nav ul ul').show(); + } + } else { + jQuery('.mean-nav ul ul').hide(); + } + + // add last class to tidy up borders + jQuery('.mean-nav ul li').last().addClass('mean-last'); + $navreveal.removeClass("meanclose"); + jQuery($navreveal).click(function(e){ + e.preventDefault(); + if( menuOn === false ) { + $navreveal.css("text-align", "center"); + $navreveal.css("text-indent", "0"); + $navreveal.css("font-size", meanMenuCloseSize); + jQuery('.mean-nav ul:first').slideDown(); + menuOn = true; + } else { + jQuery('.mean-nav ul:first').slideUp(); + menuOn = false; + } + $navreveal.toggleClass("meanclose"); + meanInner(); + jQuery(removeElements).addClass('mean-remove'); + }); + + // for one page websites, reset all variables... + if ( onePage ) { + jQuery('.mean-nav ul > li > a:first-child').on( "click" , function () { + jQuery('.mean-nav ul:first').slideUp(); + menuOn = false; + jQuery($navreveal).toggleClass("meanclose").html(meanMenuOpen); + }); + } + } else { + meanOriginal(); + } + }; + + if (!isMobile) { + // reset menu on resize above meanScreenWidth + jQuery(window).resize(function () { + currentWidth = window.innerWidth || document.documentElement.clientWidth; + if (currentWidth > meanScreenWidth) { + meanOriginal(); + } else { + meanOriginal(); + } + if (currentWidth <= meanScreenWidth) { + showMeanMenu(); + meanCentered(); + } else { + meanOriginal(); + } + }); + } + + jQuery(window).resize(function () { + // get browser width + currentWidth = window.innerWidth || document.documentElement.clientWidth; + + if (!isMobile) { + meanOriginal(); + if (currentWidth <= meanScreenWidth) { + showMeanMenu(); + meanCentered(); + } + } else { + meanCentered(); + if (currentWidth <= meanScreenWidth) { + if (meanMenuExist === false) { + showMeanMenu(); + } + } else { + meanOriginal(); + } + } + }); + + // run main menuMenu function on load + showMeanMenu(); + }); + }; +})(jQuery); diff --git a/src/main/resources/static/js/user/home/jquery.mixitup.min.js b/src/main/resources/static/js/user/home/jquery.mixitup.min.js new file mode 100644 index 0000000..8507892 --- /dev/null +++ b/src/main/resources/static/js/user/home/jquery.mixitup.min.js @@ -0,0 +1,14 @@ +/**! + * MixItUp v2.1.9 + * + * @copyright Copyright 2015 KunkaLabs Limited. + * @author KunkaLabs Limited. + * @link https://mixitup.kunkalabs.com + * + * @license Commercial use requires a commercial license. + * https://mixitup.kunkalabs.com/licenses/ + * + * Non-commercial use permitted under terms of CC-BY-NC license. + * http://creativecommons.org/licenses/by-nc/3.0/ + */ +!function(a,b){a.MixItUp=function(){var b=this;b._execAction("_constructor",0),a.extend(b,{selectors:{target:".mix",filter:".filter",sort:".sort"},animation:{enable:!0,effects:"fade scale",duration:600,easing:"ease",perspectiveDistance:"3000",perspectiveOrigin:"50% 50%",queue:!0,queueLimit:1,animateChangeLayout:!1,animateResizeContainer:!0,animateResizeTargets:!1,staggerSequence:!1,reverseOut:!1},callbacks:{onMixLoad:!1,onMixStart:!1,onMixBusy:!1,onMixEnd:!1,onMixFail:!1,_user:!1},controls:{enable:!0,live:!1,toggleFilterButtons:!1,toggleLogic:"or",activeClass:"active"},layout:{display:"inline-block",containerClass:"",containerClassFail:"fail"},load:{filter:"all",sort:!1},_$body:null,_$container:null,_$targets:null,_$parent:null,_$sortButtons:null,_$filterButtons:null,_suckMode:!1,_mixing:!1,_sorting:!1,_clicking:!1,_loading:!0,_changingLayout:!1,_changingClass:!1,_changingDisplay:!1,_origOrder:[],_startOrder:[],_newOrder:[],_activeFilter:null,_toggleArray:[],_toggleString:"",_activeSort:"default:asc",_newSort:null,_startHeight:null,_newHeight:null,_incPadding:!0,_newDisplay:null,_newClass:null,_targetsBound:0,_targetsDone:0,_queue:[],_$show:a(),_$hide:a()}),b._execAction("_constructor",1)},a.MixItUp.prototype={constructor:a.MixItUp,_instances:{},_handled:{_filter:{},_sort:{}},_bound:{_filter:{},_sort:{}},_actions:{},_filters:{},extend:function(b){for(var c in b)a.MixItUp.prototype[c]=b[c]},addAction:function(b,c,d,e){a.MixItUp.prototype._addHook("_actions",b,c,d,e)},addFilter:function(b,c,d,e){a.MixItUp.prototype._addHook("_filters",b,c,d,e)},_addHook:function(b,c,d,e,f){var g=a.MixItUp.prototype[b],h={};f=1===f||"post"===f?"post":"pre",h[c]={},h[c][f]={},h[c][f][d]=e,a.extend(!0,g,h)},_init:function(b,c){var d=this;if(d._execAction("_init",0,arguments),c&&a.extend(!0,d,c),d._$body=a("body"),d._domNode=b,d._$container=a(b),d._$container.addClass(d.layout.containerClass),d._id=b.id,d._platformDetect(),d._brake=d._getPrefixedCSS("transition","none"),d._refresh(!0),d._$parent=d._$targets.parent().length?d._$targets.parent():d._$container,d.load.sort&&(d._newSort=d._parseSort(d.load.sort),d._newSortString=d.load.sort,d._activeSort=d.load.sort,d._sort(),d._printSort()),d._activeFilter="all"===d.load.filter?d.selectors.target:"none"===d.load.filter?"":d.load.filter,d.controls.enable&&d._bindHandlers(),d.controls.toggleFilterButtons){d._buildToggleArray();for(var e=0;e-1){var k=d._helpers._camelCase(i.substring(5,i.length));f.dataset[k]=j}}}f.mixParent===b&&(f.mixParent=d._id)}if(d._$targets.length&&a||!d._origOrder.length&&d._$targets.length){d._origOrder=[];for(var e=0;e-1)&&(a(e.selectors.sort).removeClass(e.controls.activeClass),f(c,d),e.sort(g))}if("filter"===d){var h,i=c.attr("data-filter"),j="or"===e.controls.toggleLogic?",":"";e.controls.toggleFilterButtons?(e._buildToggleArray(),c.hasClass(e.controls.activeClass)?(f(c,d,!0),h=e._toggleArray.indexOf(i),e._toggleArray.splice(h,1)):(f(c,d),e._toggleArray.push(i)),e._toggleArray=a.grep(e._toggleArray,function(a){return a}),e._toggleString=e._toggleArray.join(j),e.filter(e._toggleString)):c.hasClass(e.controls.activeClass)||(a(e.selectors.filter).removeClass(e.controls.activeClass),f(c,d),e.filter(i))}e._execAction("_processClick",1,arguments)}else"function"==typeof e.callbacks.onMixBusy&&e.callbacks.onMixBusy.call(e._domNode,e._state,e),e._execAction("_processClickBusy",1,arguments)},_buildToggleArray:function(){var a=this,b=a._activeFilter.replace(/\s/g,"");if(a._execAction("_buildToggleArray",0,arguments),"or"===a.controls.toggleLogic)a._toggleArray=b.split(",");else{a._toggleArray=b.split("."),!a._toggleArray[0]&&a._toggleArray.shift();for(var c,d=0;c=a._toggleArray[d];d++)a._toggleArray[d]="."+c}a._execAction("_buildToggleArray",1,arguments)},_updateControls:function(c,d){var e=this,f={filter:c.filter,sort:c.sort},g=function(a,b){try{d&&"filter"===h&&"none"!==f.filter&&""!==f.filter?a.filter(b).addClass(e.controls.activeClass):a.removeClass(e.controls.activeClass).filter(b).addClass(e.controls.activeClass)}catch(c){}},h="filter",i=null;e._execAction("_updateControls",0,arguments),c.filter===b&&(f.filter=e._activeFilter),c.sort===b&&(f.sort=e._activeSort),f.filter===e.selectors.target&&(f.filter="all");for(var j=0;2>j;j++)i=e.controls.live?a(e.selectors[h]):e["_$"+h+"Buttons"],i&&g(i,"[data-"+h+'="'+f[h]+'"]'),h="sort";e._execAction("_updateControls",1,arguments)},_filter:function(){var b=this;b._execAction("_filter",0);for(var c=0;cg?"asc"===e?-1:1:g>h?"asc"===e?1:-1:g===h&&d._newSort.length>c+1?d._compare(a,b,c+1):0},_printSort:function(a){var b=this,c=a?b._startOrder:b._newOrder,d=b._$parent[0].querySelectorAll(b.selectors.target),e=d.length?d[d.length-1].nextElementSibling:null,f=document.createDocumentFragment();b._execAction("_printSort",0,arguments);for(var g=0;g-1){if(c){var e=a.animation.effects.indexOf(b+"(");if(e>-1){var f=a.animation.effects.substring(e),g=/\(([^)]+)\)/.exec(f),h=g[1];return{val:h}}}return!0}return!1},d=function(a,b){return b?"-"===a.charAt(0)?a.substr(1,a.length):"-"+a:a},e=function(a,e){for(var f=[["scale",".01"],["translateX","20px"],["translateY","20px"],["translateZ","20px"],["rotateX","90deg"],["rotateY","90deg"],["rotateZ","180deg"]],g=0;gi;i++){var j=0===i?j=b._prefix:"";b._ff&&b._ff<=20&&(h[j+"transition-property"]="all",h[j+"transition-timing-function"]=b.animation.easing+"ms",h[j+"transition-duration"]=b.animation.duration+"ms"),h[j+"transition-delay"]=g+"ms",h[j+"transform"]="translate("+f.x+"px,"+f.y+"px)"}(b.effects.transform||b.effects.opacity)&&b._bindTargetDone(e),b._ff&&b._ff<=20?e.css(h):e.css(b.effects.transition).css(h)}for(var c=0;ci;i++){var j=0===i?j=b._prefix:"";k[j+"transition-delay"]=g+"ms",k[j+"transform"]=b.effects.transformOut,k.opacity=b.effects.opacity}e.css(b.effects.transition).css(k),(b.effects.transform||b.effects.opacity)&&b._bindTargetDone(e)}b._execAction("_animateTargets",1)},_bindTargetDone:function(b){var c=this,d=b[0];c._execAction("_bindTargetDone",0,arguments),d.dataset.bound||(d.dataset.bound=!0,c._targetsBound++,b.on("webkitTransitionEnd.mixItUp transitionend.mixItUp",function(e){(e.originalEvent.propertyName.indexOf("transform")>-1||e.originalEvent.propertyName.indexOf("opacity")>-1)&&a(e.originalEvent.target).is(c.selectors.target)&&(b.off(".mixItUp"),delete d.dataset.bound,c._targetDone())})),c._execAction("_bindTargetDone",1,arguments)},_targetDone:function(){var a=this;a._execAction("_targetDone",0),a._targetsDone++,a._targetsDone===a._targetsBound&&a._cleanUp(),a._execAction("_targetDone",1)},_cleanUp:function(){var b=this,c=b.animation.animateResizeTargets?"transform opacity width height margin-bottom margin-right":"transform opacity";unBrake=function(){b._$targets.removeStyle("transition",b._prefix)},b._execAction("_cleanUp",0),b._changingLayout?b._$show.css("display",b._newDisplay):b._$show.css("display",b.layout.display),b._$targets.css(b._brake),b._$targets.removeStyle(c,b._prefix).removeAttr("data-inter-pos-x data-inter-pos-y data-final-pos-x data-final-pos-y data-orig-pos-x data-orig-pos-y data-orig-height data-orig-width data-final-height data-final-width data-inter-width data-inter-height data-orig-margin-right data-orig-margin-bottom data-inter-margin-right data-inter-margin-bottom data-final-margin-right data-final-margin-bottom"),b._$hide.removeStyle("display"),b._$parent.removeStyle("height transition perspective-distance perspective perspective-origin-x perspective-origin-y perspective-origin perspectiveOrigin",b._prefix),b._sorting&&(b._printSort(),b._activeSort=b._newSortString,b._sorting=!1),b._changingLayout&&(b._changingDisplay&&(b.layout.display=b._newDisplay,b._changingDisplay=!1),b._changingClass&&(b._$parent.removeClass(b.layout.containerClass).addClass(b._newClass),b.layout.containerClass=b._newClass,b._changingClass=!1),b._changingLayout=!1),b._refresh(),b._buildState(),b._state.fail&&b._$container.addClass(b.layout.containerClassFail),b._$show=a(),b._$hide=a(),window.requestAnimationFrame&&requestAnimationFrame(unBrake),b._mixing=!1,"function"==typeof b.callbacks._user&&b.callbacks._user.call(b._domNode,b._state,b),"function"==typeof b.callbacks.onMixEnd&&b.callbacks.onMixEnd.call(b._domNode,b._state,b),b._$container.trigger("mixEnd",[b._state,b]),b._state.fail&&("function"==typeof b.callbacks.onMixFail&&b.callbacks.onMixFail.call(b._domNode,b._state,b),b._$container.trigger("mixFail",[b._state,b])),b._loading&&("function"==typeof b.callbacks.onMixLoad&&b.callbacks.onMixLoad.call(b._domNode,b._state,b),b._$container.trigger("mixLoad",[b._state,b])),b._queue.length&&(b._execAction("_queue",0),b.multiMix(b._queue[0][0],b._queue[0][1],b._queue[0][2]),b._queue.splice(0,1)),b._execAction("_cleanUp",1),b._loading=!1},_getPrefixedCSS:function(a,b,c){var d=this,e={},f="",g=-1;for(g=0;2>g;g++)f=0===g?d._prefix:"",c?e[f+a]=f+b:e[f+a]=b;return d._execFilter("_getPrefixedCSS",e,arguments)},_getDelay:function(a){var b=this,c="function"==typeof b.animation.staggerSequence?b.animation.staggerSequence.call(b._domNode,a,b._state):a,d=b.animation.stagger?c*b.animation.staggerDuration:0;return b._execFilter("_getDelay",d,arguments)},_parseMultiMixArgs:function(a){for(var b=this,c={command:null,animate:b.animation.enable,callback:null},d=0;dg;)h=d[g],g++;return a!==b?a[e]!==b?a[e]:a:void 0};return a?c._execFilter("getOption",d(c,a),arguments):c},setOptions:function(b){var c=this;c._execAction("setOptions",0,arguments),"object"==typeof b&&a.extend(!0,c,b),c._execAction("setOptions",1,arguments)},getState:function(){var a=this;return a._execFilter("getState",a._state,a)},forceRefresh:function(){var a=this;a._refresh(!1,!0)},destroy:function(b){var c=this,d=a.MixItUp.prototype._bound._filter,e=a.MixItUp.prototype._bound._sort;c._execAction("destroy",0,arguments),c._$body.add(a(c.selectors.sort)).add(a(c.selectors.filter)).off(".mixItUp");for(var f=0;f1?d[c.selectors.filter]--:1===d[c.selectors.filter]&&delete d[c.selectors.filter],e[c.selectors.sort]&&e[c.selectors.sort]>1?e[c.selectors.sort]--:1===e[c.selectors.sort]&&delete e[c.selectors.sort],delete a.MixItUp.prototype._instances[c._id]}},a.fn.mixItUp=function(){var c,d=arguments,e=[],f=function(b,c){var d=new a.MixItUp,e=function(){return("00000"+(16777216*Math.random()<<0).toString(16)).substr(-6).toUpperCase()};d._execAction("_instantiate",0,arguments),b.id=b.id?b.id:"MixItUp"+e(),d._instances[b.id]||(d._instances[b.id]=d,d._init(b,c)),d._execAction("_instantiate",1,arguments)};return c=this.each(function(){if(d&&"string"==typeof d[0]){var c=a.MixItUp.prototype._instances[this.id];if("isLoaded"===d[0])e.push(c?!0:!1);else{var g=c[d[0]](d[1],d[2],d[3]);g!==b&&e.push(g)}}else f(this,d[0])}),e.length?e.length>1?e:e[0]:c},a.fn.removeStyle=function(c,d){return d=d?d:"",this.each(function(){for(var e=this,f=c.split(" "),g=0;gh;h++){switch(h){case 0:var i=f[g];break;case 1:var i=a.MixItUp.prototype._helpers._camelCase(i);break;case 2:var i=d+f[g];break;case 3:var i=a.MixItUp.prototype._helpers._camelCase(d+f[g])}if(e.style[i]!==b&&"unknown"!=typeof e.style[i]&&e.style[i].length>0&&(e.style[i]=""),!d&&1===h)break}e.attributes&&e.attributes.style&&e.attributes.style!==b&&""===e.attributes.style.value&&e.attributes.removeNamedItem("style")})}}(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/js/user/home/jquery.scrollUp.min.js b/src/main/resources/static/js/user/home/jquery.scrollUp.min.js new file mode 100644 index 0000000..aa79e47 --- /dev/null +++ b/src/main/resources/static/js/user/home/jquery.scrollUp.min.js @@ -0,0 +1,7 @@ +/*! + * scrollup v2.4.1 + * Url: http://markgoodyear.com/labs/scrollup/ + * Copyright (c) Mark Goodyear — @markgdyr — http://markgoodyear.com + * License: MIT + */ +!function(l,o,e){"use strict";l.fn.scrollUp=function(o){l.data(e.body,"scrollUp")||(l.data(e.body,"scrollUp",!0),l.fn.scrollUp.init(o))},l.fn.scrollUp.init=function(r){var s,t,c,i,n,a,d,p=l.fn.scrollUp.settings=l.extend({},l.fn.scrollUp.defaults,r),f=!1;switch(d=p.scrollTrigger?l(p.scrollTrigger):l("",{id:p.scrollName,href:"#top"}),p.scrollTitle&&d.attr("title",p.scrollTitle),d.appendTo("body"),p.scrollImg||p.scrollTrigger||d.html(p.scrollText),d.css({display:"none",position:"fixed",zIndex:p.zIndex}),p.activeOverlay&&l("
",{id:p.scrollName+"-active"}).css({position:"absolute",top:p.scrollDistance+"px",width:"100%",borderTop:"1px dotted"+p.activeOverlay,zIndex:p.zIndex}).appendTo("body"),p.animation){case"fade":s="fadeIn",t="fadeOut",c=p.animationSpeed;break;case"slide":s="slideDown",t="slideUp",c=p.animationSpeed;break;default:s="show",t="hide",c=0}i="top"===p.scrollFrom?p.scrollDistance:l(e).height()-l(o).height()-p.scrollDistance,n=l(o).scroll(function(){l(o).scrollTop()>i?f||(d[s](c),f=!0):f&&(d[t](c),f=!1)}),p.scrollTarget?"number"==typeof p.scrollTarget?a=p.scrollTarget:"string"==typeof p.scrollTarget&&(a=Math.floor(l(p.scrollTarget).offset().top)):a=0,d.click(function(o){o.preventDefault(),l("html, body").animate({scrollTop:a},p.scrollSpeed,p.easingType)})},l.fn.scrollUp.defaults={scrollName:"scrollUp",scrollDistance:300,scrollFrom:"top",scrollSpeed:300,easingType:"linear",animation:"fade",animationSpeed:200,scrollTrigger:!1,scrollTarget:!1,scrollText:"Scroll to top",scrollTitle:!1,scrollImg:!1,activeOverlay:!1,zIndex:2147483647},l.fn.scrollUp.destroy=function(r){l.removeData(e.body,"scrollUp"),l("#"+l.fn.scrollUp.settings.scrollName).remove(),l("#"+l.fn.scrollUp.settings.scrollName+"-active").remove(),l.fn.jquery.split(".")[1]>=7?l(o).off("scroll",r):l(o).unbind("scroll",r)},l.scrollUp=l.fn.scrollUp}(jQuery,window,document); \ No newline at end of file diff --git a/src/main/resources/static/js/user/home/main.js b/src/main/resources/static/js/user/home/main.js new file mode 100644 index 0000000..0b49842 --- /dev/null +++ b/src/main/resources/static/js/user/home/main.js @@ -0,0 +1,287 @@ +(function ($) { + "use strict"; + +/*--------------------- + jQuery MeanMenu +--------------------- */ + jQuery('nav#dropdown').meanmenu(); + +/*--------------------- + mixItUp +--------------------- */ + $('.portfolio-content').mixItUp(); + + $("li:first-child.filter").addClass("active"); + +/*--------------------- + tooltip +--------------------- */ + $('[data-toggle="tooltip"]').tooltip(); + +/*-------------------------- + features-curosel +----------------------------*/ + $(".features-curosel").owlCarousel({ + + autoPlay: false, + slideSpeed:2000, + items : 4, + pagination:false, + navigation:true, + navigationText:["",""], + itemsDesktop : [1199,4], + itemsDesktopSmall : [979,3], + itemsMobile : [767,1] + + }); + +/*-------------------------------- + top-sells-curosel +---------------------------------- */ + $(".top-sells-curosel").owlCarousel({ + + autoPlay: false, + slideSpeed:2000, + items : 4, + pagination:false, + navigation:true, + navigationText:["",""], + itemsDesktop : [1199,3], + itemsDesktopSmall : [979,2], + itemsMobile : [767,1] + + }); + +/*---------------------------- + latest-blog-curosel +------------------------------ */ + $(".latest-blog-curosel").owlCarousel({ + + autoPlay: false, + slideSpeed:2000, + items : 3, + pagination:false, + navigation:true, + navigationText:["",""], + itemsDesktop : [1199,3], + itemsDesktopSmall : [979,3], + itemsMobile : [767,1] + + }); + +/*------------------------------ + brand-curosel +-------------------------------- */ + $(".brand-curosel").owlCarousel({ + + autoPlay: false, + slideSpeed:2000, + items : 6, + pagination:false, + navigation:true, + navigationText:["",""], + itemsDesktop : [1199,5], + itemsDesktopSmall : [979,4], + itemsTablet: [768,2], + itemsMobile : [479,1] + + }); + +/*------------------------------ + category-curosel +-------------------------------- */ + $(".category-curosel").owlCarousel({ + + autoPlay: 3000, + slideSpeed:3000, + items : 5, + pagination:false, + navigation:true, + navigationText:["",""], + itemsDesktop : [1199,5], + itemsDesktopSmall : [979,4], + itemsMobile : [767,1] + + }); + +/*------------------------------ + latest-deals-curosel +-------------------------------- */ + $(".latest-deals-curosel").owlCarousel({ + + autoPlay: false, + items : 1, + pagination:false, + navigation:false, + navigationText:["",""], + itemsDesktop : [1199,1], + itemsDesktopSmall : [979,1], + itemsMobile : [767,1] + + }); + +/*------------------------------ + top-sellers-curosel +-------------------------------- */ + $(".top-sellers-curosel").owlCarousel({ + + autoPlay: false, + slideSpeed:2000, + items : 4, + pagination:false, + navigation:true, + navigationText:["",""], + itemsDesktop : [1199,3], + itemsDesktopSmall : [979,3], + itemsMobile : [767,1] + + }); + +/*------------------------------ + new-product-curosel +-------------------------------- */ + $(".new-product-curosel").owlCarousel({ + + autoPlay: false, + slideSpeed:2000, + items : 2, + pagination:false, + navigation:true, + navigationText:["",""], + itemsDesktop : [1199,2], + itemsDesktopSmall : [979,1], + itemsMobile : [767,1] + + }); + +/*------------------------------ + blog-curosel-home-3 +-------------------------------- */ + $(".blog-curosel-home-3").owlCarousel({ + + autoPlay: false, + slideSpeed:2000, + items : 2, + pagination:true, + navigation:false, + navigationText:["",""], + itemsDesktop : [1199,2], + itemsDesktopSmall : [979,1], + itemsMobile : [767,1] + + }); + +/*------------------------------ + post-slider +-------------------------------- */ + $(".post-slider").owlCarousel({ + + autoPlay: 3000, + slideSpeed:2000, + items : 1, + pagination:false, + navigation:true, + navigationText:["",""], + itemsDesktop : [1199,1], + itemsDesktopSmall : [979,1], + itemsTablet: [600,1], + itemsMobile : [767,1] + + }); + +/* -------------------------------------------------------- + payment-accordion +* -------------------------------------------------------*/ + $(".payment-accordion").collapse({ + accordion:true, + open: function() { + this.slideDown(550); + }, + close: function() { + this.slideUp(550); + } + }); + +/*-------------------------- + scrollUp +---------------------------- */ + $.scrollUp({ + scrollText: '', + easingType: 'linear', + scrollSpeed: 900, + animation: 'fade' + }); + +/*------------------------- + showlogin toggle function +--------------------------*/ + $( '#showlogin' ).on('click', function() { + $( '#checkout-login' ).slideToggle(900); + }); + +/*------------------------- + showcoupon toggle function +--------------------------*/ + $( '#showcoupon' ).on('click', function() { + $( '#checkout_coupon' ).slideToggle(900); + }); + +/*------------------------- + Create an account toggle function +--------------------------*/ + $( '#cbox' ).on('click', function() { + $( '#cbox_info' ).slideToggle(900); + }); + +/*------------------------- + Create an account toggle function +--------------------------*/ + $( '#ship-box' ).on('click', function() { + $( '#ship-box-info' ).slideToggle(1000); + }); + + + +/*--------------------- + countdown +--------------------- */ + $('[data-countdown]').each(function() { + var $this = $(this), finalDate = $(this).data('countdown'); + $this.countdown(finalDate, function(event) { + $this.html(event.strftime('%-D

Days

%-H

Hour

%M

Min

%S

Sec

')); + }); + }); + +/*--------------------- + price slider +--------------------- */ + $(function() { + $( "#slider-range" ).slider({ + range: true, + min: 40, + max: 600, + values: [ 60, 570 ], + slide: function( event, ui ) { + $( "#amount" ).val( "£" + ui.values[ 0 ] + " - £" + ui.values[ 1 ] ); + } + }); + $( "#amount" ).val( "£" + $( "#slider-range" ).slider( "values", 0 ) + + " - £" + $( "#slider-range" ).slider( "values", 1 ) ); + }); + +/*--------------------- + fancybox +--------------------- */ + $('.fancybox').fancybox(); + +/*--------------------- + about-counter +--------------------- */ + $('.about-counter').counterUp({ + delay: 50, + time: 3000 + }); + + + +})(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/js/user/home/owl.carousel.min.js b/src/main/resources/static/js/user/home/owl.carousel.min.js new file mode 100644 index 0000000..394505e --- /dev/null +++ b/src/main/resources/static/js/user/home/owl.carousel.min.js @@ -0,0 +1,47 @@ +"function"!==typeof Object.create&&(Object.create=function(f){function g(){}g.prototype=f;return new g}); +(function(f,g,k){var l={init:function(a,b){this.$elem=f(b);this.options=f.extend({},f.fn.owlCarousel.options,this.$elem.data(),a);this.userOptions=a;this.loadContent()},loadContent:function(){function a(a){var d,e="";if("function"===typeof b.options.jsonSuccess)b.options.jsonSuccess.apply(this,[a]);else{for(d in a.owl)a.owl.hasOwnProperty(d)&&(e+=a.owl[d].item);b.$elem.html(e)}b.logIn()}var b=this,e;"function"===typeof b.options.beforeInit&&b.options.beforeInit.apply(this,[b.$elem]);"string"===typeof b.options.jsonPath? +(e=b.options.jsonPath,f.getJSON(e,a)):b.logIn()},logIn:function(){this.$elem.data("owl-originalStyles",this.$elem.attr("style"));this.$elem.data("owl-originalClasses",this.$elem.attr("class"));this.$elem.css({opacity:0});this.orignalItems=this.options.items;this.checkBrowser();this.wrapperWidth=0;this.checkVisible=null;this.setVars()},setVars:function(){if(0===this.$elem.children().length)return!1;this.baseClass();this.eventTypes();this.$userItems=this.$elem.children();this.itemsAmount=this.$userItems.length; +this.wrapItems();this.$owlItems=this.$elem.find(".owl-item");this.$owlWrapper=this.$elem.find(".owl-wrapper");this.playDirection="next";this.prevItem=0;this.prevArr=[0];this.currentItem=0;this.customEvents();this.onStartup()},onStartup:function(){this.updateItems();this.calculateAll();this.buildControls();this.updateControls();this.response();this.moveEvents();this.stopOnHover();this.owlStatus();!1!==this.options.transitionStyle&&this.transitionTypes(this.options.transitionStyle);!0===this.options.autoPlay&& +(this.options.autoPlay=5E3);this.play();this.$elem.find(".owl-wrapper").css("display","block");this.$elem.is(":visible")?this.$elem.css("opacity",1):this.watchVisibility();this.onstartup=!1;this.eachMoveUpdate();"function"===typeof this.options.afterInit&&this.options.afterInit.apply(this,[this.$elem])},eachMoveUpdate:function(){!0===this.options.lazyLoad&&this.lazyLoad();!0===this.options.autoHeight&&this.autoHeight();this.onVisibleItems();"function"===typeof this.options.afterAction&&this.options.afterAction.apply(this, +[this.$elem])},updateVars:function(){"function"===typeof this.options.beforeUpdate&&this.options.beforeUpdate.apply(this,[this.$elem]);this.watchVisibility();this.updateItems();this.calculateAll();this.updatePosition();this.updateControls();this.eachMoveUpdate();"function"===typeof this.options.afterUpdate&&this.options.afterUpdate.apply(this,[this.$elem])},reload:function(){var a=this;g.setTimeout(function(){a.updateVars()},0)},watchVisibility:function(){var a=this;if(!1===a.$elem.is(":visible"))a.$elem.css({opacity:0}), +g.clearInterval(a.autoPlayInterval),g.clearInterval(a.checkVisible);else return!1;a.checkVisible=g.setInterval(function(){a.$elem.is(":visible")&&(a.reload(),a.$elem.animate({opacity:1},200),g.clearInterval(a.checkVisible))},500)},wrapItems:function(){this.$userItems.wrapAll('
').wrap('
');this.$elem.find(".owl-wrapper").wrap('
');this.wrapperOuter=this.$elem.find(".owl-wrapper-outer");this.$elem.css("display","block")}, +baseClass:function(){var a=this.$elem.hasClass(this.options.baseClass),b=this.$elem.hasClass(this.options.theme);a||this.$elem.addClass(this.options.baseClass);b||this.$elem.addClass(this.options.theme)},updateItems:function(){var a,b;if(!1===this.options.responsive)return!1;if(!0===this.options.singleItem)return this.options.items=this.orignalItems=1,this.options.itemsCustom=!1,this.options.itemsDesktop=!1,this.options.itemsDesktopSmall=!1,this.options.itemsTablet=!1,this.options.itemsTabletSmall= +!1,this.options.itemsMobile=!1;a=f(this.options.responsiveBaseWidth).width();a>(this.options.itemsDesktop[0]||this.orignalItems)&&(this.options.items=this.orignalItems);if(!1!==this.options.itemsCustom)for(this.options.itemsCustom.sort(function(a,b){return a[0]-b[0]}),b=0;bthis.itemsAmount&& +!0===this.options.itemsScaleUp&&(this.options.items=this.itemsAmount)},response:function(){var a=this,b,e;if(!0!==a.options.responsive)return!1;e=f(g).width();a.resizer=function(){f(g).width()!==e&&(!1!==a.options.autoPlay&&g.clearInterval(a.autoPlayInterval),g.clearTimeout(b),b=g.setTimeout(function(){e=f(g).width();a.updateVars()},a.options.responsiveRefreshRate))};f(g).resize(a.resizer)},updatePosition:function(){this.jumpTo(this.currentItem);!1!==this.options.autoPlay&&this.checkAp()},appendItemsSizes:function(){var a= +this,b=0,e=a.itemsAmount-a.options.items;a.$owlItems.each(function(c){var d=f(this);d.css({width:a.itemWidth}).data("owl-item",Number(c));if(0===c%a.options.items||c===e)c>e||(b+=1);d.data("owl-roundPages",b)})},appendWrapperSizes:function(){this.$owlWrapper.css({width:this.$owlItems.length*this.itemWidth*2,left:0});this.appendItemsSizes()},calculateAll:function(){this.calculateWidth();this.appendWrapperSizes();this.loops();this.max()},calculateWidth:function(){this.itemWidth=Math.round(this.$elem.width()/ +this.options.items)},max:function(){var a=-1*(this.itemsAmount*this.itemWidth-this.options.items*this.itemWidth);this.options.items>this.itemsAmount?this.maximumPixels=a=this.maximumItem=0:(this.maximumItem=this.itemsAmount-this.options.items,this.maximumPixels=a);return a},min:function(){return 0},loops:function(){var a=0,b=0,e,c;this.positionsInArray=[0];this.pagesInArray=[];for(e=0;e').toggleClass("clickable",!this.browser.isTouch).appendTo(this.$elem);!0===this.options.pagination&&this.buildPagination();!0===this.options.navigation&&this.buildButtons()},buildButtons:function(){var a=this,b=f('
');a.owlControls.append(b);a.buttonPrev= +f("
",{"class":"owl-prev",html:a.options.navigationText[0]||""});a.buttonNext=f("
",{"class":"owl-next",html:a.options.navigationText[1]||""});b.append(a.buttonPrev).append(a.buttonNext);b.on("touchstart.owlControls mousedown.owlControls",'div[class^="owl"]',function(a){a.preventDefault()});b.on("touchend.owlControls mouseup.owlControls",'div[class^="owl"]',function(b){b.preventDefault();f(this).hasClass("owl-next")?a.next():a.prev()})},buildPagination:function(){var a=this;a.paginationWrapper= +f('
');a.owlControls.append(a.paginationWrapper);a.paginationWrapper.on("touchend.owlControls mouseup.owlControls",".owl-page",function(b){b.preventDefault();Number(f(this).data("owl-page"))!==a.currentItem&&a.goTo(Number(f(this).data("owl-page")),!0)})},updatePagination:function(){var a,b,e,c,d,g;if(!1===this.options.pagination)return!1;this.paginationWrapper.html("");a=0;b=this.itemsAmount-this.itemsAmount%this.options.items;for(c=0;c",{"class":"owl-page"}),g=f("",{text:!0===this.options.paginationNumbers?a:"","class":!0===this.options.paginationNumbers?"owl-numbers":""}),d.append(g),d.data("owl-page",b===c?e:c),d.data("owl-roundPages",a),this.paginationWrapper.append(d));this.checkPagination()},checkPagination:function(){var a=this;if(!1===a.options.pagination)return!1;a.paginationWrapper.find(".owl-page").each(function(){f(this).data("owl-roundPages")=== +f(a.$owlItems[a.currentItem]).data("owl-roundPages")&&(a.paginationWrapper.find(".owl-page").removeClass("active"),f(this).addClass("active"))})},checkNavigation:function(){if(!1===this.options.navigation)return!1;!1===this.options.rewindNav&&(0===this.currentItem&&0===this.maximumItem?(this.buttonPrev.addClass("disabled"),this.buttonNext.addClass("disabled")):0===this.currentItem&&0!==this.maximumItem?(this.buttonPrev.addClass("disabled"),this.buttonNext.removeClass("disabled")):this.currentItem=== +this.maximumItem?(this.buttonPrev.removeClass("disabled"),this.buttonNext.addClass("disabled")):0!==this.currentItem&&this.currentItem!==this.maximumItem&&(this.buttonPrev.removeClass("disabled"),this.buttonNext.removeClass("disabled")))},updateControls:function(){this.updatePagination();this.checkNavigation();this.owlControls&&(this.options.items>=this.itemsAmount?this.owlControls.hide():this.owlControls.show())},destroyControls:function(){this.owlControls&&this.owlControls.remove()},next:function(a){if(this.isTransition)return!1; +this.currentItem+=!0===this.options.scrollPerPage?this.options.items:1;if(this.currentItem>this.maximumItem+(!0===this.options.scrollPerPage?this.options.items-1:0))if(!0===this.options.rewindNav)this.currentItem=0,a="rewind";else return this.currentItem=this.maximumItem,!1;this.goTo(this.currentItem,a)},prev:function(a){if(this.isTransition)return!1;this.currentItem=!0===this.options.scrollPerPage&&0this.currentItem)if(!0===this.options.rewindNav)this.currentItem=this.maximumItem,a="rewind";else return this.currentItem=0,!1;this.goTo(this.currentItem,a)},goTo:function(a,b,e){var c=this;if(c.isTransition)return!1;"function"===typeof c.options.beforeMove&&c.options.beforeMove.apply(this,[c.$elem]);a>=c.maximumItem?a=c.maximumItem:0>=a&&(a=0);c.currentItem=c.owl.currentItem=a;if(!1!==c.options.transitionStyle&&"drag"!==e&&1===c.options.items&&!0===c.browser.support3d)return c.swapSpeed(0), +!0===c.browser.support3d?c.transition3d(c.positionsInArray[a]):c.css2slide(c.positionsInArray[a],1),c.afterGo(),c.singleItemTransition(),!1;a=c.positionsInArray[a];!0===c.browser.support3d?(c.isCss3Finish=!1,!0===b?(c.swapSpeed("paginationSpeed"),g.setTimeout(function(){c.isCss3Finish=!0},c.options.paginationSpeed)):"rewind"===b?(c.swapSpeed(c.options.rewindSpeed),g.setTimeout(function(){c.isCss3Finish=!0},c.options.rewindSpeed)):(c.swapSpeed("slideSpeed"),g.setTimeout(function(){c.isCss3Finish=!0}, +c.options.slideSpeed)),c.transition3d(a)):!0===b?c.css2slide(a,c.options.paginationSpeed):"rewind"===b?c.css2slide(a,c.options.rewindSpeed):c.css2slide(a,c.options.slideSpeed);c.afterGo()},jumpTo:function(a){"function"===typeof this.options.beforeMove&&this.options.beforeMove.apply(this,[this.$elem]);a>=this.maximumItem||-1===a?a=this.maximumItem:0>=a&&(a=0);this.swapSpeed(0);!0===this.browser.support3d?this.transition3d(this.positionsInArray[a]):this.css2slide(this.positionsInArray[a],1);this.currentItem= +this.owl.currentItem=a;this.afterGo()},afterGo:function(){this.prevArr.push(this.currentItem);this.prevItem=this.owl.prevItem=this.prevArr[this.prevArr.length-2];this.prevArr.shift(0);this.prevItem!==this.currentItem&&(this.checkPagination(),this.checkNavigation(),this.eachMoveUpdate(),!1!==this.options.autoPlay&&this.checkAp());"function"===typeof this.options.afterMove&&this.prevItem!==this.currentItem&&this.options.afterMove.apply(this,[this.$elem])},stop:function(){this.apStatus="stop";g.clearInterval(this.autoPlayInterval)}, +checkAp:function(){"stop"!==this.apStatus&&this.play()},play:function(){var a=this;a.apStatus="play";if(!1===a.options.autoPlay)return!1;g.clearInterval(a.autoPlayInterval);a.autoPlayInterval=g.setInterval(function(){a.next(!0)},a.options.autoPlay)},swapSpeed:function(a){"slideSpeed"===a?this.$owlWrapper.css(this.addCssSpeed(this.options.slideSpeed)):"paginationSpeed"===a?this.$owlWrapper.css(this.addCssSpeed(this.options.paginationSpeed)):"string"!==typeof a&&this.$owlWrapper.css(this.addCssSpeed(a))}, +addCssSpeed:function(a){return{"-webkit-transition":"all "+a+"ms ease","-moz-transition":"all "+a+"ms ease","-o-transition":"all "+a+"ms ease",transition:"all "+a+"ms ease"}},removeTransition:function(){return{"-webkit-transition":"","-moz-transition":"","-o-transition":"",transition:""}},doTranslate:function(a){return{"-webkit-transform":"translate3d("+a+"px, 0px, 0px)","-moz-transform":"translate3d("+a+"px, 0px, 0px)","-o-transform":"translate3d("+a+"px, 0px, 0px)","-ms-transform":"translate3d("+ +a+"px, 0px, 0px)",transform:"translate3d("+a+"px, 0px,0px)"}},transition3d:function(a){this.$owlWrapper.css(this.doTranslate(a))},css2move:function(a){this.$owlWrapper.css({left:a})},css2slide:function(a,b){var e=this;e.isCssFinish=!1;e.$owlWrapper.stop(!0,!0).animate({left:a},{duration:b||e.options.slideSpeed,complete:function(){e.isCssFinish=!0}})},checkBrowser:function(){var a=k.createElement("div");a.style.cssText=" -moz-transform:translate3d(0px, 0px, 0px); -ms-transform:translate3d(0px, 0px, 0px); -o-transform:translate3d(0px, 0px, 0px); -webkit-transform:translate3d(0px, 0px, 0px); transform:translate3d(0px, 0px, 0px)"; +a=a.style.cssText.match(/translate3d\(0px, 0px, 0px\)/g);this.browser={support3d:null!==a&&1===a.length,isTouch:"ontouchstart"in g||g.navigator.msMaxTouchPoints}},moveEvents:function(){if(!1!==this.options.mouseDrag||!1!==this.options.touchDrag)this.gestures(),this.disabledEvents()},eventTypes:function(){var a=["s","e","x"];this.ev_types={};!0===this.options.mouseDrag&&!0===this.options.touchDrag?a=["touchstart.owl mousedown.owl","touchmove.owl mousemove.owl","touchend.owl touchcancel.owl mouseup.owl"]: +!1===this.options.mouseDrag&&!0===this.options.touchDrag?a=["touchstart.owl","touchmove.owl","touchend.owl touchcancel.owl"]:!0===this.options.mouseDrag&&!1===this.options.touchDrag&&(a=["mousedown.owl","mousemove.owl","mouseup.owl"]);this.ev_types.start=a[0];this.ev_types.move=a[1];this.ev_types.end=a[2]},disabledEvents:function(){this.$elem.on("dragstart.owl",function(a){a.preventDefault()});this.$elem.on("mousedown.disableTextSelect",function(a){return f(a.target).is("input, textarea, select, option")})}, +gestures:function(){function a(a){if(void 0!==a.touches)return{x:a.touches[0].pageX,y:a.touches[0].pageY};if(void 0===a.touches){if(void 0!==a.pageX)return{x:a.pageX,y:a.pageY};if(void 0===a.pageX)return{x:a.clientX,y:a.clientY}}}function b(a){"on"===a?(f(k).on(d.ev_types.move,e),f(k).on(d.ev_types.end,c)):"off"===a&&(f(k).off(d.ev_types.move),f(k).off(d.ev_types.end))}function e(b){b=b.originalEvent||b||g.event;d.newPosX=a(b).x-h.offsetX;d.newPosY=a(b).y-h.offsetY;d.newRelativeX=d.newPosX-h.relativePos; +"function"===typeof d.options.startDragging&&!0!==h.dragging&&0!==d.newRelativeX&&(h.dragging=!0,d.options.startDragging.apply(d,[d.$elem]));(8d.newRelativeX)&&!0===d.browser.isTouch&&(void 0!==b.preventDefault?b.preventDefault():b.returnValue=!1,h.sliding=!0);(10d.newPosY)&&!1===h.sliding&&f(k).off("touchmove.owl");d.newPosX=Math.max(Math.min(d.newPosX,d.newRelativeX/5),d.maximumPixels+d.newRelativeX/5);!0===d.browser.support3d?d.transition3d(d.newPosX):d.css2move(d.newPosX)} +function c(a){a=a.originalEvent||a||g.event;var c;a.target=a.target||a.srcElement;h.dragging=!1;!0!==d.browser.isTouch&&d.$owlWrapper.removeClass("grabbing");d.dragDirection=0>d.newRelativeX?d.owl.dragDirection="left":d.owl.dragDirection="right";0!==d.newRelativeX&&(c=d.getNewPosition(),d.goTo(c,!1,"drag"),h.targetElement===a.target&&!0!==d.browser.isTouch&&(f(a.target).on("click.disable",function(a){a.stopImmediatePropagation();a.stopPropagation();a.preventDefault();f(a.target).off("click.disable")}), +a=f._data(a.target,"events").click,c=a.pop(),a.splice(0,0,c)));b("off")}var d=this,h={offsetX:0,offsetY:0,baseElWidth:0,relativePos:0,position:null,minSwipe:null,maxSwipe:null,sliding:null,dargging:null,targetElement:null};d.isCssFinish=!0;d.$elem.on(d.ev_types.start,".owl-wrapper",function(c){c=c.originalEvent||c||g.event;var e;if(3===c.which)return!1;if(!(d.itemsAmount<=d.options.items)){if(!1===d.isCssFinish&&!d.options.dragBeforeAnimFinish||!1===d.isCss3Finish&&!d.options.dragBeforeAnimFinish)return!1; +!1!==d.options.autoPlay&&g.clearInterval(d.autoPlayInterval);!0===d.browser.isTouch||d.$owlWrapper.hasClass("grabbing")||d.$owlWrapper.addClass("grabbing");d.newPosX=0;d.newRelativeX=0;f(this).css(d.removeTransition());e=f(this).position();h.relativePos=e.left;h.offsetX=a(c).x-e.left;h.offsetY=a(c).y-e.top;b("on");h.sliding=!1;h.targetElement=c.target||c.srcElement}})},getNewPosition:function(){var a=this.closestItem();a>this.maximumItem?a=this.currentItem=this.maximumItem:0<=this.newPosX&&(this.currentItem= +a=0);return a},closestItem:function(){var a=this,b=!0===a.options.scrollPerPage?a.pagesInArray:a.positionsInArray,e=a.newPosX,c=null;f.each(b,function(d,g){e-a.itemWidth/20>b[d+1]&&e-a.itemWidth/20(b[d+1]||b[d]-a.itemWidth)&&"right"===a.moveDirection()&&(!0===a.options.scrollPerPage?(c=b[d+1]||b[b.length-1],a.currentItem=f.inArray(c,a.positionsInArray)): +(c=b[d+1],a.currentItem=d+1))});return a.currentItem},moveDirection:function(){var a;0>this.newRelativeX?(a="right",this.playDirection="next"):(a="left",this.playDirection="prev");return a},customEvents:function(){var a=this;a.$elem.on("owl.next",function(){a.next()});a.$elem.on("owl.prev",function(){a.prev()});a.$elem.on("owl.play",function(b,e){a.options.autoPlay=e;a.play();a.hoverStatus="play"});a.$elem.on("owl.stop",function(){a.stop();a.hoverStatus="stop"});a.$elem.on("owl.goTo",function(b,e){a.goTo(e)}); +a.$elem.on("owl.jumpTo",function(b,e){a.jumpTo(e)})},stopOnHover:function(){var a=this;!0===a.options.stopOnHover&&!0!==a.browser.isTouch&&!1!==a.options.autoPlay&&(a.$elem.on("mouseover",function(){a.stop()}),a.$elem.on("mouseout",function(){"stop"!==a.hoverStatus&&a.play()}))},lazyLoad:function(){var a,b,e,c,d;if(!1===this.options.lazyLoad)return!1;for(a=0;a=this.currentItem:!0)&&e=f?g.setTimeout(c,100):e()}var d=this,f=0,k;"DIV"===b.prop("tagName")?(b.css("background-image","url("+b.data("src")+")"),k=!0):b[0].src=b.data("src");c()},autoHeight:function(){function a(){var a=f(e.$owlItems[e.currentItem]).height();e.wrapperOuter.css("height",a+"px");e.wrapperOuter.hasClass("autoHeight")||g.setTimeout(function(){e.wrapperOuter.addClass("autoHeight")},0)}function b(){d+=1;e.completeImg(c.get(0))?a():100>=d?g.setTimeout(b, +100):e.wrapperOuter.css("height","")}var e=this,c=f(e.$owlItems[e.currentItem]).find("img"),d;void 0!==c.get(0)?(d=0,b()):a()},completeImg:function(a){return!a.complete||"undefined"!==typeof a.naturalWidth&&0===a.naturalWidth?!1:!0},onVisibleItems:function(){var a;!0===this.options.addClassActive&&this.$owlItems.removeClass("active");this.visibleItems=[];for(a=this.currentItem;a=this.$userItems.length||-1===e?this.$userItems.eq(-1).after(a):this.$userItems.eq(e).before(a);this.setVars()},removeItem:function(a){if(0===this.$elem.children().length)return!1;a=void 0===a||-1===a?-1:a;this.unWrap();this.$userItems.eq(a).remove();this.setVars()}};f.fn.owlCarousel=function(a){return this.each(function(){if(!0=== +f(this).data("owl-init"))return!1;f(this).data("owl-init",!0);var b=Object.create(l);b.init(a,this);f.data(this,"owlCarousel",b)})};f.fn.owlCarousel.options={items:5,itemsCustom:!1,itemsDesktop:[1199,4],itemsDesktopSmall:[979,3],itemsTablet:[768,2],itemsTabletSmall:!1,itemsMobile:[479,1],singleItem:!1,itemsScaleUp:!1,slideSpeed:200,paginationSpeed:800,rewindSpeed:1E3,autoPlay:!1,stopOnHover:!1,navigation:!1,navigationText:["prev","next"],rewindNav:!0,scrollPerPage:!1,pagination:!0,paginationNumbers:!1, +responsive:!0,responsiveRefreshRate:200,responsiveBaseWidth:g,baseClass:"owl-carousel",theme:"owl-theme",lazyLoad:!1,lazyFollow:!0,lazyEffect:"fade",autoHeight:!1,jsonPath:!1,jsonSuccess:!1,dragBeforeAnimFinish:!0,mouseDrag:!0,touchDrag:!0,addClassActive:!1,transitionStyle:!1,beforeUpdate:!1,afterUpdate:!1,beforeInit:!1,afterInit:!1,beforeMove:!1,afterMove:!1,afterAction:!1,startDragging:!1,afterLazyLoad:!1}})(jQuery,window,document); \ No newline at end of file diff --git a/src/main/resources/static/js/user/home/plugins.js b/src/main/resources/static/js/user/home/plugins.js new file mode 100644 index 0000000..f887480 --- /dev/null +++ b/src/main/resources/static/js/user/home/plugins.js @@ -0,0 +1,24 @@ +// Avoid `console` errors in browsers that lack a console. +(function() { + var method; + var noop = function () {}; + var methods = [ + 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', + 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', + 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', + 'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn' + ]; + var length = methods.length; + var console = (window.console = window.console || {}); + + while (length--) { + method = methods[length]; + + // Only stub undefined methods. + if (!console[method]) { + console[method] = noop; + } + } +}()); + +// Place any jQuery/helper plugins in here. diff --git a/src/main/resources/static/js/user/home/price-slider.js b/src/main/resources/static/js/user/home/price-slider.js new file mode 100644 index 0000000..31ee9cd --- /dev/null +++ b/src/main/resources/static/js/user/home/price-slider.js @@ -0,0 +1,16617 @@ +/*! jQuery UI - v1.11.4 - 2015-03-11 +* http://jqueryui.com +* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js +* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ + +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}(function( $ ) { +/*! + * jQuery UI Core 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/ui-core/ + */ + + +// $.ui might exist from components with no dependencies, e.g., $.ui.position +$.ui = $.ui || {}; + +$.extend( $.ui, { + version: "1.11.4", + + keyCode: { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38 + } +}); + +// plugins +$.fn.extend({ + scrollParent: function( includeHidden ) { + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; + } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) ); + }).eq( 0 ); + + return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent; + }, + + uniqueId: (function() { + var uuid = 0; + + return function() { + return this.each(function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); + } + }); + }; + })(), + + removeUniqueId: function() { + return this.each(function() { + if ( /^ui-id-\d+$/.test( this.id ) ) { + $( this ).removeAttr( "id" ); + } + }); + } +}); + +// selectors +function focusable( element, isTabIndexNotNaN ) { + var map, mapName, img, + nodeName = element.nodeName.toLowerCase(); + if ( "area" === nodeName ) { + map = element.parentNode; + mapName = map.name; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap='#" + mapName + "']" )[ 0 ]; + return !!img && visible( img ); + } + return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ? + !element.disabled : + "a" === nodeName ? + element.href || isTabIndexNotNaN : + isTabIndexNotNaN) && + // the element and all of its ancestors must be visible + visible( element ); +} + +function visible( element ) { + return $.expr.filters.visible( element ) && + !$( element ).parents().addBack().filter(function() { + return $.css( this, "visibility" ) === "hidden"; + }).length; +} + +$.extend( $.expr[ ":" ], { + data: $.expr.createPseudo ? + $.expr.createPseudo(function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + }) : + // support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, + + focusable: function( element ) { + return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); + }, + + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ), + isTabIndexNaN = isNaN( tabIndex ); + return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); + } +}); + +// support: jQuery <1.8 +if ( !$( "" ).outerWidth( 1 ).jquery ) { + $.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; + + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; + if ( border ) { + size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; + } + }); + return size; + } + + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } + + return this.each(function() { + $( this ).css( type, reduce( this, size ) + "px" ); + }); + }; + + $.fn[ "outer" + name] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } + + return this.each(function() { + $( this).css( type, reduce( this, size, true, margin ) + "px" ); + }); + }; + }); +} + +// support: jQuery <1.8 +if ( !$.fn.addBack ) { + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} + +// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413) +if ( $( "" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { + $.fn.removeData = (function( removeData ) { + return function( key ) { + if ( arguments.length ) { + return removeData.call( this, $.camelCase( key ) ); + } else { + return removeData.call( this ); + } + }; + })( $.fn.removeData ); +} + +// deprecated +$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); + +$.fn.extend({ + focus: (function( orig ) { + return function( delay, fn ) { + return typeof delay === "number" ? + this.each(function() { + var elem = this; + setTimeout(function() { + $( elem ).focus(); + if ( fn ) { + fn.call( elem ); + } + }, delay ); + }) : + orig.apply( this, arguments ); + }; + })( $.fn.focus ), + + disableSelection: (function() { + var eventType = "onselectstart" in document.createElement( "div" ) ? + "selectstart" : + "mousedown"; + + return function() { + return this.bind( eventType + ".ui-disableSelection", function( event ) { + event.preventDefault(); + }); + }; + })(), + + enableSelection: function() { + return this.unbind( ".ui-disableSelection" ); + }, + + zIndex: function( zIndex ) { + if ( zIndex !== undefined ) { + return this.css( "zIndex", zIndex ); + } + + if ( this.length ) { + var elem = $( this[ 0 ] ), position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + //
+ value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } + } + + return 0; + } +}); + +// $.ui.plugin is deprecated. Use $.widget() extensions instead. +$.ui.plugin = { + add: function( module, option, set ) { + var i, + proto = $.ui[ module ].prototype; + for ( i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args, allowDisconnected ) { + var i, + set = instance.plugins[ name ]; + + if ( !set ) { + return; + } + + if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) { + return; + } + + for ( i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } +}; + + +/*! + * jQuery UI Widget 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/jQuery.widget/ + */ + + +var widget_uuid = 0, + widget_slice = Array.prototype.slice; + +$.cleanData = (function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; (elem = elems[i]) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; +})( $.cleanData ); + +$.widget = function( name, base, prototype ) { + var fullName, existingConstructor, constructor, basePrototype, + // proxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + proxiedPrototype = {}, + namespace = name.split( "." )[ 0 ]; + + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + // extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + // copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + // track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + }); + + basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( !$.isFunction( value ) ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = (function() { + var _super = function() { + return base.prototype[ prop ].apply( this, arguments ); + }, + _superApply = function( args ) { + return base.prototype[ prop ].apply( this, args ); + }; + return function() { + var __super = this._super, + __superApply = this._superApply, + returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + })(); + }); + constructor.prototype = $.widget.extend( basePrototype, { + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + }); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); + }); + // remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); + + return constructor; +}; + +$.widget.extend = function( target ) { + var input = widget_slice.call( arguments, 1 ), + inputIndex = 0, + inputLength = input.length, + key, + value; + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = widget_slice.call( arguments, 1 ), + returnValue = this; + + if ( isMethodCall ) { + this.each(function() { + var methodValue, + instance = $.data( this, fullName ); + if ( options === "instance" ) { + returnValue = instance; + return false; + } + if ( !instance ) { + return $.error( "cannot call methods on " + name + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + " widget instance" ); + } + methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + }); + } else { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat(args) ); + } + + this.each(function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
", + options: { + disabled: false, + + // callbacks + create: null + }, + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widget_uuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + }); + this.document = $( element.style ? + // element within the document + element.ownerDocument : + // element is window or document + element.document || element ); + this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); + } + + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + _getCreateOptions: $.noop, + _getCreateEventData: $.noop, + _create: $.noop, + _init: $.noop, + + destroy: function() { + this._destroy(); + // we can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .unbind( this.eventNamespace ) + .removeData( this.widgetFullName ) + // support: jquery <1.6.3 + // http://bugs.jquery.com/ticket/9413 + .removeData( $.camelCase( this.widgetFullName ) ); + this.widget() + .unbind( this.eventNamespace ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetFullName + "-disabled " + + "ui-state-disabled" ); + + // clean up events and states + this.bindings.unbind( this.eventNamespace ); + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + }, + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key, + parts, + curOption, + i; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + .toggleClass( this.widgetFullName + "-disabled", !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + } + } + + return this; + }, + + enable: function() { + return this._setOptions({ disabled: false }); + }, + disable: function() { + return this._setOptions({ disabled: true }); + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement, + instance = this; + + // no suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // no element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + // allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^([\w:-]*)\s*(.*)$/ ), + eventName = match[1] + instance.eventNamespace, + selector = match[2]; + if ( selector ) { + delegateElement.delegate( selector, eventName, handlerProxy ); + } else { + element.bind( eventName, handlerProxy ); + } + }); + }, + + _off: function( element, eventName ) { + eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.unbind( eventName ).undelegate( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + $( event.currentTarget ).addClass( "ui-state-hover" ); + }, + mouseleave: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-hover" ); + } + }); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + $( event.currentTarget ).addClass( "ui-state-focus" ); + }, + focusout: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-focus" ); + } + }); + }, + + _trigger: function( type, event, data ) { + var prop, orig, + callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + // the original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[0], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + var hasOptions, + effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + if ( options.delay ) { + element.delay( options.delay ); + } + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue(function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + }); + } + }; +}); + +var widget = $.widget; + + +/*! + * jQuery UI Mouse 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/mouse/ + */ + + +var mouseHandled = false; +$( document ).mouseup( function() { + mouseHandled = false; +}); + +var mouse = $.widget("ui.mouse", { + version: "1.11.4", + options: { + cancel: "input,textarea,button,select,option", + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var that = this; + + this.element + .bind("mousedown." + this.widgetName, function(event) { + return that._mouseDown(event); + }) + .bind("click." + this.widgetName, function(event) { + if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { + $.removeData(event.target, that.widgetName + ".preventClickEvent"); + event.stopImmediatePropagation(); + return false; + } + }); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.unbind("." + this.widgetName); + if ( this._mouseMoveDelegate ) { + this.document + .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate) + .unbind("mouseup." + this.widgetName, this._mouseUpDelegate); + } + }, + + _mouseDown: function(event) { + // don't let more than one widget handle mouseStart + if ( mouseHandled ) { + return; + } + + this._mouseMoved = false; + + // we may have missed mouseup (out of window) + (this._mouseStarted && this._mouseUp(event)); + + this._mouseDownEvent = event; + + var that = this, + btnIsLeft = (event.which === 1), + // event.target.nodeName works around a bug in IE 8 with + // disabled inputs (#7620) + elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); + if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if (!this.mouseDelayMet) { + this._mouseDelayTimer = setTimeout(function() { + that.mouseDelayMet = true; + }, this.options.delay); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = (this._mouseStart(event) !== false); + if (!this._mouseStarted) { + event.preventDefault(); + return true; + } + } + + // Click event may never have fired (Gecko & Opera) + if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) { + $.removeData(event.target, this.widgetName + ".preventClickEvent"); + } + + // these delegates are required to keep context + this._mouseMoveDelegate = function(event) { + return that._mouseMove(event); + }; + this._mouseUpDelegate = function(event) { + return that._mouseUp(event); + }; + + this.document + .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .bind( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + event.preventDefault(); + + mouseHandled = true; + return true; + }, + + _mouseMove: function(event) { + // Only check for mouseups outside the document if you've moved inside the document + // at least once. This prevents the firing of mouseup in the case of IE<9, which will + // fire a mousemove event if content is placed under the cursor. See #7778 + // Support: IE <9 + if ( this._mouseMoved ) { + // IE mouseup check - mouseup happened when mouse was out of window + if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { + return this._mouseUp(event); + + // Iframe mouseup check - mouseup occurred in another document + } else if ( !event.which ) { + return this._mouseUp( event ); + } + } + + if ( event.which || event.button ) { + this._mouseMoved = true; + } + + if (this._mouseStarted) { + this._mouseDrag(event); + return event.preventDefault(); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = + (this._mouseStart(this._mouseDownEvent, event) !== false); + (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); + } + + return !this._mouseStarted; + }, + + _mouseUp: function(event) { + this.document + .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + if (this._mouseStarted) { + this._mouseStarted = false; + + if (event.target === this._mouseDownEvent.target) { + $.data(event.target, this.widgetName + ".preventClickEvent", true); + } + + this._mouseStop(event); + } + + mouseHandled = false; + return false; + }, + + _mouseDistanceMet: function(event) { + return (Math.max( + Math.abs(this._mouseDownEvent.pageX - event.pageX), + Math.abs(this._mouseDownEvent.pageY - event.pageY) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function(/* event */) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function(/* event */) {}, + _mouseDrag: function(/* event */) {}, + _mouseStop: function(/* event */) {}, + _mouseCapture: function(/* event */) { return true; } +}); + + +/*! + * jQuery UI Position 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/position/ + */ + +(function() { + +$.ui = $.ui || {}; + +var cachedScrollbarWidth, supportsOffsetFractions, + max = Math.max, + abs = Math.abs, + round = Math.round, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function getDimensions( elem ) { + var raw = elem[0]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( $.isWindow( raw ) ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "
" ), + innerDiv = div.children()[0]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[0].clientWidth; + } + + div.remove(); + + return (cachedScrollbarWidth = w1 - w2); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[0].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[0].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + isWindow = $.isWindow( withinElement[0] ), + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9; + return { + element: withinElement, + isWindow: isWindow, + isDocument: isDocument, + offset: withinElement.offset() || { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + + // support: jQuery 1.6.x + // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows + width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(), + height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight() + }; + } +}; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + target = $( options.of ), + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), + collision = ( options.collision || "flip" ).split( " " ), + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[0].preventDefault ) { + // force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + // clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + }); + + // normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + if ( options.at[ 0 ] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[ 0 ] === "center" ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[ 1 ] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[ 1 ] === "center" ) { + basePosition.top += targetHeight / 2; + } + + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; + + return this.each(function() { + var collisionPosition, using, + elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height, + position = $.extend( {}, basePosition ), + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); + + if ( options.my[ 0 ] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[ 0 ] === "center" ) { + position.left -= elemWidth / 2; + } + + if ( options.my[ 1 ] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[ 1 ] === "center" ) { + position.top -= elemHeight / 2; + } + + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; + + // if the browser doesn't support fractions, then round for consistent results + if ( !supportsOffsetFractions ) { + position.left = round( position.left ); + position.top = round( position.top ); + } + + collisionPosition = { + marginLeft: marginLeft, + marginTop: marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], + my: options.my, + at: options.at, + within: within, + elem: elem + }); + } + }); + + if ( options.using ) { + // adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; + } + + elem.offset( $.extend( position, { using: using } ) ); + }); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // element is wider than within + if ( data.collisionWidth > outerWidth ) { + // element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; + position.left += overLeft - newOverRight; + // element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + // element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + // too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + // too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + // adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // element is taller than within + if ( data.collisionHeight > outerHeight ) { + // element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset; + position.top += overTop - newOverBottom; + // element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + // element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + // too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + // too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + // adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } + } + }, + flip: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; + if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { + position.top += myOffset + atOffset + offset; + } + } else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; + if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { + position.top += myOffset + atOffset + offset; + } + } + } + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } + } +}; + +// fraction support test +(function() { + var testElement, testElementParent, testElementStyle, offsetLeft, i, + body = document.getElementsByTagName( "body" )[ 0 ], + div = document.createElement( "div" ); + + //Create a "fake body" for testing based on method used in jQuery.support + testElement = document.createElement( body ? "div" : "body" ); + testElementStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0, + background: "none" + }; + if ( body ) { + $.extend( testElementStyle, { + position: "absolute", + left: "-1000px", + top: "-1000px" + }); + } + for ( i in testElementStyle ) { + testElement.style[ i ] = testElementStyle[ i ]; + } + testElement.appendChild( div ); + testElementParent = body || document.documentElement; + testElementParent.insertBefore( testElement, testElementParent.firstChild ); + + div.style.cssText = "position: absolute; left: 10.7432222px;"; + + offsetLeft = $( div ).offset().left; + supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11; + + testElement.innerHTML = ""; + testElementParent.removeChild( testElement ); +})(); + +})(); + +var position = $.ui.position; + + +/*! + * jQuery UI Accordion 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/accordion/ + */ + + +var accordion = $.widget( "ui.accordion", { + version: "1.11.4", + options: { + active: 0, + animate: {}, + collapsible: false, + event: "click", + header: "> li > :first-child,> :not(li):even", + heightStyle: "auto", + icons: { + activeHeader: "ui-icon-triangle-1-s", + header: "ui-icon-triangle-1-e" + }, + + // callbacks + activate: null, + beforeActivate: null + }, + + hideProps: { + borderTopWidth: "hide", + borderBottomWidth: "hide", + paddingTop: "hide", + paddingBottom: "hide", + height: "hide" + }, + + showProps: { + borderTopWidth: "show", + borderBottomWidth: "show", + paddingTop: "show", + paddingBottom: "show", + height: "show" + }, + + _create: function() { + var options = this.options; + this.prevShow = this.prevHide = $(); + this.element.addClass( "ui-accordion ui-widget ui-helper-reset" ) + // ARIA + .attr( "role", "tablist" ); + + // don't allow collapsible: false and active: false / null + if ( !options.collapsible && (options.active === false || options.active == null) ) { + options.active = 0; + } + + this._processPanels(); + // handle negative values + if ( options.active < 0 ) { + options.active += this.headers.length; + } + this._refresh(); + }, + + _getCreateEventData: function() { + return { + header: this.active, + panel: !this.active.length ? $() : this.active.next() + }; + }, + + _createIcons: function() { + var icons = this.options.icons; + if ( icons ) { + $( "" ) + .addClass( "ui-accordion-header-icon ui-icon " + icons.header ) + .prependTo( this.headers ); + this.active.children( ".ui-accordion-header-icon" ) + .removeClass( icons.header ) + .addClass( icons.activeHeader ); + this.headers.addClass( "ui-accordion-icons" ); + } + }, + + _destroyIcons: function() { + this.headers + .removeClass( "ui-accordion-icons" ) + .children( ".ui-accordion-header-icon" ) + .remove(); + }, + + _destroy: function() { + var contents; + + // clean up main element + this.element + .removeClass( "ui-accordion ui-widget ui-helper-reset" ) + .removeAttr( "role" ); + + // clean up headers + this.headers + .removeClass( "ui-accordion-header ui-accordion-header-active ui-state-default " + + "ui-corner-all ui-state-active ui-state-disabled ui-corner-top" ) + .removeAttr( "role" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "aria-selected" ) + .removeAttr( "aria-controls" ) + .removeAttr( "tabIndex" ) + .removeUniqueId(); + + this._destroyIcons(); + + // clean up content panels + contents = this.headers.next() + .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom " + + "ui-accordion-content ui-accordion-content-active ui-state-disabled" ) + .css( "display", "" ) + .removeAttr( "role" ) + .removeAttr( "aria-hidden" ) + .removeAttr( "aria-labelledby" ) + .removeUniqueId(); + + if ( this.options.heightStyle !== "content" ) { + contents.css( "height", "" ); + } + }, + + _setOption: function( key, value ) { + if ( key === "active" ) { + // _activate() will handle invalid values and update this.options + this._activate( value ); + return; + } + + if ( key === "event" ) { + if ( this.options.event ) { + this._off( this.headers, this.options.event ); + } + this._setupEvents( value ); + } + + this._super( key, value ); + + // setting collapsible: false while collapsed; open first panel + if ( key === "collapsible" && !value && this.options.active === false ) { + this._activate( 0 ); + } + + if ( key === "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } + + // #5332 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + if ( key === "disabled" ) { + this.element + .toggleClass( "ui-state-disabled", !!value ) + .attr( "aria-disabled", value ); + this.headers.add( this.headers.next() ) + .toggleClass( "ui-state-disabled", !!value ); + } + }, + + _keydown: function( event ) { + if ( event.altKey || event.ctrlKey ) { + return; + } + + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; + + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._eventHandler( event ); + break; + case keyCode.HOME: + toFocus = this.headers[ 0 ]; + break; + case keyCode.END: + toFocus = this.headers[ length - 1 ]; + break; + } + + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + toFocus.focus(); + event.preventDefault(); + } + }, + + _panelKeyDown: function( event ) { + if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { + $( event.currentTarget ).prev().focus(); + } + }, + + refresh: function() { + var options = this.options; + this._processPanels(); + + // was collapsed or no panel + if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) { + options.active = false; + this.active = $(); + // active false only when collapsible is true + } else if ( options.active === false ) { + this._activate( 0 ); + // was active, but active panel is gone + } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + // all remaining panel are disabled + if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) { + options.active = false; + this.active = $(); + // activate previous panel + } else { + this._activate( Math.max( 0, options.active - 1 ) ); + } + // was active, active panel still exists + } else { + // make sure active index is correct + options.active = this.headers.index( this.active ); + } + + this._destroyIcons(); + + this._refresh(); + }, + + _processPanels: function() { + var prevHeaders = this.headers, + prevPanels = this.panels; + + this.headers = this.element.find( this.options.header ) + .addClass( "ui-accordion-header ui-state-default ui-corner-all" ); + + this.panels = this.headers.next() + .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ) + .filter( ":not(.ui-accordion-content-active)" ) + .hide(); + + // Avoid memory leaks (#10056) + if ( prevPanels ) { + this._off( prevHeaders.not( this.headers ) ); + this._off( prevPanels.not( this.panels ) ); + } + }, + + _refresh: function() { + var maxHeight, + options = this.options, + heightStyle = options.heightStyle, + parent = this.element.parent(); + + this.active = this._findActive( options.active ) + .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ) + .removeClass( "ui-corner-all" ); + this.active.next() + .addClass( "ui-accordion-content-active" ) + .show(); + + this.headers + .attr( "role", "tab" ) + .each(function() { + var header = $( this ), + headerId = header.uniqueId().attr( "id" ), + panel = header.next(), + panelId = panel.uniqueId().attr( "id" ); + header.attr( "aria-controls", panelId ); + panel.attr( "aria-labelledby", headerId ); + }) + .next() + .attr( "role", "tabpanel" ); + + this.headers + .not( this.active ) + .attr({ + "aria-selected": "false", + "aria-expanded": "false", + tabIndex: -1 + }) + .next() + .attr({ + "aria-hidden": "true" + }) + .hide(); + + // make sure at least one header is in the tab order + if ( !this.active.length ) { + this.headers.eq( 0 ).attr( "tabIndex", 0 ); + } else { + this.active.attr({ + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + }) + .next() + .attr({ + "aria-hidden": "false" + }); + } + + this._createIcons(); + + this._setupEvents( options.event ); + + if ( heightStyle === "fill" ) { + maxHeight = parent.height(); + this.element.siblings( ":visible" ).each(function() { + var elem = $( this ), + position = elem.css( "position" ); + + if ( position === "absolute" || position === "fixed" ) { + return; + } + maxHeight -= elem.outerHeight( true ); + }); + + this.headers.each(function() { + maxHeight -= $( this ).outerHeight( true ); + }); + + this.headers.next() + .each(function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + }) + .css( "overflow", "auto" ); + } else if ( heightStyle === "auto" ) { + maxHeight = 0; + this.headers.next() + .each(function() { + maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); + }) + .height( maxHeight ); + } + }, + + _activate: function( index ) { + var active = this._findActive( index )[ 0 ]; + + // trying to activate the already active panel + if ( active === this.active[ 0 ] ) { + return; + } + + // trying to collapse, simulate a click on the currently active header + active = active || this.active[ 0 ]; + + this._eventHandler({ + target: active, + currentTarget: active, + preventDefault: $.noop + }); + }, + + _findActive: function( selector ) { + return typeof selector === "number" ? this.headers.eq( selector ) : $(); + }, + + _setupEvents: function( event ) { + var events = { + keydown: "_keydown" + }; + if ( event ) { + $.each( event.split( " " ), function( index, eventName ) { + events[ eventName ] = "_eventHandler"; + }); + } + + this._off( this.headers.add( this.headers.next() ) ); + this._on( this.headers, events ); + this._on( this.headers.next(), { keydown: "_panelKeyDown" }); + this._hoverable( this.headers ); + this._focusable( this.headers ); + }, + + _eventHandler: function( event ) { + var options = this.options, + active = this.active, + clicked = $( event.currentTarget ), + clickedIsActive = clicked[ 0 ] === active[ 0 ], + collapsing = clickedIsActive && options.collapsible, + toShow = collapsing ? $() : clicked.next(), + toHide = active.next(), + eventData = { + oldHeader: active, + oldPanel: toHide, + newHeader: collapsing ? $() : clicked, + newPanel: toShow + }; + + event.preventDefault(); + + if ( + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; + } + + options.active = collapsing ? false : this.headers.index( clicked ); + + // when the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $() : clicked; + this._toggle( eventData ); + + // switch classes + // corner classes on the previously active header stay after the animation + active.removeClass( "ui-accordion-header-active ui-state-active" ); + if ( options.icons ) { + active.children( ".ui-accordion-header-icon" ) + .removeClass( options.icons.activeHeader ) + .addClass( options.icons.header ); + } + + if ( !clickedIsActive ) { + clicked + .removeClass( "ui-corner-all" ) + .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ); + if ( options.icons ) { + clicked.children( ".ui-accordion-header-icon" ) + .removeClass( options.icons.header ) + .addClass( options.icons.activeHeader ); + } + + clicked + .next() + .addClass( "ui-accordion-content-active" ); + } + }, + + _toggle: function( data ) { + var toShow = data.newPanel, + toHide = this.prevShow.length ? this.prevShow : data.oldPanel; + + // handle activating a panel during the animation for another activation + this.prevShow.add( this.prevHide ).stop( true, true ); + this.prevShow = toShow; + this.prevHide = toHide; + + if ( this.options.animate ) { + this._animate( toShow, toHide, data ); + } else { + toHide.hide(); + toShow.show(); + this._toggleComplete( data ); + } + + toHide.attr({ + "aria-hidden": "true" + }); + toHide.prev().attr({ + "aria-selected": "false", + "aria-expanded": "false" + }); + // if we're switching panels, remove the old header from the tab order + // if we're opening from collapsed state, remove the previous header from the tab order + // if we're collapsing, then keep the collapsing header in the tab order + if ( toShow.length && toHide.length ) { + toHide.prev().attr({ + "tabIndex": -1, + "aria-expanded": "false" + }); + } else if ( toShow.length ) { + this.headers.filter(function() { + return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0; + }) + .attr( "tabIndex", -1 ); + } + + toShow + .attr( "aria-hidden", "false" ) + .prev() + .attr({ + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + }); + }, + + _animate: function( toShow, toHide, data ) { + var total, easing, duration, + that = this, + adjust = 0, + boxSizing = toShow.css( "box-sizing" ), + down = toShow.length && + ( !toHide.length || ( toShow.index() < toHide.index() ) ), + animate = this.options.animate || {}, + options = down && animate.down || animate, + complete = function() { + that._toggleComplete( data ); + }; + + if ( typeof options === "number" ) { + duration = options; + } + if ( typeof options === "string" ) { + easing = options; + } + // fall back from options to animation in case of partial down settings + easing = easing || options.easing || animate.easing; + duration = duration || options.duration || animate.duration; + + if ( !toHide.length ) { + return toShow.animate( this.showProps, duration, easing, complete ); + } + if ( !toShow.length ) { + return toHide.animate( this.hideProps, duration, easing, complete ); + } + + total = toShow.show().outerHeight(); + toHide.animate( this.hideProps, { + duration: duration, + easing: easing, + step: function( now, fx ) { + fx.now = Math.round( now ); + } + }); + toShow + .hide() + .animate( this.showProps, { + duration: duration, + easing: easing, + complete: complete, + step: function( now, fx ) { + fx.now = Math.round( now ); + if ( fx.prop !== "height" ) { + if ( boxSizing === "content-box" ) { + adjust += fx.now; + } + } else if ( that.options.heightStyle !== "content" ) { + fx.now = Math.round( total - toHide.outerHeight() - adjust ); + adjust = 0; + } + } + }); + }, + + _toggleComplete: function( data ) { + var toHide = data.oldPanel; + + toHide + .removeClass( "ui-accordion-content-active" ) + .prev() + .removeClass( "ui-corner-top" ) + .addClass( "ui-corner-all" ); + + // Work around for rendering bug in IE (#5421) + if ( toHide.length ) { + toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className; + } + this._trigger( "activate", null, data ); + } +}); + + +/*! + * jQuery UI Menu 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/menu/ + */ + + +var menu = $.widget( "ui.menu", { + version: "1.11.4", + defaultElement: "
    ", + delay: 300, + options: { + icons: { + submenu: "ui-icon-carat-1-e" + }, + items: "> *", + menus: "ul", + position: { + my: "left-1 top", + at: "right top" + }, + role: "menu", + + // callbacks + blur: null, + focus: null, + select: null + }, + + _create: function() { + this.activeMenu = this.element; + + // Flag used to prevent firing of the click handler + // as the event bubbles up through nested menus + this.mouseHandled = false; + this.element + .uniqueId() + .addClass( "ui-menu ui-widget ui-widget-content" ) + .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ) + .attr({ + role: this.options.role, + tabIndex: 0 + }); + + if ( this.options.disabled ) { + this.element + .addClass( "ui-state-disabled" ) + .attr( "aria-disabled", "true" ); + } + + this._on({ + // Prevent focus from sticking to links inside menu after clicking + // them (focus should always stay on UL during navigation). + "mousedown .ui-menu-item": function( event ) { + event.preventDefault(); + }, + "click .ui-menu-item": function( event ) { + var target = $( event.target ); + if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) { + this.select( event ); + + // Only set the mouseHandled flag if the event will bubble, see #9469. + if ( !event.isPropagationStopped() ) { + this.mouseHandled = true; + } + + // Open submenu on click + if ( target.has( ".ui-menu" ).length ) { + this.expand( event ); + } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) { + + // Redirect focus to the menu + this.element.trigger( "focus", [ true ] ); + + // If the active item is on the top level, let it stay active. + // Otherwise, blur the active item since it is no longer visible. + if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) { + clearTimeout( this.timer ); + } + } + } + }, + "mouseenter .ui-menu-item": function( event ) { + // Ignore mouse events while typeahead is active, see #10458. + // Prevents focusing the wrong item when typeahead causes a scroll while the mouse + // is over an item in the menu + if ( this.previousFilter ) { + return; + } + var target = $( event.currentTarget ); + // Remove ui-state-active class from siblings of the newly focused menu item + // to avoid a jump caused by adjacent elements both having a class with a border + target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" ); + this.focus( event, target ); + }, + mouseleave: "collapseAll", + "mouseleave .ui-menu": "collapseAll", + focus: function( event, keepActiveItem ) { + // If there's already an active item, keep it active + // If not, activate the first item + var item = this.active || this.element.find( this.options.items ).eq( 0 ); + + if ( !keepActiveItem ) { + this.focus( event, item ); + } + }, + blur: function( event ) { + this._delay(function() { + if ( !$.contains( this.element[0], this.document[0].activeElement ) ) { + this.collapseAll( event ); + } + }); + }, + keydown: "_keydown" + }); + + this.refresh(); + + // Clicks outside of a menu collapse any open menus + this._on( this.document, { + click: function( event ) { + if ( this._closeOnDocumentClick( event ) ) { + this.collapseAll( event ); + } + + // Reset the mouseHandled flag + this.mouseHandled = false; + } + }); + }, + + _destroy: function() { + // Destroy (sub)menus + this.element + .removeAttr( "aria-activedescendant" ) + .find( ".ui-menu" ).addBack() + .removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" ) + .removeAttr( "role" ) + .removeAttr( "tabIndex" ) + .removeAttr( "aria-labelledby" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "aria-hidden" ) + .removeAttr( "aria-disabled" ) + .removeUniqueId() + .show(); + + // Destroy menu items + this.element.find( ".ui-menu-item" ) + .removeClass( "ui-menu-item" ) + .removeAttr( "role" ) + .removeAttr( "aria-disabled" ) + .removeUniqueId() + .removeClass( "ui-state-hover" ) + .removeAttr( "tabIndex" ) + .removeAttr( "role" ) + .removeAttr( "aria-haspopup" ) + .children().each( function() { + var elem = $( this ); + if ( elem.data( "ui-menu-submenu-carat" ) ) { + elem.remove(); + } + }); + + // Destroy menu dividers + this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" ); + }, + + _keydown: function( event ) { + var match, prev, character, skip, + preventDefault = true; + + switch ( event.keyCode ) { + case $.ui.keyCode.PAGE_UP: + this.previousPage( event ); + break; + case $.ui.keyCode.PAGE_DOWN: + this.nextPage( event ); + break; + case $.ui.keyCode.HOME: + this._move( "first", "first", event ); + break; + case $.ui.keyCode.END: + this._move( "last", "last", event ); + break; + case $.ui.keyCode.UP: + this.previous( event ); + break; + case $.ui.keyCode.DOWN: + this.next( event ); + break; + case $.ui.keyCode.LEFT: + this.collapse( event ); + break; + case $.ui.keyCode.RIGHT: + if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { + this.expand( event ); + } + break; + case $.ui.keyCode.ENTER: + case $.ui.keyCode.SPACE: + this._activate( event ); + break; + case $.ui.keyCode.ESCAPE: + this.collapse( event ); + break; + default: + preventDefault = false; + prev = this.previousFilter || ""; + character = String.fromCharCode( event.keyCode ); + skip = false; + + clearTimeout( this.filterTimer ); + + if ( character === prev ) { + skip = true; + } else { + character = prev + character; + } + + match = this._filterMenuItems( character ); + match = skip && match.index( this.active.next() ) !== -1 ? + this.active.nextAll( ".ui-menu-item" ) : + match; + + // If no matches on the current filter, reset to the last character pressed + // to move down the menu to the first item that starts with that character + if ( !match.length ) { + character = String.fromCharCode( event.keyCode ); + match = this._filterMenuItems( character ); + } + + if ( match.length ) { + this.focus( event, match ); + this.previousFilter = character; + this.filterTimer = this._delay(function() { + delete this.previousFilter; + }, 1000 ); + } else { + delete this.previousFilter; + } + } + + if ( preventDefault ) { + event.preventDefault(); + } + }, + + _activate: function( event ) { + if ( !this.active.is( ".ui-state-disabled" ) ) { + if ( this.active.is( "[aria-haspopup='true']" ) ) { + this.expand( event ); + } else { + this.select( event ); + } + } + }, + + refresh: function() { + var menus, items, + that = this, + icon = this.options.icons.submenu, + submenus = this.element.find( this.options.menus ); + + this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ); + + // Initialize nested menus + submenus.filter( ":not(.ui-menu)" ) + .addClass( "ui-menu ui-widget ui-widget-content ui-front" ) + .hide() + .attr({ + role: this.options.role, + "aria-hidden": "true", + "aria-expanded": "false" + }) + .each(function() { + var menu = $( this ), + item = menu.parent(), + submenuCarat = $( "" ) + .addClass( "ui-menu-icon ui-icon " + icon ) + .data( "ui-menu-submenu-carat", true ); + + item + .attr( "aria-haspopup", "true" ) + .prepend( submenuCarat ); + menu.attr( "aria-labelledby", item.attr( "id" ) ); + }); + + menus = submenus.add( this.element ); + items = menus.find( this.options.items ); + + // Initialize menu-items containing spaces and/or dashes only as dividers + items.not( ".ui-menu-item" ).each(function() { + var item = $( this ); + if ( that._isDivider( item ) ) { + item.addClass( "ui-widget-content ui-menu-divider" ); + } + }); + + // Don't refresh list items that are already adapted + items.not( ".ui-menu-item, .ui-menu-divider" ) + .addClass( "ui-menu-item" ) + .uniqueId() + .attr({ + tabIndex: -1, + role: this._itemRole() + }); + + // Add aria-disabled attribute to any disabled menu item + items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" ); + + // If the active item has been removed, blur the menu + if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + this.blur(); + } + }, + + _itemRole: function() { + return { + menu: "menuitem", + listbox: "option" + }[ this.options.role ]; + }, + + _setOption: function( key, value ) { + if ( key === "icons" ) { + this.element.find( ".ui-menu-icon" ) + .removeClass( this.options.icons.submenu ) + .addClass( value.submenu ); + } + if ( key === "disabled" ) { + this.element + .toggleClass( "ui-state-disabled", !!value ) + .attr( "aria-disabled", value ); + } + this._super( key, value ); + }, + + focus: function( event, item ) { + var nested, focused; + this.blur( event, event && event.type === "focus" ); + + this._scrollIntoView( item ); + + this.active = item.first(); + focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" ); + // Only update aria-activedescendant if there's a role + // otherwise we assume focus is managed elsewhere + if ( this.options.role ) { + this.element.attr( "aria-activedescendant", focused.attr( "id" ) ); + } + + // Highlight active parent menu item, if any + this.active + .parent() + .closest( ".ui-menu-item" ) + .addClass( "ui-state-active" ); + + if ( event && event.type === "keydown" ) { + this._close(); + } else { + this.timer = this._delay(function() { + this._close(); + }, this.delay ); + } + + nested = item.children( ".ui-menu" ); + if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) { + this._startOpening(nested); + } + this.activeMenu = item.parent(); + + this._trigger( "focus", event, { item: item } ); + }, + + _scrollIntoView: function( item ) { + var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; + if ( this._hasScroll() ) { + borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0; + paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0; + offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; + scroll = this.activeMenu.scrollTop(); + elementHeight = this.activeMenu.height(); + itemHeight = item.outerHeight(); + + if ( offset < 0 ) { + this.activeMenu.scrollTop( scroll + offset ); + } else if ( offset + itemHeight > elementHeight ) { + this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); + } + } + }, + + blur: function( event, fromFocus ) { + if ( !fromFocus ) { + clearTimeout( this.timer ); + } + + if ( !this.active ) { + return; + } + + this.active.removeClass( "ui-state-focus" ); + this.active = null; + + this._trigger( "blur", event, { item: this.active } ); + }, + + _startOpening: function( submenu ) { + clearTimeout( this.timer ); + + // Don't open if already open fixes a Firefox bug that caused a .5 pixel + // shift in the submenu position when mousing over the carat icon + if ( submenu.attr( "aria-hidden" ) !== "true" ) { + return; + } + + this.timer = this._delay(function() { + this._close(); + this._open( submenu ); + }, this.delay ); + }, + + _open: function( submenu ) { + var position = $.extend({ + of: this.active + }, this.options.position ); + + clearTimeout( this.timer ); + this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) + .hide() + .attr( "aria-hidden", "true" ); + + submenu + .show() + .removeAttr( "aria-hidden" ) + .attr( "aria-expanded", "true" ) + .position( position ); + }, + + collapseAll: function( event, all ) { + clearTimeout( this.timer ); + this.timer = this._delay(function() { + // If we were passed an event, look for the submenu that contains the event + var currentMenu = all ? this.element : + $( event && event.target ).closest( this.element.find( ".ui-menu" ) ); + + // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway + if ( !currentMenu.length ) { + currentMenu = this.element; + } + + this._close( currentMenu ); + + this.blur( event ); + this.activeMenu = currentMenu; + }, this.delay ); + }, + + // With no arguments, closes the currently active menu - if nothing is active + // it closes all menus. If passed an argument, it will search for menus BELOW + _close: function( startMenu ) { + if ( !startMenu ) { + startMenu = this.active ? this.active.parent() : this.element; + } + + startMenu + .find( ".ui-menu" ) + .hide() + .attr( "aria-hidden", "true" ) + .attr( "aria-expanded", "false" ) + .end() + .find( ".ui-state-active" ).not( ".ui-state-focus" ) + .removeClass( "ui-state-active" ); + }, + + _closeOnDocumentClick: function( event ) { + return !$( event.target ).closest( ".ui-menu" ).length; + }, + + _isDivider: function( item ) { + + // Match hyphen, em dash, en dash + return !/[^\-\u2014\u2013\s]/.test( item.text() ); + }, + + collapse: function( event ) { + var newItem = this.active && + this.active.parent().closest( ".ui-menu-item", this.element ); + if ( newItem && newItem.length ) { + this._close(); + this.focus( event, newItem ); + } + }, + + expand: function( event ) { + var newItem = this.active && + this.active + .children( ".ui-menu " ) + .find( this.options.items ) + .first(); + + if ( newItem && newItem.length ) { + this._open( newItem.parent() ); + + // Delay so Firefox will not hide activedescendant change in expanding submenu from AT + this._delay(function() { + this.focus( event, newItem ); + }); + } + }, + + next: function( event ) { + this._move( "next", "first", event ); + }, + + previous: function( event ) { + this._move( "prev", "last", event ); + }, + + isFirstItem: function() { + return this.active && !this.active.prevAll( ".ui-menu-item" ).length; + }, + + isLastItem: function() { + return this.active && !this.active.nextAll( ".ui-menu-item" ).length; + }, + + _move: function( direction, filter, event ) { + var next; + if ( this.active ) { + if ( direction === "first" || direction === "last" ) { + next = this.active + [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ) + .eq( -1 ); + } else { + next = this.active + [ direction + "All" ]( ".ui-menu-item" ) + .eq( 0 ); + } + } + if ( !next || !next.length || !this.active ) { + next = this.activeMenu.find( this.options.items )[ filter ](); + } + + this.focus( event, next ); + }, + + nextPage: function( event ) { + var item, base, height; + + if ( !this.active ) { + this.next( event ); + return; + } + if ( this.isLastItem() ) { + return; + } + if ( this._hasScroll() ) { + base = this.active.offset().top; + height = this.element.height(); + this.active.nextAll( ".ui-menu-item" ).each(function() { + item = $( this ); + return item.offset().top - base - height < 0; + }); + + this.focus( event, item ); + } else { + this.focus( event, this.activeMenu.find( this.options.items ) + [ !this.active ? "first" : "last" ]() ); + } + }, + + previousPage: function( event ) { + var item, base, height; + if ( !this.active ) { + this.next( event ); + return; + } + if ( this.isFirstItem() ) { + return; + } + if ( this._hasScroll() ) { + base = this.active.offset().top; + height = this.element.height(); + this.active.prevAll( ".ui-menu-item" ).each(function() { + item = $( this ); + return item.offset().top - base + height > 0; + }); + + this.focus( event, item ); + } else { + this.focus( event, this.activeMenu.find( this.options.items ).first() ); + } + }, + + _hasScroll: function() { + return this.element.outerHeight() < this.element.prop( "scrollHeight" ); + }, + + select: function( event ) { + // TODO: It should never be possible to not have an active item at this + // point, but the tests don't trigger mouseenter before click. + this.active = this.active || $( event.target ).closest( ".ui-menu-item" ); + var ui = { item: this.active }; + if ( !this.active.has( ".ui-menu" ).length ) { + this.collapseAll( event, true ); + } + this._trigger( "select", event, ui ); + }, + + _filterMenuItems: function(character) { + var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ), + regex = new RegExp( "^" + escapedCharacter, "i" ); + + return this.activeMenu + .find( this.options.items ) + + // Only match on items, not dividers or other content (#10571) + .filter( ".ui-menu-item" ) + .filter(function() { + return regex.test( $.trim( $( this ).text() ) ); + }); + } +}); + + +/*! + * jQuery UI Autocomplete 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/autocomplete/ + */ + + +$.widget( "ui.autocomplete", { + version: "1.11.4", + defaultElement: "", + options: { + appendTo: null, + autoFocus: false, + delay: 300, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null, + + // callbacks + change: null, + close: null, + focus: null, + open: null, + response: null, + search: null, + select: null + }, + + requestIndex: 0, + pending: 0, + + _create: function() { + // Some browsers only repeat keydown events, not keypress events, + // so we use the suppressKeyPress flag to determine if we've already + // handled the keydown event. #7269 + // Unfortunately the code for & in keypress is the same as the up arrow, + // so we use the suppressKeyPressRepeat flag to avoid handling keypress + // events when we know the keydown event was used to modify the + // search term. #7799 + var suppressKeyPress, suppressKeyPressRepeat, suppressInput, + nodeName = this.element[ 0 ].nodeName.toLowerCase(), + isTextarea = nodeName === "textarea", + isInput = nodeName === "input"; + + this.isMultiLine = + // Textareas are always multi-line + isTextarea ? true : + // Inputs are always single-line, even if inside a contentEditable element + // IE also treats inputs as contentEditable + isInput ? false : + // All other element types are determined by whether or not they're contentEditable + this.element.prop( "isContentEditable" ); + + this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ]; + this.isNewMenu = true; + + this.element + .addClass( "ui-autocomplete-input" ) + .attr( "autocomplete", "off" ); + + this._on( this.element, { + keydown: function( event ) { + if ( this.element.prop( "readOnly" ) ) { + suppressKeyPress = true; + suppressInput = true; + suppressKeyPressRepeat = true; + return; + } + + suppressKeyPress = false; + suppressInput = false; + suppressKeyPressRepeat = false; + var keyCode = $.ui.keyCode; + switch ( event.keyCode ) { + case keyCode.PAGE_UP: + suppressKeyPress = true; + this._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + suppressKeyPress = true; + this._move( "nextPage", event ); + break; + case keyCode.UP: + suppressKeyPress = true; + this._keyEvent( "previous", event ); + break; + case keyCode.DOWN: + suppressKeyPress = true; + this._keyEvent( "next", event ); + break; + case keyCode.ENTER: + // when menu is open and has focus + if ( this.menu.active ) { + // #6055 - Opera still allows the keypress to occur + // which causes forms to submit + suppressKeyPress = true; + event.preventDefault(); + this.menu.select( event ); + } + break; + case keyCode.TAB: + if ( this.menu.active ) { + this.menu.select( event ); + } + break; + case keyCode.ESCAPE: + if ( this.menu.element.is( ":visible" ) ) { + if ( !this.isMultiLine ) { + this._value( this.term ); + } + this.close( event ); + // Different browsers have different default behavior for escape + // Single press can mean undo or clear + // Double press in IE means clear the whole form + event.preventDefault(); + } + break; + default: + suppressKeyPressRepeat = true; + // search timeout should be triggered before the input value is changed + this._searchTimeout( event ); + break; + } + }, + keypress: function( event ) { + if ( suppressKeyPress ) { + suppressKeyPress = false; + if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { + event.preventDefault(); + } + return; + } + if ( suppressKeyPressRepeat ) { + return; + } + + // replicate some key handlers to allow them to repeat in Firefox and Opera + var keyCode = $.ui.keyCode; + switch ( event.keyCode ) { + case keyCode.PAGE_UP: + this._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + this._move( "nextPage", event ); + break; + case keyCode.UP: + this._keyEvent( "previous", event ); + break; + case keyCode.DOWN: + this._keyEvent( "next", event ); + break; + } + }, + input: function( event ) { + if ( suppressInput ) { + suppressInput = false; + event.preventDefault(); + return; + } + this._searchTimeout( event ); + }, + focus: function() { + this.selectedItem = null; + this.previous = this._value(); + }, + blur: function( event ) { + if ( this.cancelBlur ) { + delete this.cancelBlur; + return; + } + + clearTimeout( this.searching ); + this.close( event ); + this._change( event ); + } + }); + + this._initSource(); + this.menu = $( "
      " ) + .addClass( "ui-autocomplete ui-front" ) + .appendTo( this._appendTo() ) + .menu({ + // disable ARIA support, the live region takes care of that + role: null + }) + .hide() + .menu( "instance" ); + + this._on( this.menu.element, { + mousedown: function( event ) { + // prevent moving focus out of the text field + event.preventDefault(); + + // IE doesn't prevent moving focus even with event.preventDefault() + // so we set a flag to know when we should ignore the blur event + this.cancelBlur = true; + this._delay(function() { + delete this.cancelBlur; + }); + + // clicking on the scrollbar causes focus to shift to the body + // but we can't detect a mouseup or a click immediately afterward + // so we have to track the next mousedown and close the menu if + // the user clicks somewhere outside of the autocomplete + var menuElement = this.menu.element[ 0 ]; + if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { + this._delay(function() { + var that = this; + this.document.one( "mousedown", function( event ) { + if ( event.target !== that.element[ 0 ] && + event.target !== menuElement && + !$.contains( menuElement, event.target ) ) { + that.close(); + } + }); + }); + } + }, + menufocus: function( event, ui ) { + var label, item; + // support: Firefox + // Prevent accidental activation of menu items in Firefox (#7024 #9118) + if ( this.isNewMenu ) { + this.isNewMenu = false; + if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) { + this.menu.blur(); + + this.document.one( "mousemove", function() { + $( event.target ).trigger( event.originalEvent ); + }); + + return; + } + } + + item = ui.item.data( "ui-autocomplete-item" ); + if ( false !== this._trigger( "focus", event, { item: item } ) ) { + // use value to match what will end up in the input, if it was a key event + if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) { + this._value( item.value ); + } + } + + // Announce the value in the liveRegion + label = ui.item.attr( "aria-label" ) || item.value; + if ( label && $.trim( label ).length ) { + this.liveRegion.children().hide(); + $( "
      " ).text( label ).appendTo( this.liveRegion ); + } + }, + menuselect: function( event, ui ) { + var item = ui.item.data( "ui-autocomplete-item" ), + previous = this.previous; + + // only trigger when focus was lost (click on menu) + if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) { + this.element.focus(); + this.previous = previous; + // #6109 - IE triggers two focus events and the second + // is asynchronous, so we need to reset the previous + // term synchronously and asynchronously :-( + this._delay(function() { + this.previous = previous; + this.selectedItem = item; + }); + } + + if ( false !== this._trigger( "select", event, { item: item } ) ) { + this._value( item.value ); + } + // reset the term after the select event + // this allows custom select handling to work properly + this.term = this._value(); + + this.close( event ); + this.selectedItem = item; + } + }); + + this.liveRegion = $( "", { + role: "status", + "aria-live": "assertive", + "aria-relevant": "additions" + }) + .addClass( "ui-helper-hidden-accessible" ) + .appendTo( this.document[ 0 ].body ); + + // turning off autocomplete prevents the browser from remembering the + // value when navigating through history, so we re-enable autocomplete + // if the page is unloaded before the widget is destroyed. #7790 + this._on( this.window, { + beforeunload: function() { + this.element.removeAttr( "autocomplete" ); + } + }); + }, + + _destroy: function() { + clearTimeout( this.searching ); + this.element + .removeClass( "ui-autocomplete-input" ) + .removeAttr( "autocomplete" ); + this.menu.element.remove(); + this.liveRegion.remove(); + }, + + _setOption: function( key, value ) { + this._super( key, value ); + if ( key === "source" ) { + this._initSource(); + } + if ( key === "appendTo" ) { + this.menu.element.appendTo( this._appendTo() ); + } + if ( key === "disabled" && value && this.xhr ) { + this.xhr.abort(); + } + }, + + _appendTo: function() { + var element = this.options.appendTo; + + if ( element ) { + element = element.jquery || element.nodeType ? + $( element ) : + this.document.find( element ).eq( 0 ); + } + + if ( !element || !element[ 0 ] ) { + element = this.element.closest( ".ui-front" ); + } + + if ( !element.length ) { + element = this.document[ 0 ].body; + } + + return element; + }, + + _initSource: function() { + var array, url, + that = this; + if ( $.isArray( this.options.source ) ) { + array = this.options.source; + this.source = function( request, response ) { + response( $.ui.autocomplete.filter( array, request.term ) ); + }; + } else if ( typeof this.options.source === "string" ) { + url = this.options.source; + this.source = function( request, response ) { + if ( that.xhr ) { + that.xhr.abort(); + } + that.xhr = $.ajax({ + url: url, + data: request, + dataType: "json", + success: function( data ) { + response( data ); + }, + error: function() { + response([]); + } + }); + }; + } else { + this.source = this.options.source; + } + }, + + _searchTimeout: function( event ) { + clearTimeout( this.searching ); + this.searching = this._delay(function() { + + // Search if the value has changed, or if the user retypes the same value (see #7434) + var equalValues = this.term === this._value(), + menuVisible = this.menu.element.is( ":visible" ), + modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey; + + if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) { + this.selectedItem = null; + this.search( null, event ); + } + }, this.options.delay ); + }, + + search: function( value, event ) { + value = value != null ? value : this._value(); + + // always save the actual value, not the one passed as an argument + this.term = this._value(); + + if ( value.length < this.options.minLength ) { + return this.close( event ); + } + + if ( this._trigger( "search", event ) === false ) { + return; + } + + return this._search( value ); + }, + + _search: function( value ) { + this.pending++; + this.element.addClass( "ui-autocomplete-loading" ); + this.cancelSearch = false; + + this.source( { term: value }, this._response() ); + }, + + _response: function() { + var index = ++this.requestIndex; + + return $.proxy(function( content ) { + if ( index === this.requestIndex ) { + this.__response( content ); + } + + this.pending--; + if ( !this.pending ) { + this.element.removeClass( "ui-autocomplete-loading" ); + } + }, this ); + }, + + __response: function( content ) { + if ( content ) { + content = this._normalize( content ); + } + this._trigger( "response", null, { content: content } ); + if ( !this.options.disabled && content && content.length && !this.cancelSearch ) { + this._suggest( content ); + this._trigger( "open" ); + } else { + // use ._close() instead of .close() so we don't cancel future searches + this._close(); + } + }, + + close: function( event ) { + this.cancelSearch = true; + this._close( event ); + }, + + _close: function( event ) { + if ( this.menu.element.is( ":visible" ) ) { + this.menu.element.hide(); + this.menu.blur(); + this.isNewMenu = true; + this._trigger( "close", event ); + } + }, + + _change: function( event ) { + if ( this.previous !== this._value() ) { + this._trigger( "change", event, { item: this.selectedItem } ); + } + }, + + _normalize: function( items ) { + // assume all items have the right format when the first item is complete + if ( items.length && items[ 0 ].label && items[ 0 ].value ) { + return items; + } + return $.map( items, function( item ) { + if ( typeof item === "string" ) { + return { + label: item, + value: item + }; + } + return $.extend( {}, item, { + label: item.label || item.value, + value: item.value || item.label + }); + }); + }, + + _suggest: function( items ) { + var ul = this.menu.element.empty(); + this._renderMenu( ul, items ); + this.isNewMenu = true; + this.menu.refresh(); + + // size and position menu + ul.show(); + this._resizeMenu(); + ul.position( $.extend({ + of: this.element + }, this.options.position ) ); + + if ( this.options.autoFocus ) { + this.menu.next(); + } + }, + + _resizeMenu: function() { + var ul = this.menu.element; + ul.outerWidth( Math.max( + // Firefox wraps long text (possibly a rounding bug) + // so we add 1px to avoid the wrapping (#7513) + ul.width( "" ).outerWidth() + 1, + this.element.outerWidth() + ) ); + }, + + _renderMenu: function( ul, items ) { + var that = this; + $.each( items, function( index, item ) { + that._renderItemData( ul, item ); + }); + }, + + _renderItemData: function( ul, item ) { + return this._renderItem( ul, item ).data( "ui-autocomplete-item", item ); + }, + + _renderItem: function( ul, item ) { + return $( "
    • " ).text( item.label ).appendTo( ul ); + }, + + _move: function( direction, event ) { + if ( !this.menu.element.is( ":visible" ) ) { + this.search( null, event ); + return; + } + if ( this.menu.isFirstItem() && /^previous/.test( direction ) || + this.menu.isLastItem() && /^next/.test( direction ) ) { + + if ( !this.isMultiLine ) { + this._value( this.term ); + } + + this.menu.blur(); + return; + } + this.menu[ direction ]( event ); + }, + + widget: function() { + return this.menu.element; + }, + + _value: function() { + return this.valueMethod.apply( this.element, arguments ); + }, + + _keyEvent: function( keyEvent, event ) { + if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { + this._move( keyEvent, event ); + + // prevents moving cursor to beginning/end of the text field in some browsers + event.preventDefault(); + } + } +}); + +$.extend( $.ui.autocomplete, { + escapeRegex: function( value ) { + return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); + }, + filter: function( array, term ) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" ); + return $.grep( array, function( value ) { + return matcher.test( value.label || value.value || value ); + }); + } +}); + +// live region extension, adding a `messages` option +// NOTE: This is an experimental API. We are still investigating +// a full solution for string manipulation and internationalization. +$.widget( "ui.autocomplete", $.ui.autocomplete, { + options: { + messages: { + noResults: "No search results.", + results: function( amount ) { + return amount + ( amount > 1 ? " results are" : " result is" ) + + " available, use up and down arrow keys to navigate."; + } + } + }, + + __response: function( content ) { + var message; + this._superApply( arguments ); + if ( this.options.disabled || this.cancelSearch ) { + return; + } + if ( content && content.length ) { + message = this.options.messages.results( content.length ); + } else { + message = this.options.messages.noResults; + } + this.liveRegion.children().hide(); + $( "
      " ).text( message ).appendTo( this.liveRegion ); + } +}); + +var autocomplete = $.ui.autocomplete; + + +/*! + * jQuery UI Button 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/button/ + */ + + +var lastActive, + baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", + typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", + formResetHandler = function() { + var form = $( this ); + setTimeout(function() { + form.find( ":ui-button" ).button( "refresh" ); + }, 1 ); + }, + radioGroup = function( radio ) { + var name = radio.name, + form = radio.form, + radios = $( [] ); + if ( name ) { + name = name.replace( /'/g, "\\'" ); + if ( form ) { + radios = $( form ).find( "[name='" + name + "'][type=radio]" ); + } else { + radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument ) + .filter(function() { + return !this.form; + }); + } + } + return radios; + }; + +$.widget( "ui.button", { + version: "1.11.4", + defaultElement: "").addClass(this._triggerClass). + html(!buttonImage ? buttonText : $("").attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? "before" : "after"](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) { + $.datepicker._hideDatepicker(); + } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) { + $.datepicker._hideDatepicker(); + $.datepicker._showDatepicker(input[0]); + } else { + $.datepicker._showDatepicker(input[0]); + } + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, "autoSize") && !inst.inline) { + var findMax, max, maxI, i, + date = new Date(2009, 12 - 1, 20), // Ensure double digits + dateFormat = this._get(inst, "dateFormat"); + + if (dateFormat.match(/[DM]/)) { + findMax = function(names) { + max = 0; + maxI = 0; + for (i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + "monthNames" : "monthNamesShort")))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + "dayNames" : "dayNamesShort"))) + 20 - date.getDay()); + } + inst.input.attr("size", this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) { + return; + } + divSpan.addClass(this.markerClassName).append(inst.dpDiv); + $.data(target, "datepicker", inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + //If disabled option is true, disable the datepicker before showing it (see ticket #5665) + if( inst.settings.disabled ) { + this._disableDatepicker( target ); + } + // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements + // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height + inst.dpDiv.css( "display", "block" ); + }, + + /* Pop-up the date picker in a "dialog" box. + * @param input element - ignored + * @param date string or Date - the initial date to display + * @param onSelect function - the function to call when a date is selected + * @param settings object - update the dialog date picker instance's settings (anonymous object) + * @param pos int[2] - coordinates for the dialog's position within the screen or + * event - with x/y coordinates or + * leave empty for default (screen centre) + * @return the manager object + */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var id, browserWidth, browserHeight, scrollX, scrollY, + inst = this._dialogInst; // internal instance + + if (!inst) { + this.uuid += 1; + id = "dp" + this.uuid; + this._dialogInput = $(""); + this._dialogInput.keydown(this._doKeyDown); + $("body").append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], "datepicker", inst); + } + datepicker_extendRemove(inst.settings, settings || {}); + date = (date && date.constructor === Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + browserWidth = document.documentElement.clientWidth; + browserHeight = document.documentElement.clientHeight; + scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px"); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) { + $.blockUI(this.dpDiv); + } + $.data(this._dialogInput[0], "datepicker", inst); + return this; + }, + + /* Detach a datepicker from its control. + * @param target element - the target input field or division or span + */ + _destroyDatepicker: function(target) { + var nodeName, + $target = $(target), + inst = $.data(target, "datepicker"); + + if (!$target.hasClass(this.markerClassName)) { + return; + } + + nodeName = target.nodeName.toLowerCase(); + $.removeData(target, "datepicker"); + if (nodeName === "input") { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind("focus", this._showDatepicker). + unbind("keydown", this._doKeyDown). + unbind("keypress", this._doKeyPress). + unbind("keyup", this._doKeyUp); + } else if (nodeName === "div" || nodeName === "span") { + $target.removeClass(this.markerClassName).empty(); + } + + if ( datepicker_instActive === inst ) { + datepicker_instActive = null; + } + }, + + /* Enable the date picker to a jQuery selection. + * @param target element - the target input field or division or span + */ + _enableDatepicker: function(target) { + var nodeName, inline, + $target = $(target), + inst = $.data(target, "datepicker"); + + if (!$target.hasClass(this.markerClassName)) { + return; + } + + nodeName = target.nodeName.toLowerCase(); + if (nodeName === "input") { + target.disabled = false; + inst.trigger.filter("button"). + each(function() { this.disabled = false; }).end(). + filter("img").css({opacity: "1.0", cursor: ""}); + } else if (nodeName === "div" || nodeName === "span") { + inline = $target.children("." + this._inlineClass); + inline.children().removeClass("ui-state-disabled"); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + prop("disabled", false); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value === target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + * @param target element - the target input field or division or span + */ + _disableDatepicker: function(target) { + var nodeName, inline, + $target = $(target), + inst = $.data(target, "datepicker"); + + if (!$target.hasClass(this.markerClassName)) { + return; + } + + nodeName = target.nodeName.toLowerCase(); + if (nodeName === "input") { + target.disabled = true; + inst.trigger.filter("button"). + each(function() { this.disabled = true; }).end(). + filter("img").css({opacity: "0.5", cursor: "default"}); + } else if (nodeName === "div" || nodeName === "span") { + inline = $target.children("." + this._inlineClass); + inline.children().addClass("ui-state-disabled"); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + prop("disabled", true); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value === target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + * @param target element - the target input field or division or span + * @return boolean - true if disabled, false if enabled + */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] === target) { + return true; + } + } + return false; + }, + + /* Retrieve the instance data for the target control. + * @param target element - the target input field or division or span + * @return object - the associated instance data + * @throws error if a jQuery problem getting data + */ + _getInst: function(target) { + try { + return $.data(target, "datepicker"); + } + catch (err) { + throw "Missing instance data for this datepicker"; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + * @param target element - the target input field or division or span + * @param name object - the new settings to update or + * string - the name of the setting to change or retrieve, + * when retrieving also "all" for all instance settings or + * "defaults" for all global defaults + * @param value any - the new value for the setting + * (omit if above is an object or to retrieve a value) + */ + _optionDatepicker: function(target, name, value) { + var settings, date, minDate, maxDate, + inst = this._getInst(target); + + if (arguments.length === 2 && typeof name === "string") { + return (name === "defaults" ? $.extend({}, $.datepicker._defaults) : + (inst ? (name === "all" ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + + settings = name || {}; + if (typeof name === "string") { + settings = {}; + settings[name] = value; + } + + if (inst) { + if (this._curInst === inst) { + this._hideDatepicker(); + } + + date = this._getDateDatepicker(target, true); + minDate = this._getMinMaxDate(inst, "min"); + maxDate = this._getMinMaxDate(inst, "max"); + datepicker_extendRemove(inst.settings, settings); + // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided + if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) { + inst.settings.minDate = this._formatDate(inst, minDate); + } + if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) { + inst.settings.maxDate = this._formatDate(inst, maxDate); + } + if ( "disabled" in settings ) { + if ( settings.disabled ) { + this._disableDatepicker(target); + } else { + this._enableDatepicker(target); + } + } + this._attachments($(target), inst); + this._autoSize(inst); + this._setDate(inst, date); + this._updateAlternate(inst); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + * @param target element - the target input field or division or span + */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + * @param target element - the target input field or division or span + * @param date Date - the new date + */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + * @param target element - the target input field or division or span + * @param noDefault boolean - true if no default date is to be used + * @return Date - the current date + */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) { + this._setDateFromField(inst, noDefault); + } + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var onSelect, dateStr, sel, + inst = $.datepicker._getInst(event.target), + handled = true, + isRTL = inst.dpDiv.is(".ui-datepicker-rtl"); + + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) { + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." + + $.datepicker._currentClass + ")", inst.dpDiv); + if (sel[0]) { + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + } + + onSelect = $.datepicker._get(inst, "onSelect"); + if (onSelect) { + dateStr = $.datepicker._formatDate(inst); + + // trigger custom callback + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); + } else { + $.datepicker._hideDatepicker(); + } + + return false; // don't submit the form + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, "stepBigMonths") : + -$.datepicker._get(inst, "stepMonths")), "M"); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, "stepBigMonths") : + +$.datepicker._get(inst, "stepMonths")), "M"); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) { + $.datepicker._clearDate(event.target); + } + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) { + $.datepicker._gotoToday(event.target); + } + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D"); + } + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) { + $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, "stepBigMonths") : + -$.datepicker._get(inst, "stepMonths")), "M"); + } + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, -7, "D"); + } + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D"); + } + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) { + $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, "stepBigMonths") : + +$.datepicker._get(inst, "stepMonths")), "M"); + } + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, +7, "D"); + } + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + } else { + handled = false; + } + + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var chars, chr, + inst = $.datepicker._getInst(event.target); + + if ($.datepicker._get(inst, "constrainInput")) { + chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat")); + chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode); + return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var date, + inst = $.datepicker._getInst(event.target); + + if (inst.input.val() !== inst.lastVal) { + try { + date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (err) { + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + * If false returned from beforeShow event handler do not show. + * @param input element - the input field attached to the date picker or + * event - if triggered by focus + */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger + input = $("input", input.parentNode)[0]; + } + + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here + return; + } + + var inst, beforeShow, beforeShowSettings, isFixed, + offset, showAnim, duration; + + inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst !== inst) { + $.datepicker._curInst.dpDiv.stop(true, true); + if ( inst && $.datepicker._datepickerShowing ) { + $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] ); + } + } + + beforeShow = $.datepicker._get(inst, "beforeShow"); + beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {}; + if(beforeShowSettings === false){ + return; + } + datepicker_extendRemove(inst.settings, beforeShowSettings); + + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + + if ($.datepicker._inDialog) { // hide cursor + input.value = ""; + } + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + + isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css("position") === "fixed"; + return !isFixed; + }); + + offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + //to avoid flashes on Firefox + inst.dpDiv.empty(); + // determine sizing offscreen + inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + "static" : (isFixed ? "fixed" : "absolute")), display: "none", + left: offset.left + "px", top: offset.top + "px"}); + + if (!inst.inline) { + showAnim = $.datepicker._get(inst, "showAnim"); + duration = $.datepicker._get(inst, "duration"); + inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 ); + $.datepicker._datepickerShowing = true; + + if ( $.effects && $.effects.effect[ showAnim ] ) { + inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration); + } else { + inst.dpDiv[showAnim || "show"](showAnim ? duration : null); + } + + if ( $.datepicker._shouldFocusInput( inst ) ) { + inst.input.focus(); + } + + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + this.maxRows = 4; //Reset the max number of rows being displayed (see #7043) + datepicker_instActive = inst; // for delegate hover events + inst.dpDiv.empty().append(this._generateHTML(inst)); + this._attachHandlers(inst); + + var origyearshtml, + numMonths = this._getNumberOfMonths(inst), + cols = numMonths[1], + width = 17, + activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ); + + if ( activeCell.length > 0 ) { + datepicker_handleMouseover.apply( activeCell.get( 0 ) ); + } + + inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""); + if (cols > 1) { + inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em"); + } + inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") + + "Class"]("ui-datepicker-multi"); + inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") + + "Class"]("ui-datepicker-rtl"); + + if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) { + inst.input.focus(); + } + + // deffered render of the years select (to avoid flashes on Firefox) + if( inst.yearshtml ){ + origyearshtml = inst.yearshtml; + setTimeout(function(){ + //assure that inst.yearshtml didn't change. + if( origyearshtml === inst.yearshtml && inst.yearshtml ){ + inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml); + } + origyearshtml = inst.yearshtml = null; + }, 0); + } + }, + + // #6694 - don't focus the input if it's already focused + // this breaks the change event in IE + // Support: IE and jQuery <1.9 + _shouldFocusInput: function( inst ) { + return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" ); + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(), + dpHeight = inst.dpDiv.outerHeight(), + inputWidth = inst.input ? inst.input.outerWidth() : 0, + inputHeight = inst.input ? inst.input.outerHeight() : 0, + viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()), + viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop()); + + offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var position, + inst = this._getInst(obj), + isRTL = this._get(inst, "isRTL"); + + while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) { + obj = obj[isRTL ? "previousSibling" : "nextSibling"]; + } + + position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Hide the date picker from view. + * @param input element - the input field attached to the date picker + */ + _hideDatepicker: function(input) { + var showAnim, duration, postProcess, onClose, + inst = this._curInst; + + if (!inst || (input && inst !== $.data(input, "datepicker"))) { + return; + } + + if (this._datepickerShowing) { + showAnim = this._get(inst, "showAnim"); + duration = this._get(inst, "duration"); + postProcess = function() { + $.datepicker._tidyDialog(inst); + }; + + // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed + if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) { + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess); + } else { + inst.dpDiv[(showAnim === "slideDown" ? "slideUp" : + (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess); + } + + if (!showAnim) { + postProcess(); + } + this._datepickerShowing = false; + + onClose = this._get(inst, "onClose"); + if (onClose) { + onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]); + } + + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" }); + if ($.blockUI) { + $.unblockUI(); + $("body").append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar"); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) { + return; + } + + var $target = $(event.target), + inst = $.datepicker._getInst($target[0]); + + if ( ( ( $target[0].id !== $.datepicker._mainDivId && + $target.parents("#" + $.datepicker._mainDivId).length === 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.closest("." + $.datepicker._triggerClass).length && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) || + ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) { + $.datepicker._hideDatepicker(); + } + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id), + inst = this._getInst(target[0]); + + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning + period); + this._updateDatepicker(inst); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var date, + target = $(id), + inst = this._getInst(target[0]); + + if (this._get(inst, "gotoCurrent") && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } else { + date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id), + inst = this._getInst(target[0]); + + inst["selected" + (period === "M" ? "Month" : "Year")] = + inst["draw" + (period === "M" ? "Month" : "Year")] = + parseInt(select.options[select.selectedIndex].value,10); + + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var inst, + target = $(id); + + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + + inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $("a", td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + this._selectDate(target, ""); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var onSelect, + target = $(id), + inst = this._getInst(target[0]); + + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) { + inst.input.val(dateStr); + } + this._updateAlternate(inst); + + onSelect = this._get(inst, "onSelect"); + if (onSelect) { + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + } else if (inst.input) { + inst.input.trigger("change"); // fire the change event + } + + if (inst.inline){ + this._updateDatepicker(inst); + } else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) !== "object") { + inst.input.focus(); // restore focus + } + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altFormat, date, dateStr, + altField = this._get(inst, "altField"); + + if (altField) { // update alternate field too + altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat"); + date = this._getDate(inst); + dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + * @param date Date - the date to customise + * @return [boolean, string] - is this date selectable?, what is its CSS class? + */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), ""]; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + * @param date Date - the date to get the week for + * @return number - the number of the week within the year that contains this date + */ + iso8601Week: function(date) { + var time, + checkDate = new Date(date.getTime()); + + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + + time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + * See formatDate below for the possible formats. + * + * @param format string - the expected format of the date + * @param value string - the date in the above format + * @param settings Object - attributes include: + * shortYearCutoff number - the cutoff year for determining the century (optional) + * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + * dayNames string[7] - names of the days from Sunday (optional) + * monthNamesShort string[12] - abbreviated names of the months (optional) + * monthNames string[12] - names of the months (optional) + * @return Date - the extracted date value or null if value is blank + */ + parseDate: function (format, value, settings) { + if (format == null || value == null) { + throw "Invalid arguments"; + } + + value = (typeof value === "object" ? value.toString() : value + ""); + if (value === "") { + return null; + } + + var iFormat, dim, extra, + iValue = 0, + shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff, + shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp : + new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)), + dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort, + dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames, + monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort, + monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames, + year = -1, + month = -1, + day = -1, + doy = -1, + literal = false, + date, + // Check whether a format character is doubled + lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); + if (matches) { + iFormat++; + } + return matches; + }, + // Extract a number from the string value + getNumber = function(match) { + var isDoubled = lookAhead(match), + size = (match === "@" ? 14 : (match === "!" ? 20 : + (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))), + minSize = (match === "y" ? size : 1), + digits = new RegExp("^\\d{" + minSize + "," + size + "}"), + num = value.substring(iValue).match(digits); + if (!num) { + throw "Missing number at position " + iValue; + } + iValue += num[0].length; + return parseInt(num[0], 10); + }, + // Extract a name from the string value and convert to an index + getName = function(match, shortNames, longNames) { + var index = -1, + names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { + return [ [k, v] ]; + }).sort(function (a, b) { + return -(a[1].length - b[1].length); + }); + + $.each(names, function (i, pair) { + var name = pair[1]; + if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) { + index = pair[0]; + iValue += name.length; + return false; + } + }); + if (index !== -1) { + return index + 1; + } else { + throw "Unknown name at position " + iValue; + } + }, + // Confirm that a literal character matches the string value + checkLiteral = function() { + if (value.charAt(iValue) !== format.charAt(iFormat)) { + throw "Unexpected literal at position " + iValue; + } + iValue++; + }; + + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + checkLiteral(); + } + } else { + switch (format.charAt(iFormat)) { + case "d": + day = getNumber("d"); + break; + case "D": + getName("D", dayNamesShort, dayNames); + break; + case "o": + doy = getNumber("o"); + break; + case "m": + month = getNumber("m"); + break; + case "M": + month = getName("M", monthNamesShort, monthNames); + break; + case "y": + year = getNumber("y"); + break; + case "@": + date = new Date(getNumber("@")); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "!": + date = new Date((getNumber("!") - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")){ + checkLiteral(); + } else { + literal = true; + } + break; + default: + checkLiteral(); + } + } + } + + if (iValue < value.length){ + extra = value.substr(iValue); + if (!/^\s+/.test(extra)) { + throw "Extra/unparsed characters found in date: " + extra; + } + } + + if (year === -1) { + year = new Date().getFullYear(); + } else if (year < 100) { + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + } + + if (doy > -1) { + month = 1; + day = doy; + do { + dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) { + break; + } + month++; + day -= dim; + } while (true); + } + + date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) { + throw "Invalid date"; // E.g. 31/02/00 + } + return date; + }, + + /* Standard date formats. */ + ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601) + COOKIE: "D, dd M yy", + ISO_8601: "yy-mm-dd", + RFC_822: "D, d M y", + RFC_850: "DD, dd-M-y", + RFC_1036: "D, d M y", + RFC_1123: "D, d M yy", + RFC_2822: "D, d M yy", + RSS: "D, d M y", // RFC 822 + TICKS: "!", + TIMESTAMP: "@", + W3C: "yy-mm-dd", // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + * The format can be combinations of the following: + * d - day of month (no leading zero) + * dd - day of month (two digit) + * o - day of year (no leading zeros) + * oo - day of year (three digit) + * D - day name short + * DD - day name long + * m - month of year (no leading zero) + * mm - month of year (two digit) + * M - month name short + * MM - month name long + * y - year (two digit) + * yy - year (four digit) + * @ - Unix timestamp (ms since 01/01/1970) + * ! - Windows ticks (100ns since 01/01/0001) + * "..." - literal text + * '' - single quote + * + * @param format string - the desired format of the date + * @param date Date - the date value to format + * @param settings Object - attributes include: + * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + * dayNames string[7] - names of the days from Sunday (optional) + * monthNamesShort string[12] - abbreviated names of the months (optional) + * monthNames string[12] - names of the months (optional) + * @return string - the date in the above format + */ + formatDate: function (format, date, settings) { + if (!date) { + return ""; + } + + var iFormat, + dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort, + dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames, + monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort, + monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames, + // Check whether a format character is doubled + lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); + if (matches) { + iFormat++; + } + return matches; + }, + // Format a number, with leading zero if necessary + formatNumber = function(match, value, len) { + var num = "" + value; + if (lookAhead(match)) { + while (num.length < len) { + num = "0" + num; + } + } + return num; + }, + // Format a name, short or long as requested + formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }, + output = "", + literal = false; + + if (date) { + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + output += format.charAt(iFormat); + } + } else { + switch (format.charAt(iFormat)) { + case "d": + output += formatNumber("d", date.getDate(), 2); + break; + case "D": + output += formatName("D", date.getDay(), dayNamesShort, dayNames); + break; + case "o": + output += formatNumber("o", + Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); + break; + case "m": + output += formatNumber("m", date.getMonth() + 1, 2); + break; + case "M": + output += formatName("M", date.getMonth(), monthNamesShort, monthNames); + break; + case "y": + output += (lookAhead("y") ? date.getFullYear() : + (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100); + break; + case "@": + output += date.getTime(); + break; + case "!": + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) { + output += "'"; + } else { + literal = true; + } + break; + default: + output += format.charAt(iFormat); + } + } + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var iFormat, + chars = "", + literal = false, + // Check whether a format character is doubled + lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); + if (matches) { + iFormat++; + } + return matches; + }; + + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + chars += format.charAt(iFormat); + } + } else { + switch (format.charAt(iFormat)) { + case "d": case "m": case "y": case "@": + chars += "0123456789"; + break; + case "D": case "M": + return null; // Accept anything + case "'": + if (lookAhead("'")) { + chars += "'"; + } else { + literal = true; + } + break; + default: + chars += format.charAt(iFormat); + } + } + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() === inst.lastVal) { + return; + } + + var dateFormat = this._get(inst, "dateFormat"), + dates = inst.lastVal = inst.input ? inst.input.val() : null, + defaultDate = this._getDefaultDate(inst), + date = defaultDate, + settings = this._getFormatConfig(inst); + + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + dates = (noDefault ? "" : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, "defaultDate"), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }, + offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(), + year = date.getFullYear(), + month = date.getMonth(), + day = date.getDate(), + pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, + matches = pattern.exec(offset); + + while (matches) { + switch (matches[2] || "d") { + case "d" : case "D" : + day += parseInt(matches[1],10); break; + case "w" : case "W" : + day += parseInt(matches[1],10) * 7; break; + case "m" : case "M" : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case "y": case "Y" : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }, + newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) : + (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); + + newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate); + if (newDate) { + newDate.setHours(0); + newDate.setMinutes(0); + newDate.setSeconds(0); + newDate.setMilliseconds(0); + } + return this._daylightSavingAdjust(newDate); + }, + + /* Handle switch to/from daylight saving. + * Hours may be non-zero on daylight saving cut-over: + * > 12 when midnight changeover, but then cannot generate + * midnight datetime, so jump to 1AM, otherwise reset. + * @param date (Date) the date to check + * @return (Date) the corrected date + */ + _daylightSavingAdjust: function(date) { + if (!date) { + return null; + } + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !date, + origMonth = inst.selectedMonth, + origYear = inst.selectedYear, + newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + + inst.selectedDay = inst.currentDay = newDate.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); + if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) { + this._notifyChange(inst); + } + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? "" : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Attach the onxxx handlers. These are declared statically so + * they work with static code transformers like Caja. + */ + _attachHandlers: function(inst) { + var stepMonths = this._get(inst, "stepMonths"), + id = "#" + inst.id.replace( /\\\\/g, "\\" ); + inst.dpDiv.find("[data-handler]").map(function () { + var handler = { + prev: function () { + $.datepicker._adjustDate(id, -stepMonths, "M"); + }, + next: function () { + $.datepicker._adjustDate(id, +stepMonths, "M"); + }, + hide: function () { + $.datepicker._hideDatepicker(); + }, + today: function () { + $.datepicker._gotoToday(id); + }, + selectDay: function () { + $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this); + return false; + }, + selectMonth: function () { + $.datepicker._selectMonthYear(id, this, "M"); + return false; + }, + selectYear: function () { + $.datepicker._selectMonthYear(id, this, "Y"); + return false; + } + }; + $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]); + }); + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, + controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, + monthNames, monthNamesShort, beforeShowDay, showOtherMonths, + selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, + cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, + printDate, dRow, tbody, daySettings, otherMonth, unselectable, + tempDate = new Date(), + today = this._daylightSavingAdjust( + new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time + isRTL = this._get(inst, "isRTL"), + showButtonPanel = this._get(inst, "showButtonPanel"), + hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"), + navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"), + numMonths = this._getNumberOfMonths(inst), + showCurrentAtPos = this._get(inst, "showCurrentAtPos"), + stepMonths = this._get(inst, "stepMonths"), + isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1), + currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))), + minDate = this._getMinMaxDate(inst, "min"), + maxDate = this._getMinMaxDate(inst, "max"), + drawMonth = inst.drawMonth - showCurrentAtPos, + drawYear = inst.drawYear; + + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + + prevText = this._get(inst, "prevText"); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + + prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + "" + prevText + "" : + (hideIfNoPrevNext ? "" : "" + prevText + "")); + + nextText = this._get(inst, "nextText"); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + + next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + "" + nextText + "" : + (hideIfNoPrevNext ? "" : "" + nextText + "")); + + currentText = this._get(inst, "currentText"); + gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + + controls = (!inst.inline ? "" : ""); + + buttonPanel = (showButtonPanel) ? "
      " + (isRTL ? controls : "") + + (this._isInRange(inst, gotoDate) ? "" : "") + (isRTL ? "" : controls) + "
      " : ""; + + firstDay = parseInt(this._get(inst, "firstDay"),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + + showWeek = this._get(inst, "showWeek"); + dayNames = this._get(inst, "dayNames"); + dayNamesMin = this._get(inst, "dayNamesMin"); + monthNames = this._get(inst, "monthNames"); + monthNamesShort = this._get(inst, "monthNamesShort"); + beforeShowDay = this._get(inst, "beforeShowDay"); + showOtherMonths = this._get(inst, "showOtherMonths"); + selectOtherMonths = this._get(inst, "selectOtherMonths"); + defaultDate = this._getDefaultDate(inst); + html = ""; + dow; + for (row = 0; row < numMonths[0]; row++) { + group = ""; + this.maxRows = 4; + for (col = 0; col < numMonths[1]; col++) { + selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + cornerClass = " ui-corner-all"; + calender = ""; + if (isMultiMonth) { + calender += "
      "; + } + calender += "
      " + + (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") + + (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + "
      " + + ""; + thead = (showWeek ? "" : ""); + for (dow = 0; dow < 7; dow++) { // days of the week + day = (dow + firstDay) % 7; + thead += ""; + } + calender += thead + ""; + daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) { + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + } + leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate + numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043) + this.maxRows = numRows; + printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += ""; + tbody = (!showWeek ? "" : ""); + for (dow = 0; dow < 7; dow++) { // create date picker days + daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]); + otherMonth = (printDate.getMonth() !== drawMonth); + unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += ""; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + ""; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += "
      " + this._get(inst, "weekHeader") + "= 5 ? " class='ui-datepicker-week-end'" : "") + ">" + + "" + dayNamesMin[day] + "
      " + + this._get(inst, "calculateWeek")(printDate) + "" + // actions + (otherMonth && !showOtherMonths ? " " : // display for other months + (unselectable ? "" + printDate.getDate() + "" : "" + printDate.getDate() + "")) + "
      " + (isMultiMonth ? "
      " + + ((numMonths[0] > 0 && col === numMonths[1]-1) ? "
      " : "") : ""); + group += calender; + } + html += group; + } + html += buttonPanel; + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + + var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, + changeMonth = this._get(inst, "changeMonth"), + changeYear = this._get(inst, "changeYear"), + showMonthAfterYear = this._get(inst, "showMonthAfterYear"), + html = "
      ", + monthHtml = ""; + + // month selection + if (secondary || !changeMonth) { + monthHtml += "" + monthNames[drawMonth] + ""; + } else { + inMinYear = (minDate && minDate.getFullYear() === drawYear); + inMaxYear = (maxDate && maxDate.getFullYear() === drawYear); + monthHtml += ""; + } + + if (!showMonthAfterYear) { + html += monthHtml + (secondary || !(changeMonth && changeYear) ? " " : ""); + } + + // year selection + if ( !inst.yearshtml ) { + inst.yearshtml = ""; + if (secondary || !changeYear) { + html += "" + drawYear + ""; + } else { + // determine range of years to display + years = this._get(inst, "yearRange").split(":"); + thisYear = new Date().getFullYear(); + determineYear = function(value) { + var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + year = determineYear(years[0]); + endYear = Math.max(year, determineYear(years[1] || "")); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += ""; + + html += inst.yearshtml; + inst.yearshtml = null; + } + } + + html += this._get(inst, "yearSuffix"); + if (showMonthAfterYear) { + html += (secondary || !(changeMonth && changeYear) ? " " : "") + monthHtml; + } + html += "
      "; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period === "Y" ? offset : 0), + month = inst.drawMonth + (period === "M" ? offset : 0), + day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0), + date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day))); + + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period === "M" || period === "Y") { + this._notifyChange(inst); + } + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, "min"), + maxDate = this._getMinMaxDate(inst, "max"), + newDate = (minDate && date < minDate ? minDate : date); + return (maxDate && newDate > maxDate ? maxDate : newDate); + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, "onChangeMonthYear"); + if (onChange) { + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + } + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, "numberOfMonths"); + return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + "Date"), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst), + date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + + if (offset < 0) { + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + } + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var yearSplit, currentYear, + minDate = this._getMinMaxDate(inst, "min"), + maxDate = this._getMinMaxDate(inst, "max"), + minYear = null, + maxYear = null, + years = this._get(inst, "yearRange"); + if (years){ + yearSplit = years.split(":"); + currentYear = new Date().getFullYear(); + minYear = parseInt(yearSplit[0], 10); + maxYear = parseInt(yearSplit[1], 10); + if ( yearSplit[0].match(/[+\-].*/) ) { + minYear += currentYear; + } + if ( yearSplit[1].match(/[+\-].*/) ) { + maxYear += currentYear; + } + } + + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime()) && + (!minYear || date.getFullYear() >= minYear) && + (!maxYear || date.getFullYear() <= maxYear)); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, "shortYearCutoff"); + shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"), + monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day === "object" ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst)); + } +}); + +/* + * Bind hover events for datepicker elements. + * Done via delegate so the binding only occurs once in the lifetime of the parent div. + * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. + */ +function datepicker_bindHover(dpDiv) { + var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; + return dpDiv.delegate(selector, "mouseout", function() { + $(this).removeClass("ui-state-hover"); + if (this.className.indexOf("ui-datepicker-prev") !== -1) { + $(this).removeClass("ui-datepicker-prev-hover"); + } + if (this.className.indexOf("ui-datepicker-next") !== -1) { + $(this).removeClass("ui-datepicker-next-hover"); + } + }) + .delegate( selector, "mouseover", datepicker_handleMouseover ); +} + +function datepicker_handleMouseover() { + if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) { + $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); + $(this).addClass("ui-state-hover"); + if (this.className.indexOf("ui-datepicker-prev") !== -1) { + $(this).addClass("ui-datepicker-prev-hover"); + } + if (this.className.indexOf("ui-datepicker-next") !== -1) { + $(this).addClass("ui-datepicker-next-hover"); + } + } +} + +/* jQuery extend now ignores nulls! */ +function datepicker_extendRemove(target, props) { + $.extend(target, props); + for (var name in props) { + if (props[name] == null) { + target[name] = props[name]; + } + } + return target; +} + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick); + $.datepicker.initialized = true; + } + + /* Append datepicker main container to body if not exist. */ + if ($("#"+$.datepicker._mainDivId).length === 0) { + $("body").append($.datepicker.dpDiv); + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) { + return $.datepicker["_" + options + "Datepicker"]. + apply($.datepicker, [this[0]].concat(otherArgs)); + } + if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") { + return $.datepicker["_" + options + "Datepicker"]. + apply($.datepicker, [this[0]].concat(otherArgs)); + } + return this.each(function() { + typeof options === "string" ? + $.datepicker["_" + options + "Datepicker"]. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.11.4"; + +var datepicker = $.datepicker; + + +/*! + * jQuery UI Draggable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/draggable/ + */ + + +$.widget("ui.draggable", $.ui.mouse, { + version: "1.11.4", + widgetEventPrefix: "drag", + options: { + addClasses: true, + appendTo: "parent", + axis: false, + connectToSortable: false, + containment: false, + cursor: "auto", + cursorAt: false, + grid: false, + handle: false, + helper: "original", + iframeFix: false, + opacity: false, + refreshPositions: false, + revert: false, + revertDuration: 500, + scope: "default", + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + snap: false, + snapMode: "both", + snapTolerance: 20, + stack: false, + zIndex: false, + + // callbacks + drag: null, + start: null, + stop: null + }, + _create: function() { + + if ( this.options.helper === "original" ) { + this._setPositionRelative(); + } + if (this.options.addClasses){ + this.element.addClass("ui-draggable"); + } + if (this.options.disabled){ + this.element.addClass("ui-draggable-disabled"); + } + this._setHandleClassName(); + + this._mouseInit(); + }, + + _setOption: function( key, value ) { + this._super( key, value ); + if ( key === "handle" ) { + this._removeHandleClassName(); + this._setHandleClassName(); + } + }, + + _destroy: function() { + if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) { + this.destroyOnClear = true; + return; + } + this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" ); + this._removeHandleClassName(); + this._mouseDestroy(); + }, + + _mouseCapture: function(event) { + var o = this.options; + + this._blurActiveElement( event ); + + // among others, prevent a drag on a resizable-handle + if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) { + return false; + } + + //Quit if we're not on a valid handle + this.handle = this._getHandle(event); + if (!this.handle) { + return false; + } + + this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix ); + + return true; + + }, + + _blockFrames: function( selector ) { + this.iframeBlocks = this.document.find( selector ).map(function() { + var iframe = $( this ); + + return $( "
      " ) + .css( "position", "absolute" ) + .appendTo( iframe.parent() ) + .outerWidth( iframe.outerWidth() ) + .outerHeight( iframe.outerHeight() ) + .offset( iframe.offset() )[ 0 ]; + }); + }, + + _unblockFrames: function() { + if ( this.iframeBlocks ) { + this.iframeBlocks.remove(); + delete this.iframeBlocks; + } + }, + + _blurActiveElement: function( event ) { + var document = this.document[ 0 ]; + + // Only need to blur if the event occurred on the draggable itself, see #10527 + if ( !this.handleElement.is( event.target ) ) { + return; + } + + // support: IE9 + // IE9 throws an "Unspecified error" accessing document.activeElement from an '); + } + + // ADD VIMEO IFRAME IF NEEDED + if (vimeoid!=undefined && String(vimeoid).length>1 && nextcaption.find('iframe').length==0) { + if (location.protocol === 'https:') + httpprefix = "https"; + + nextcaption.append(''); + } + + // ADD HTML5 VIDEO IF NEEDED + if ((videomp!=undefined || videowebm!=undefined) && nextcaption.find('video').length==0) { + + if (videocontrols!="controls") videocontrols=""; + var apptxt = ''; + nextcaption.append(apptxt);*/ + + if (nextcaption.data('videoposter')!=undefined) + if (nextcaption.data('videoposter') != undefined) apptxt = apptxt + 'poster="'+nextcaption.data('videoposter')+'">'; + if (videowebm!=undefined && get_browser().toLowerCase()=="firefox") apptxt = apptxt + ''; + if (videomp!=undefined) apptxt = apptxt + ''; + if (videoogv!=undefined) apptxt = apptxt + ''; + apptxt = apptxt + ''; + nextcaption.append(apptxt); + + if (videocontrols=="controls") + nextcaption.append('
      '+ + '
      '+ + '
      '+ + '
      '+ + '
      '+ + '
      '+ + '
      '); + } + + // RESET DEFAULTS + var autoplaywason = false; + if (nextcaption.data('autoplayonlyfirsttime') == true || nextcaption.data('autoplayonlyfirsttime')=="true" || nextcaption.data('autoplay')==true) { + nextcaption.data('autoplay',true); + autoplaywason = true; + } + + + nextcaption.find('iframe').each(function() { + var ifr=jQuery(this); + + punchgs.TweenLite.to(ifr,0.1,{autoAlpha:1, zIndex:0, transformStyle:"preserve-3d",z:0,rotationX:0,force3D:"auto"}); + if (is_mobile()) { + var oldsrc = ifr.attr('src'); + ifr.attr('src',""); + ifr.attr('src',oldsrc); + } + + + // START YOUTUBE HANDLING + opt.nextslideatend = nextcaption.data('nextslideatend'); + + // IF VIDEOPOSTER EXISTING + if (nextcaption.data('videoposter')!=undefined && nextcaption.data('videoposter').length>2 && nextcaption.data('autoplay')!=true && !internrecalled) { + if (nextcaption.find('.tp-thumb-image').length==0) + nextcaption.append('
      '); + else + punchgs.TweenLite.set(nextcaption.find('.tp-thumb-image'),{autoAlpha:1}); + } + + // IF IFRAME IS A YOUTUBE FRAME + if (ifr.attr('src').toLowerCase().indexOf('youtube')>=0) { + + // IF LISTENER DOES NOT EXIST YET + if (!ifr.hasClass("HasListener")) { + try { + ifr.attr('id',frameID); + var player; + var ytint = setInterval(function() { + if (YT !=undefined) + if (typeof YT.Player != undefined && typeof YT.Player !="undefined") { + player = new YT.Player(frameID, { + events: { + "onStateChange": onPlayerStateChange, + 'onReady': function(event) { + var embedCode = event.target.getVideoEmbedCode(), + ytcont = jQuery('#'+embedCode.split('id="')[1].split('"')[0]), + nextcaption = ytcont.closest('.tp-caption'), + videorate = nextcaption.data('videorate'), + videostart = nextcaption.data('videostart'); + + + if (videorate!=undefined) + event.target.setPlaybackRate(parseFloat(videorate)); + + /*if (nextcaption.data('autoplay')==true || autoplaywason) + event.target.playVideo();*/ + + if (!is_mobile() && nextcaption.data('autoplay')==true || autoplaywason) { + nextcaption.data('timerplay',setTimeout(function() { + event.target.playVideo(); + },nextcaption.data('start'))); + } + + // PLAY VIDEO IF THUMBNAIL HAS BEEN CLICKED + nextcaption.find('.tp-thumb-image').click(function() { + punchgs.TweenLite.to(jQuery(this),0.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut}) + if (!is_mobile()) { + player.playVideo(); + } + }) + + } + } + }); + } + ifr.addClass("HasListener"); + nextcaption.data('player',player); + clearInterval(ytint); + }, 100) + } catch(e) {} + } else { + if (!recalled) { + var player=nextcaption.data('player'); + if (nextcaption.data('forcerewind')=="on" && !is_mobile()) + player.seekTo(0); + + if (!is_mobile() && nextcaption.data('autoplay')==true || autoplaywason) { + nextcaption.data('timerplay',setTimeout(function() { + player.playVideo(); + },nextcaption.data('start'))); + } + } + } // END YOUTUBE HANDLING + + + } else + + // START VIMEO HANDLING + if (ifr.attr('src').toLowerCase().indexOf('vimeo')>=0) { + if (!ifr.hasClass("HasListener")) { + ifr.addClass("HasListener"); + ifr.attr('id',frameID); + var isrc = ifr.attr('src'); + var queryParameters = {}, queryString = isrc, + re = /([^&=]+)=([^&]*)/g, m; + // Creates a map with the query string parameters + while (m = re.exec(queryString)) { + queryParameters[decodeURIComponent(m[1])] = decodeURIComponent(m[2]); + } + + if (queryParameters['player_id']!=undefined) + isrc = isrc.replace(queryParameters['player_id'],frameID); + else + isrc=isrc+"&player_id="+frameID; + + try{ isrc = isrc.replace('api=0','api=1'); } catch(e) {} + + isrc=isrc+"&api=1"; + + ifr.attr('src',isrc); + var player = nextcaption.find('iframe')[0]; + var vimint = setInterval(function() { + if ($f !=undefined){ + if (typeof $f(frameID).api != undefined && typeof $f(frameID).api !="undefined") { + + $f(player).addEvent('ready', function(){ + vimeoready_auto(frameID,autoplaywason) + }); + clearInterval(vimint); + } + } + },100); + + } else { + if (!recalled) { + if (!is_mobile() && (nextcaption.data('autoplay')==true || nextcaption.data('forcerewind')=="on")) { + + var ifr = nextcaption.find('iframe'); + var id = ifr.attr('id'); + var froogaloop = $f(id); + if (nextcaption.data('forcerewind')=="on") + froogaloop.api("seekTo",0); + nextcaption.data('timerplay',setTimeout(function() { + if (nextcaption.data('autoplay')==true) + froogaloop.api("play"); + },nextcaption.data('start'))); + } + } + }// END HAS LISTENER HANDLING + } // END OF VIMEO HANDLING + }); // END OF LOOP THROUGH IFRAMES + + + + // START OF HTML5 VIDEOS + if ((is_mobile() && nextcaption.data('disablevideoonmobile')==1) ||isIE(8)) nextcaption.find('video').remove(); + //if (is_mobile() && jQuery(window).width()<569) nextcaption.find('video').remove() + + if (nextcaption.find('video').length>0) { + nextcaption.find('video').each(function(i) { + + var video = this, + jvideo = jQuery(this); + + + if (!jvideo.parent().hasClass("html5vid")) + jvideo.wrap('
      '); + + var html5vid = jvideo.parent(); + + // WAITING FOR META DATAS + + addEvent(video,'loadedmetadata',function(html5vid) { + html5vid.data('metaloaded',1); + }(html5vid)); + + + clearInterval(html5vid.data('interval')); + html5vid.data('interval',setInterval(function() { + if (html5vid.data('metaloaded')==1 || video.duration!=NaN) { + clearInterval(html5vid.data('interval')); + // FIRST TIME LOADED THE HTML5 VIDEO + if (!html5vid.hasClass("HasListener")) { + html5vid.addClass("HasListener"); + + if (nextcaption.data('dottedoverlay')!="none" && nextcaption.data('dottedoverlay')!=undefined) + if (nextcaption.find('.tp-dottedoverlay').length!=1) + html5vid.append('
      '); + + if (jvideo.attr('control') == undefined ) { + if (html5vid.find('.tp-video-play-button').length==0) + html5vid.append('
      '); + html5vid.find('video, .tp-poster, .tp-video-play-button').click(function() { + if (html5vid.hasClass("videoisplaying")) + video.pause(); + else + video.play(); + }) + } + + if (nextcaption.data('forcecover')==1 || nextcaption.hasClass('fullscreenvideo')) { + if (nextcaption.data('forcecover')==1) { + updateHTML5Size(html5vid,opt.container); + html5vid.addClass("fullcoveredvideo"); + nextcaption.addClass("fullcoveredvideo"); + } + html5vid.css({width:"100%", height:"100%"}); + } + + + + var playButton = nextcaption.find('.tp-vid-play-pause')[0], + muteButton = nextcaption.find('.tp-vid-mute')[0], + fullScreenButton = nextcaption.find('.tp-vid-full-screen')[0], + seekBar = nextcaption.find('.tp-seek-bar')[0], + volumeBar = nextcaption.find('.tp-volume-bar')[0]; + + if (playButton!=undefined) { + // Event listener for the play/pause button + addEvent(playButton,"click", function() { + if (video.paused == true) + // Play the video + video.play(); + else + // Pause the video + video.pause(); + }); + + // Event listener for the mute button + addEvent(muteButton,"click", function() { + if (video.muted == false) { + // Mute the video + video.muted = true; + + // Update the button text + muteButton.innerHTML = "Unmute"; + } else { + // Unmute the video + video.muted = false; + + // Update the button text + muteButton.innerHTML = "Mute"; + } + }); + + // Event listener for the full-screen button + addEvent(fullScreenButton,"click", function() { + if (video.requestFullscreen) { + video.requestFullscreen(); + } else if (video.mozRequestFullScreen) { + video.mozRequestFullScreen(); // Firefox + } else if (video.webkitRequestFullscreen) { + video.webkitRequestFullscreen(); // Chrome and Safari + } + }); + + + // Event listener for the seek bar + addEvent(seekBar,"change", function() { + // Calculate the new time + var time = video.duration * (seekBar.value / 100); + // Update the video time + video.currentTime = time; + }); + + + // Update the seek bar as the video plays + addEvent(video,"timeupdate", function() { + // Calculate the slider value + var value = (100 / video.duration) * video.currentTime; + + // Update the slider value + seekBar.value = value; + }); + + // Pause the video when the seek handle is being dragged + addEvent(seekBar,"mousedown", function() { + video.pause(); + }); + + // Play the video when the seek handle is dropped + addEvent(seekBar,"mouseup", function() { + video.play(); + }); + + // Event listener for the volume bar + addEvent(volumeBar,"change", function() { + // Update the video volume + video.volume = volumeBar.value; + }); + } + + + // VIDEO EVENT LISTENER FOR "PLAY" + addEvent(video,"play",function() { + if (nextcaption.data('volume')=="mute") + video.muted=true; + + html5vid.addClass("videoisplaying"); + + if (nextcaption.data('videoloop')=="loopandnoslidestop") { + opt.videoplaying=false; + opt.container.trigger('starttimer'); + opt.container.trigger('revolution.slide.onvideostop'); + } else { + + opt.videoplaying=true; + opt.container.trigger('stoptimer'); + opt.container.trigger('revolution.slide.onvideoplay'); + } + + var playButton = nextcaption.find('.tp-vid-play-pause')[0], + muteButton = nextcaption.find('.tp-vid-mute')[0]; + if (playButton!=undefined) + playButton.innerHTML = "Pause"; + if (muteButton!=undefined && video.muted) + muteButton.innerHTML = "Unmute"; + }); + + // VIDEO EVENT LISTENER FOR "PAUSE" + addEvent(video,"pause",function() { + html5vid.removeClass("videoisplaying"); + opt.videoplaying=false; + opt.container.trigger('starttimer'); + opt.container.trigger('revolution.slide.onvideostop'); + var playButton = nextcaption.find('.tp-vid-play-pause')[0]; + if (playButton!=undefined) + playButton.innerHTML = "Play"; + + }); + + // VIDEO EVENT LISTENER FOR "END" + addEvent(video,"ended",function() { + html5vid.removeClass("videoisplaying"); + opt.videoplaying=false; + opt.container.trigger('starttimer'); + opt.container.trigger('revolution.slide.onvideostop'); + if (opt.nextslideatend==true) + opt.container.revnext(); + }); + + } // END OF LISTENER DECLARATION + + var autoplaywason = false; + if (nextcaption.data('autoplayonlyfirsttime') == true || nextcaption.data('autoplayonlyfirsttime')=="true") + autoplaywason = true; + + var mediaaspect=16/9; + if (nextcaption.data('aspectratio')=="4:3") mediaaspect=4/3; + html5vid.data('mediaAspect',mediaaspect); + + if (html5vid.closest('.tp-caption').data('forcecover')==1) { + updateHTML5Size(html5vid,opt.container); + html5vid.addClass("fullcoveredvideo"); + } + + jvideo.css({display:"block"}); + opt.nextslideatend = nextcaption.data('nextslideatend'); + + // IF VIDEO SHOULD BE AUTOPLAYED + if (nextcaption.data('autoplay')==true || autoplaywason==true) { + + + if (nextcaption.data('videoloop')=="loopandnoslidestop") { + opt.videoplaying=false; + opt.container.trigger('starttimer'); + opt.container.trigger('revolution.slide.onvideostop'); + } else { + opt.videoplaying=true; + opt.container.trigger('stoptimer'); + opt.container.trigger('revolution.slide.onvideoplay'); + } + + + if (nextcaption.data('forcerewind')=="on" && !html5vid.hasClass("videoisplaying")) + if (video.currentTime>0) video.currentTime=0; + + if (nextcaption.data('volume')=="mute") + video.muted = true; + + html5vid.data('timerplay',setTimeout(function() { + + if (nextcaption.data('forcerewind')=="on" && !html5vid.hasClass("videoisplaying")) + if (video.currentTime>0) video.currentTime=0; + + if (nextcaption.data('volume')=="mute") + video.muted = true; + + + video.play(); + },10+nextcaption.data('start'))); + } + + if (html5vid.data('ww') == undefined) html5vid.data('ww',jvideo.attr('width')); + if (html5vid.data('hh') == undefined) html5vid.data('hh',jvideo.attr('height')); + + if (!nextcaption.hasClass("fullscreenvideo") && nextcaption.data('forcecover')==1) { + try{ + html5vid.width(html5vid.data('ww')*opt.bw); + html5vid.height(html5vid.data('hh')*opt.bh); + } catch(e) {} + } + + clearInterval(html5vid.data('interval')); + } + }),100); // END OF SET INTERVAL + + }); + } // END OF HTML5 VIDEO FUNCTIONS + + // IF AUTOPLAY IS ON, WE NEED SOME STOP FUNCTION ON + if (nextcaption.data('autoplay')==true) { + setTimeout(function() { + + if (nextcaption.data('videoloop')!="loopandnoslidestop") { + opt.videoplaying=true; + opt.container.trigger('stoptimer'); + } + },200) + if (nextcaption.data('videoloop')!="loopandnoslidestop") { + opt.videoplaying=true; + opt.container.trigger('stoptimer'); + } + + if (nextcaption.data('autoplayonlyfirsttime') == true || nextcaption.data('autoplayonlyfirsttime')=="true" ) { + nextcaption.data('autoplay',false); + nextcaption.data('autoplayonlyfirsttime',false); + } + } + } + + + + + // NEW ENGINE + //if (nextcaption.hasClass("randomrotate") && (opt.ie || opt.ie9)) nextcaption.removeClass("randomrotate").addClass("sfb"); + // nextcaption.removeClass('noFilterClass'); + + + + var imw =0; + var imh = 0; + + if (nextcaption.find('img').length>0) { + var im = nextcaption.find('img'); + if (im.width()==0) im.css({width:"auto"}); + if (im.height()==0) im.css({height:"auto"}); + + if (im.data('ww') == undefined && im.width()>0) im.data('ww',im.width()); + if (im.data('hh') == undefined && im.height()>0) im.data('hh',im.height()); + + var ww = im.data('ww'); + var hh = im.data('hh'); + + if (ww==undefined) ww=0; + if (hh==undefined) hh=0; + + im.width(ww*opt.bw); + im.height(hh*opt.bh); + imw = im.width(); + imh = im.height(); + } else { + + if (nextcaption.find('iframe').length>0 || nextcaption.find('video').length>0) { + + var html5vid = false, + im = nextcaption.find('iframe'); + if (im.length==0) { + im = nextcaption.find('video'); + html5vid = true; + } + im.css({display:"block"}); + + if (nextcaption.data('ww') == undefined) nextcaption.data('ww',im.width()); + if (nextcaption.data('hh') == undefined) nextcaption.data('hh',im.height()); + + var ww = nextcaption.data('ww'), + hh = nextcaption.data('hh'); + + var nc =nextcaption; + if (nc.data('fsize') == undefined) nc.data('fsize',parseInt(nc.css('font-size'),0) || 0); + if (nc.data('pt') == undefined) nc.data('pt',parseInt(nc.css('paddingTop'),0) || 0); + if (nc.data('pb') == undefined) nc.data('pb',parseInt(nc.css('paddingBottom'),0) || 0); + if (nc.data('pl') == undefined) nc.data('pl',parseInt(nc.css('paddingLeft'),0) || 0); + if (nc.data('pr') == undefined) nc.data('pr',parseInt(nc.css('paddingRight'),0) || 0); + + if (nc.data('mt') == undefined) nc.data('mt',parseInt(nc.css('marginTop'),0) || 0); + if (nc.data('mb') == undefined) nc.data('mb',parseInt(nc.css('marginBottom'),0) || 0); + if (nc.data('ml') == undefined) nc.data('ml',parseInt(nc.css('marginLeft'),0) || 0); + if (nc.data('mr') == undefined) nc.data('mr',parseInt(nc.css('marginRight'),0) || 0); + + if (nc.data('bt') == undefined) nc.data('bt',parseInt(nc.css('borderTop'),0) || 0); + if (nc.data('bb') == undefined) nc.data('bb',parseInt(nc.css('borderBottom'),0) || 0); + if (nc.data('bl') == undefined) nc.data('bl',parseInt(nc.css('borderLeft'),0) || 0); + if (nc.data('br') == undefined) nc.data('br',parseInt(nc.css('borderRight'),0) || 0); + + if (nc.data('lh') == undefined) nc.data('lh',parseInt(nc.css('lineHeight'),0) || 0); + + // IE8 FIX FOR AUTO LINEHEIGHT + if (nc.data('lh')=="auto") nc.data('lh',nc.data('fsize')+4); + + var fvwidth=opt.width, + fvheight=opt.height; + if (fvwidth>opt.startwidth) fvwidth=opt.startwidth; + if (fvheight>opt.startheight) fvheight=opt.startheight; + + if (!nextcaption.hasClass('fullscreenvideo')) + nextcaption.css({ + + 'font-size': (nc.data('fsize') * opt.bw)+"px", + + 'padding-top': (nc.data('pt') * opt.bh) + "px", + 'padding-bottom': (nc.data('pb') * opt.bh) + "px", + 'padding-left': (nc.data('pl') * opt.bw) + "px", + 'padding-right': (nc.data('pr') * opt.bw) + "px", + + 'margin-top': (nc.data('mt') * opt.bh) + "px", + 'margin-bottom': (nc.data('mb') * opt.bh) + "px", + 'margin-left': (nc.data('ml') * opt.bw) + "px", + 'margin-right': (nc.data('mr') * opt.bw) + "px", + + 'border-top': (nc.data('bt') * opt.bh) + "px", + 'border-bottom': (nc.data('bb') * opt.bh) + "px", + 'border-left': (nc.data('bl') * opt.bw) + "px", + 'border-right': (nc.data('br') * opt.bw) + "px", + + 'line-height': (nc.data('lh') * opt.bh) + "px", + 'height':(hh*opt.bh)+'px' + }); + else { + + offsetx=0; offsety=0; + nextcaption.data('x',0) + nextcaption.data('y',0) + + var ovhh = opt.height + if (opt.autoHeight=="on") + ovhh = opt.container.height() + nextcaption.css({ + + 'width':opt.width, + 'height':ovhh + }); + } + + if (html5vid == false) { + im.width(ww*opt.bw); + im.height(hh*opt.bh); + } + + else + + if (nextcaption.data('forcecover')!=1 && !nextcaption.hasClass('fullscreenvideo')) { + im.width(ww*opt.bw); + im.height(hh*opt.bh); + } + + + imw = im.width(); + imh = im.height(); + } + + else { + + + nextcaption.find('.tp-resizeme, .tp-resizeme *').each(function() { + calcCaptionResponsive(jQuery(this),opt); + }); + + if (nextcaption.hasClass("tp-resizeme")) { + nextcaption.find('*').each(function() { + calcCaptionResponsive(jQuery(this),opt); + }); + } + + calcCaptionResponsive(nextcaption,opt); + + imh=nextcaption.outerHeight(true); + imw=nextcaption.outerWidth(true); + + // NEXTCAPTION FRONTCORNER CHANGES + var ncch = nextcaption.outerHeight(); + var bgcol = nextcaption.css('backgroundColor'); + nextcaption.find('.frontcorner').css({ + 'borderWidth':ncch+"px", + 'left':(0-ncch)+'px', + 'borderRight':'0px solid transparent', + 'borderTopColor':bgcol + }); + + nextcaption.find('.frontcornertop').css({ + 'borderWidth':ncch+"px", + 'left':(0-ncch)+'px', + 'borderRight':'0px solid transparent', + 'borderBottomColor':bgcol + }); + + // NEXTCAPTION BACKCORNER CHANGES + nextcaption.find('.backcorner').css({ + 'borderWidth':ncch+"px", + 'right':(0-ncch)+'px', + 'borderLeft':'0px solid transparent', + 'borderBottomColor':bgcol + }); + + // NEXTCAPTION BACKCORNER CHANGES + nextcaption.find('.backcornertop').css({ + 'borderWidth':ncch+"px", + 'right':(0-ncch)+'px', + 'borderLeft':'0px solid transparent', + 'borderTopColor':bgcol + }); + + } + + + } + + if (opt.fullScreenAlignForce == "on") { + //xbw = 1; + //xbh = 1; + offsetx=0; + offsety=0; + } + + + + if (nextcaption.data('voffset')==undefined) nextcaption.data('voffset',0); + if (nextcaption.data('hoffset')==undefined) nextcaption.data('hoffset',0); + + var vofs= nextcaption.data('voffset')*xbw; + var hofs= nextcaption.data('hoffset')*xbw; + + var crw = opt.startwidth*xbw; + var crh = opt.startheight*xbw; + + if (opt.fullScreenAlignForce == "on") { + crw = opt.container.width(); + crh = opt.container.height(); + } + + + + // CENTER THE CAPTION HORIZONTALLY + if (nextcaption.data('x')=="center" || nextcaption.data('xcenter')=='center') { + nextcaption.data('xcenter','center'); + //nextcaption.data('x',(crw/2 - nextcaption.outerWidth(true)/2)/xbw+ hofs); + nextcaption.data('x',(crw/2 - nextcaption.outerWidth(true)/2) + hofs); + + + } + + // ALIGN LEFT THE CAPTION HORIZONTALLY + if (nextcaption.data('x')=="left" || nextcaption.data('xleft')=='left') { + nextcaption.data('xleft','left'); + + nextcaption.data('x',(0)/xbw+hofs); + + } + + // ALIGN RIGHT THE CAPTION HORIZONTALLY + if (nextcaption.data('x')=="right" || nextcaption.data('xright')=='right') { + nextcaption.data('xright','right'); + nextcaption.data('x',((crw - nextcaption.outerWidth(true))+hofs)/xbw); + //konsole.log("crw:"+crw+" width:"+nextcaption.outerWidth(true)+" xbw:"+xbw); + //konsole.log("x-pos:"+nextcaption.data('x')) + } + + + // CENTER THE CAPTION VERTICALLY + if (nextcaption.data('y')=="center" || nextcaption.data('ycenter')=='center') { + nextcaption.data('ycenter','center'); + nextcaption.data('y',(crh/2 - nextcaption.outerHeight(true)/2) + vofs); + } + + // ALIGN TOP THE CAPTION VERTICALLY + if (nextcaption.data('y')=="top" || nextcaption.data('ytop')=='top') { + nextcaption.data('ytop','top'); + nextcaption.data('y',(0)/opt.bh+vofs); + + } + + // ALIGN BOTTOM THE CAPTION VERTICALLY + if (nextcaption.data('y')=="bottom" || nextcaption.data('ybottom')=='bottom') { + nextcaption.data('ybottom','bottom'); + nextcaption.data('y',((crh - nextcaption.outerHeight(true))+vofs)/xbw); + + } + + + + // THE TRANSITIONS OF CAPTIONS + // MDELAY AND MSPEED + if (nextcaption.data('start') == undefined) nextcaption.data('start',1000); + + + + var easedata=nextcaption.data('easing'); + if (easedata==undefined) easedata="punchgs.Power1.easeOut"; + + + var mdelay = nextcaption.data('start')/1000, + mspeed = nextcaption.data('speed')/1000; + + + if (nextcaption.data('x')=="center" || nextcaption.data('xcenter')=='center') + var calcx = (nextcaption.data('x')+offsetx); + else { + + var calcx = (xbw*nextcaption.data('x')+offsetx); + } + + + if (nextcaption.data('y')=="center" || nextcaption.data('ycenter')=='center') + var calcy = (nextcaption.data('y')+offsety); + else { + //if (opt.fullScreenAlignForce == "on" && (nextcaption.data('y')=="bottom" || nextcaption.data('ybottom')=='bottom')) + // opt.bh = 1; + + var calcy = (opt.bh*nextcaption.data('y')+offsety); + } + + + punchgs.TweenLite.set(nextcaption,{top:calcy,left:calcx,overwrite:"auto"}); + + if (staticdirection == 0) + internrecalled = true; + + if (nextcaption.data('timeline')!=undefined && !internrecalled) { + if (staticdirection!=2) + nextcaption.data('timeline').gotoAndPlay(0); + internrecalled = true; + } + + if (!internrecalled) { + + + + // CLEAR THE TIMELINE, SINCE IT CAN BE DAMAGED, OR PAUSED AT A FEW PART + if (nextcaption.data('timeline')!=undefined) { + //nextcaption.data('timeline').clear(); + } + + var tl = new punchgs.TimelineLite({smoothChildTiming:true,onStart:tlstart}); + tl.pause(); + + + if (opt.fullScreenAlignForce == "on") { + //calcy = nextcaption.data('y')+offsety; + } + + var animobject = nextcaption; + if (nextcaption.data('mySplitText') !=undefined) nextcaption.data('mySplitText').revert(); + + + if (nextcaption.data('splitin') == "chars" || nextcaption.data('splitin') == "words" || nextcaption.data('splitin') == "lines" || nextcaption.data('splitout') == "chars" || nextcaption.data('splitout') == "words" || nextcaption.data('splitout') == "lines") { + if (nextcaption.find('a').length>0) + nextcaption.data('mySplitText',new punchgs.SplitText(nextcaption.find('a'),{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"})); + else + if (nextcaption.find('.tp-layer-inner-rotation').length>0) + nextcaption.data('mySplitText',new punchgs.SplitText(nextcaption.find('.tp-layer-inner-rotation'),{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"})); + else + nextcaption.data('mySplitText',new punchgs.SplitText(nextcaption,{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"})); + + nextcaption.addClass("splitted"); + } + + if (nextcaption.data('splitin') == "chars") + animobject = nextcaption.data('mySplitText').chars; + + + if (nextcaption.data('splitin') == "words") + animobject = nextcaption.data('mySplitText').words; + + + if (nextcaption.data('splitin') == "lines") + animobject = nextcaption.data('mySplitText').lines; + + + + var frm = newAnimObject(); + var endfrm = newAnimObject(); + + + if (nextcaption.data('repeat')!=undefined) repeatV = nextcaption.data('repeat'); + if (nextcaption.data('yoyo')!=undefined) yoyoV = nextcaption.data('yoyo'); + if (nextcaption.data('repeatdelay')!=undefined) repeatdelayV = nextcaption.data('repeatdelay'); + + var ncc = nextcaption.attr('class'); + + // WHICH ANIMATION TYPE SHOULD BE USED + if (ncc.match("customin")) frm = getAnimDatas(frm,nextcaption.data('customin')); + else + if (ncc.match("randomrotate")) { + + frm.scale = Math.random()*3+1; + frm.rotation = Math.round(Math.random()*200-100); + frm.x = Math.round(Math.random()*200-100); + frm.y = Math.round(Math.random()*200-100); + } + else + if (ncc.match('lfr') || ncc.match('skewfromright')) frm.x = 15+opt.width; + else + if (ncc.match('lfl') || ncc.match('skewfromleft')) frm.x = -15-imw; + else + if (ncc.match('sfl') || ncc.match('skewfromleftshort')) frm.x = -50; + else + if (ncc.match('sfr') || ncc.match('skewfromrightshort')) frm.x = 50; + else + if (ncc.match('lft')) frm.y = -25 - imh; + else + if (ncc.match('lfb')) frm.y = 25 + opt.height; + else + if (ncc.match('sft')) frm.y = -50; + else + if (ncc.match('sfb')) frm.y = 50; + + + if (ncc.match('skewfromright') || nextcaption.hasClass('skewfromrightshort')) frm.skewX = -85 + else + if (ncc.match('skewfromleft') || nextcaption.hasClass('skewfromleftshort')) frm.skewX = 85 + + + if (ncc.match("fade") || ncc.match('sft') || ncc.match('sfl') || ncc.match('sfb') || ncc.match('skewfromleftshort') || ncc.match('sfr') || ncc.match('skewfromrightshort')) + frm.opacity = 0; + + // FOR SAFARI WE NEED TO REMOVE 3D ROTATIONS + if (get_browser().toLowerCase()=="safari") { + //frm.rotationX=0;frm.rotationY=0; + } + + var elemdelay = (nextcaption.data('elementdelay') == undefined) ? 0 : nextcaption.data('elementdelay'); + endfrm.ease = frm.ease = (nextcaption.data('easing') == undefined) ? punchgs.Power1.easeInOut : nextcaption.data('easing'); + + + // DISTANCES SHOULD BE RESIZED ALSO + + frm.data = new Object(); + frm.data.oldx = frm.x; + frm.data.oldy = frm.y; + + endfrm.data = new Object(); + endfrm.data.oldx = endfrm.x; + endfrm.data.oldy = endfrm.y; + + frm.x = frm.x * xbw; + frm.y = frm.y * xbw; + + var newtl = new punchgs.TimelineLite(); + + + if (staticdirection != 2) { + + // CHANGE to punchgs.TweenLite. if Yoyo and Repeat is used. Dont forget to laod the Right Tools for it !! + if (ncc.match("customin")) { + if (animobject != nextcaption) + tl.add(punchgs.TweenLite.set(nextcaption, { force3D:"auto",opacity:1,scaleX:1,scaleY:1,rotationX:0,rotationY:0,rotationZ:0,skewX:0,skewY:0,z:0,x:0,y:0,visibility:'visible',delay:0,overwrite:"all"})); + frm.visibility = "hidden"; + endfrm.visibility = "visible"; + endfrm.overwrite = "all"; + endfrm.opacity = 1; + endfrm.onComplete = animcompleted(); + endfrm.delay = mdelay; + endfrm.force3D="auto" + + tl.add(newtl.staggerFromTo(animobject,mspeed,frm,endfrm,elemdelay),"frame0"); + + } else { + + frm.visibility = "visible"; + frm.transformPerspective = 600; + if (animobject != nextcaption) + tl.add(punchgs.TweenLite.set(nextcaption, { force3D:"auto",opacity:1,scaleX:1,scaleY:1,rotationX:0,rotationY:0,rotationZ:0,skewX:0,skewY:0,z:0,x:0,y:0,visibility:'visible',delay:0,overwrite:"all"})); + + endfrm.visibility = "visible"; + endfrm.delay = mdelay; + endfrm.onComplete = animcompleted(); + endfrm.opacity = 1; + endfrm.force3D="auto"; + if (ncc.match("randomrotate") && animobject != nextcaption) { + + for (var i=0;i0) { + var params = getAnimSteps(spframe); + + addMoveCaption(nextcaption,opt,params,"frame"+(index+10),xbw) + + } + }) + } // END OF ANIMATION STEPS + + tl = nextcaption.data('timeline'); + // IF THERE IS ANY EXIT ANIM DEFINED + // For Static Layers -> 1 -> In, 2-> Out 0-> Ignore -1-> Not Static + if ((nextcaption.data('end')!=undefined) && (staticdirection==-1 || staticdirection==2)) { + endMoveCaption(nextcaption,opt,nextcaption.data('end')/1000,frm,"frame99",xbw); + } else { + if (staticdirection==-1 || staticdirection==2) + endMoveCaption(nextcaption,opt,999999,frm,"frame99",xbw); + else + endMoveCaption(nextcaption,opt,200,frm,"frame99",xbw); + } + + // SAVE THE TIMELINE IN DOM ELEMENT + tl = nextcaption.data('timeline'); + nextcaption.data('timeline',tl); + callCaptionLoops(nextcaption,xbw); + tl.resume(); + } + } + + if (internrecalled) { + killCaptionLoops(nextcaption); + callCaptionLoops(nextcaption,xbw); + + if (nextcaption.data('timeline') != undefined) { + var tweens = nextcaption.data('timeline').getTweensOf(); + jQuery.each(tweens,function(index,tween) { + if (tween.vars.data != undefined) { + var newx = tween.vars.data.oldx * xbw; + var newy = tween.vars.data.oldy * xbw; + if (tween.progress() !=1 && tween.progress()!=0) { + try{ + //tween.updateTo({x:newx, y:newy},true); + tween.vars.x = newx; + tween.vary.y = newy; + } catch(e) { + + } + } else { + if (tween.progress()==1) { + punchgs.TweenLite.set(tween.target,{x:newx,y:newy}); + } + } + } + }) + } + } + + }) + + var bt=jQuery('body').find('#'+opt.container.attr('id')).find('.tp-bannertimer'); + bt.data('opt',opt); + + + + if (mtl != undefined) setTimeout(function() { + mtl.resume(); + },30); + + } + + + var get_browser = function(){ + var N=navigator.appName, ua=navigator.userAgent, tem; + var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); + if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; + M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; + return M[0]; + } + var get_browser_version = function(){ + var N=navigator.appName, ua=navigator.userAgent, tem; + var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); + if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; + M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; + return M[1]; + } + + ///////////////////////////////////////////////////////////////// + // - CALCULATE THE RESPONSIVE SIZES OF THE CAPTIONS - // + ///////////////////////////////////////////////////////////////// + var calcCaptionResponsive = function(nc,opt) { + if (nc.data('fsize') == undefined) nc.data('fsize',parseInt(nc.css('font-size'),0) || 0); + if (nc.data('pt') == undefined) nc.data('pt',parseInt(nc.css('paddingTop'),0) || 0); + if (nc.data('pb') == undefined) nc.data('pb',parseInt(nc.css('paddingBottom'),0) || 0); + if (nc.data('pl') == undefined) nc.data('pl',parseInt(nc.css('paddingLeft'),0) || 0); + if (nc.data('pr') == undefined) nc.data('pr',parseInt(nc.css('paddingRight'),0) || 0); + + if (nc.data('mt') == undefined) nc.data('mt',parseInt(nc.css('marginTop'),0) || 0); + if (nc.data('mb') == undefined) nc.data('mb',parseInt(nc.css('marginBottom'),0) || 0); + if (nc.data('ml') == undefined) nc.data('ml',parseInt(nc.css('marginLeft'),0) || 0); + if (nc.data('mr') == undefined) nc.data('mr',parseInt(nc.css('marginRight'),0) || 0); + + if (nc.data('bt') == undefined) nc.data('bt',parseInt(nc.css('borderTopWidth'),0) || 0); + if (nc.data('bb') == undefined) nc.data('bb',parseInt(nc.css('borderBottomWidth'),0) || 0); + if (nc.data('bl') == undefined) nc.data('bl',parseInt(nc.css('borderLeftWidth'),0) || 0); + if (nc.data('br') == undefined) nc.data('br',parseInt(nc.css('borderRightWidth'),0) || 0); + + if (nc.data('ls') == undefined) nc.data('ls',parseInt(nc.css('letterSpacing'),0) || 0); + + if (nc.data('lh') == undefined) nc.data('lh',parseInt(nc.css('lineHeight'),0) || "auto"); + if (nc.data('minwidth') == undefined) nc.data('minwidth',parseInt(nc.css('minWidth'),0) || 0); + if (nc.data('minheight') == undefined) nc.data('minheight',parseInt(nc.css('minHeight'),0) || 0); + if (nc.data('maxwidth') == undefined) nc.data('maxwidth',parseInt(nc.css('maxWidth'),0) || "none"); + if (nc.data('maxheight') == undefined) nc.data('maxheight',parseInt(nc.css('maxHeight'),0) || "none"); + if (nc.data('wii') == undefined) nc.data('wii',parseInt(nc.css('width'),0) || 0); + if (nc.data('hii') == undefined) nc.data('hii',parseInt(nc.css('height'),0) || 0); + + if (nc.data('wan') == undefined) nc.data('wan',nc.css("-webkit-transition")); + if (nc.data('moan') == undefined) nc.data('moan',nc.css("-moz-animation-transition")); + if (nc.data('man') == undefined) nc.data('man',nc.css("-ms-animation-transition")); + if (nc.data('ani') == undefined) nc.data('ani',nc.css("transition")); + + // IE8 FIX FOR AUTO LINEHEIGHT + if (nc.data('lh')=="auto") nc.data('lh',nc.data('fsize')+4); + + + + + if (!nc.hasClass("tp-splitted")) { + + + nc.css("-webkit-transition", "none"); + nc.css("-moz-transition", "none"); + nc.css("-ms-transition", "none"); + nc.css("transition", "none"); + + punchgs.TweenLite.set(nc,{ + fontSize: Math.round((nc.data('fsize') * opt.bw))+"px", + + letterSpacing:Math.floor((nc.data('ls') * opt.bw))+"px", + + paddingTop: Math.round((nc.data('pt') * opt.bh)) + "px", + paddingBottom: Math.round((nc.data('pb') * opt.bh)) + "px", + paddingLeft: Math.round((nc.data('pl') * opt.bw)) + "px", + paddingRight: Math.round((nc.data('pr') * opt.bw)) + "px", + + marginTop: (nc.data('mt') * opt.bh) + "px", + marginBottom: (nc.data('mb') * opt.bh) + "px", + marginLeft: (nc.data('ml') * opt.bw) + "px", + marginRight: (nc.data('mr') * opt.bw) + "px", + + borderTopWidth: Math.round((nc.data('bt') * opt.bh)) + "px", + borderBottomWidth: Math.round((nc.data('bb') * opt.bh)) + "px", + borderLeftWidth: Math.round((nc.data('bl') * opt.bw)) + "px", + borderRightWidth: Math.round((nc.data('br') * opt.bw)) + "px", + + lineHeight: Math.round((nc.data('lh') * opt.bh)) + "px", + minWidth:(nc.data('minwidth') * opt.bw) + "px", + minHeight:(nc.data('minheight') * opt.bh) + "px", + + /* width:(nc.data('wii') * opt.bw) + "px", + height:(nc.data('hii') * opt.bh) + "px", */ + + overwrite:"auto" + }); + setTimeout(function() { + nc.css("-webkit-transition", nc.data('wan')); + nc.css("-moz-transition", nc.data('moan')); + nc.css("-ms-transition", nc.data('man')); + nc.css("transition", nc.data('ani')); + + },30); + + //konsole.log(nc.data('maxwidth')+" "+nc.data('maxheight')); + if (nc.data('maxheight')!='none') + nc.css({'maxHeight':(nc.data('maxheight') * opt.bh) + "px"}); + + + if (nc.data('maxwidth')!='none') + nc.css({'maxWidth':(nc.data('maxwidth') * opt.bw) + "px"}); + } + } + + + /****************************** + - CAPTION LOOPS - + ********************************/ + + + var callCaptionLoops = function(nextcaption,factor) { + + // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS + nextcaption.find('.rs-pendulum').each(function() { + var el = jQuery(this); + if (el.data('timeline')==undefined) { + el.data('timeline',new punchgs.TimelineLite); + var startdeg = el.data('startdeg')==undefined ? -20 : el.data('startdeg'), + enddeg = el.data('enddeg')==undefined ? 20 : el.data('enddeg'), + speed = el.data('speed')==undefined ? 2 : el.data('speed'), + origin = el.data('origin')==undefined ? "50% 50%" : el.data('origin'), + easing = el.data('easing')==undefined ? punchgs.Power2.easeInOut : el.data('ease'); + + startdeg = startdeg * factor; + enddeg = enddeg * factor; + + el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",rotation:startdeg,transformOrigin:origin},{rotation:enddeg,ease:easing})); + el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",rotation:enddeg,transformOrigin:origin},{rotation:startdeg,ease:easing,onComplete:function() { + el.data('timeline').restart(); + }})); + } + + }) + + // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS + nextcaption.find('.rs-rotate').each(function() { + var el = jQuery(this); + if (el.data('timeline')==undefined) { + el.data('timeline',new punchgs.TimelineLite); + var startdeg = el.data('startdeg')==undefined ? 0 : el.data('startdeg'), + enddeg = el.data('enddeg')==undefined ? 360 : el.data('enddeg'); + speed = el.data('speed')==undefined ? 2 : el.data('speed'), + origin = el.data('origin')==undefined ? "50% 50%" : el.data('origin'), + easing = el.data('easing')==undefined ? punchgs.Power2.easeInOut : el.data('easing'); + + startdeg = startdeg * factor; + enddeg = enddeg * factor; + + el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",rotation:startdeg,transformOrigin:origin},{rotation:enddeg,ease:easing,onComplete:function() { + el.data('timeline').restart(); + }})); + } + + }) + + // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS + nextcaption.find('.rs-slideloop').each(function() { + var el = jQuery(this); + if (el.data('timeline')==undefined) { + el.data('timeline',new punchgs.TimelineLite); + var xs = el.data('xs')==undefined ? 0 : el.data('xs'), + ys = el.data('ys')==undefined ? 0 : el.data('ys'), + xe = el.data('xe')==undefined ? 0 : el.data('xe'), + ye = el.data('ye')==undefined ? 0 : el.data('ye'), + speed = el.data('speed')==undefined ? 2 : el.data('speed'), + easing = el.data('easing')==undefined ? punchgs.Power2.easeInOut : el.data('easing'); + + xs = xs * factor; + ys = ys * factor; + xe = xe * factor; + ye = ye * factor; + + el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",x:xs,y:ys},{x:xe,y:ye,ease:easing})); + el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",x:xe,y:ye},{x:xs,y:ys,onComplete:function() { + el.data('timeline').restart(); + }})); + } + + }) + + // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS + nextcaption.find('.rs-pulse').each(function() { + var el = jQuery(this); + if (el.data('timeline')==undefined) { + el.data('timeline',new punchgs.TimelineLite); + var zoomstart = el.data('zoomstart')==undefined ? 0 : el.data('zoomstart'), + zoomend = el.data('zoomend')==undefined ? 0 : el.data('zoomend'), + speed = el.data('speed')==undefined ? 2 : el.data('speed'), + easing = el.data('easing')==undefined ? punchgs.Power2.easeInOut : el.data('easing'); + + el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",scale:zoomstart},{scale:zoomend,ease:easing})); + el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",scale:zoomend},{scale:zoomstart,onComplete:function() { + el.data('timeline').restart(); + }})); + } + + }) + + nextcaption.find('.rs-wave').each(function() { + var el = jQuery(this); + if (el.data('timeline')==undefined) { + el.data('timeline',new punchgs.TimelineLite); + + var angle= el.data('angle')==undefined ? 10 : el.data('angle'), + radius = el.data('radius')==undefined ? 10 : el.data('radius'), + speed = el.data('speed')==undefined ? -20 : el.data('speed'), + origin = el.data('origin')==undefined ? -20 : el.data('origin'); + + angle = angle*factor; + radius = radius * factor; + + var angobj = {a:0, ang : angle, element:el, unit:radius}; + + + el.data('timeline').append(new punchgs.TweenLite.fromTo(angobj,speed, + { a:360 }, + { a:0, + force3D:"auto", + ease:punchgs.Linear.easeNone, + onUpdate:function() { + + var rad = angobj.a * (Math.PI / 180); + punchgs.TweenLite.to(angobj.element,0.1,{force3D:"auto",x:Math.cos(rad) * angobj.unit, y:angobj.unit * (1 - Math.sin(rad))}); + + }, + onComplete:function() { + el.data('timeline').restart(); + } + } + )); + } + + }) + } + + var killCaptionLoops = function(nextcaption) { + // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS + nextcaption.find('.rs-pendulum, .rs-slideloop, .rs-pulse, .rs-wave').each(function() { + var el = jQuery(this); + if (el.data('timeline')!=undefined) { + el.data('timeline').pause(); + el.data('timeline',null); + } + }); + } + + ////////////////////////// + // REMOVE THE CAPTIONS // + ///////////////////////// + var removeTheCaptions = function(actli,opt) { + + var removetime = 0; + + var allcaptions = actli.find('.tp-caption'), + allstaticcaptions = opt.container.find('.tp-static-layers').find('.tp-caption'); + + + jQuery.each(allstaticcaptions, function(index,staticcapt) { + allcaptions.push(staticcapt); + }); + + allcaptions.each(function(i) { + + + + var staticdirection = -1; // 1 -> In, 2-> Out 0-> Ignore -1-> Not Static + + var nextcaption=jQuery(this); + if (nextcaption.hasClass("tp-static-layer")) { + + if (nextcaption.data('startslide') == -1 || nextcaption.data('startslide') == "-1") + nextcaption.data('startslide',0); + + if (nextcaption.data('endslide') == -1 || nextcaption.data('endslide') == "-1") + nextcaption.data('endslide',opt.slideamount); + + + + // IF STATIC ITEM CURRENTLY NOT VISIBLE + if (nextcaption.hasClass("tp-is-shown")) { + + if ((nextcaption.data('startslide') > opt.next) || + (nextcaption.data('endslide') < opt.next)) { + + staticdirection = 2; + nextcaption.removeClass("tp-is-shown"); + } else { + staticdirection = 0; + } + } else { + staticdirection = 2; + } + + + + } + + + + if (staticdirection != 0 ) { + + killCaptionLoops(nextcaption); + + if (nextcaption.find('iframe').length>0) { + // VIMEO VIDEO PAUSE + //if (nextcaption.data('vimeoid')!=undefined && String(nextcaption.data('vimeoid')).length>0) + punchgs.TweenLite.to(nextcaption.find('iframe'),0.2,{autoAlpha:0}); + if (is_mobile()) nextcaption.find('iframe').remove(); + try { + var ifr = nextcaption.find('iframe'); + var id = ifr.attr('id'); + var froogaloop = $f(id); + froogaloop.api("pause"); + clearTimeout(nextcaption.data('timerplay')); + } catch(e) {} + + try { + var player=nextcaption.data('player'); + player.stopVideo(); + clearTimeout(nextcaption.data('timerplay')); + } catch(e) {} + } + + // IF HTML5 VIDEO IS EMBEDED + if (nextcaption.find('video').length>0) { + try{ + nextcaption.find('video').each(function(i) { + var html5vid = jQuery(this).parent(); + var videoID =html5vid.attr('id'); + clearTimeout(html5vid.data('timerplay')); + var video = this; + video.pause(); + }) + }catch(e) {} + } // END OF VIDEO JS FUNCTIONS + try { + + //var tl = punchgs.TimelineLite.exportRoot(); + var tl = nextcaption.data('timeline'); + var endstarts = tl.getLabelTime("frame99"); + var curtime = tl.time(); + if (endstarts>curtime) { + + // WE NEED TO STOP ALL OTHER NIMATIONS + var tweens = tl.getTweensOf(nextcaption); + jQuery.each(tweens,function(index,tw) { + + if (index!=0) + tw.pause(); + }); + if (nextcaption.css('opacity')!=0) { + var spp = nextcaption.data('endspeed') == undefined ? nextcaption.data('speed') : nextcaption.data('endspeed'); + if (spp>removetime) removetime =spp; + tl.play("frame99"); + } else + tl.progress(1,false); + } + + } catch(e) {} + + } + + }); + + return removetime; + } + + ////////////////////////////// + // MOVE THE CAPTIONS // + //////////////////////////// + var addMoveCaption = function(nextcaption,opt,params,frame,downscale) { + var tl = nextcaption.data('timeline'); + + var newtl = new punchgs.TimelineLite(); + + var animobject = nextcaption; + + if (params.typ == "chars") animobject = nextcaption.data('mySplitText').chars; + else + if (params.typ == "words") animobject = nextcaption.data('mySplitText').words; + else + if (params.typ == "lines") animobject = nextcaption.data('mySplitText').lines; + params.animation.ease = params.ease; + + if (params.animation.rotationZ !=undefined) params.animation.rotation = params.animation.rotationZ; + params.animation.data = new Object(); + params.animation.data.oldx = params.animation.x; + params.animation.data.oldy = params.animation.y; + + params.animation.x = params.animation.x * downscale; + params.animation.y = params.animation.y * downscale; + + + tl.add(newtl.staggerTo(animobject,params.speed,params.animation,params.elementdelay),params.start); + tl.addLabel(frame,params.start); + + nextcaption.data('timeline',tl); + + } + ////////////////////////////// + // MOVE OUT THE CAPTIONS // + //////////////////////////// + var endMoveCaption = function(nextcaption,opt,mdelay,backwards,frame,downscale) { + + var tl = nextcaption.data('timeline'), + newtl = new punchgs.TimelineLite(); + + var frm = newAnimObject(), + mspeed= (nextcaption.data('endspeed') == undefined) ? nextcaption.data('speed') : nextcaption.data('endspeed'), + ncc = nextcaption.attr('class'); + + frm.ease = (nextcaption.data('endeasing') == undefined) ? punchgs.Power1.easeInOut : nextcaption.data('endeasing'); + + mspeed = mspeed/1000; + + + + if (ncc.match('ltr') || + ncc.match('ltl') || + ncc.match('str') || + ncc.match('stl') || + ncc.match('ltt') || + ncc.match('ltb') || + ncc.match('stt') || + ncc.match('stb') || + ncc.match('skewtoright') || + ncc.match('skewtorightshort') || + ncc.match('skewtoleft') || + ncc.match('skewtoleftshort') || + ncc.match('fadeout') || + ncc.match("randomrotateout")) + { + + if (ncc.match('skewtoright') || ncc.match('skewtorightshort')) frm.skewX = 35 + else + if (ncc.match('skewtoleft') || ncc.match('skewtoleftshort')) frm.skewX = -35 + + + if (ncc.match('ltr') || ncc.match('skewtoright')) + frm.x=opt.width+60; + else if (ncc.match('ltl') || ncc.match('skewtoleft')) + frm.x=0-(opt.width+60); + else if (ncc.match('ltt')) + frm.y=0-(opt.height+60); + else if (ncc.match('ltb')) + frm.y=opt.height+60; + else if (ncc.match('str') || ncc.match('skewtorightshort')) { + frm.x=50;frm.opacity=0; + } else if (ncc.match('stl') || ncc.match('skewtoleftshort')) { + frm.x=-50;frm.opacity=0; + } else if (ncc.match('stt')) { + frm.y=-50;frm.opacity=0; + } else if (ncc.match('stb')) { + frm.y=50;frm.opacity=0; + } else if (ncc.match("randomrotateout")) { + frm.x = Math.random()*opt.width; + frm.y = Math.random()*opt.height; + frm.scale = Math.random()*2+0.3; + frm.rotation = Math.random()*360-180; + frm.opacity = 0; + } else if (ncc.match('fadeout')) { + frm.opacity = 0; + } + + if (ncc.match('skewtorightshort')) frm.x = 270; + else + if (ncc.match('skewtoleftshort')) frm.x = -270 + frm.data = new Object(); + frm.data.oldx = frm.x; + frm.data.oldy = frm.y; + frm.x = frm.x * downscale; + frm.y = frm.y * downscale; + + frm.overwrite="auto"; + var animobject = nextcaption; + var animobject = nextcaption; + if (nextcaption.data('splitout') == "chars") animobject = nextcaption.data('mySplitText').chars; + else + if (nextcaption.data('splitout') == "words") animobject = nextcaption.data('mySplitText').words; + else + if (nextcaption.data('splitout') == "lines") animobject = nextcaption.data('mySplitText').lines; + var elemdelay = (nextcaption.data('endelementdelay') == undefined) ? 0 : nextcaption.data('endelementdelay'); + //tl.add(punchgs.TweenLite.to(nextcaption,mspeed,frm),mdelay); + tl.add(newtl.staggerTo(animobject,mspeed,frm,elemdelay),mdelay); + + } + + else + + if (nextcaption.hasClass("customout")) { + + frm = getAnimDatas(frm,nextcaption.data('customout')); + var animobject = nextcaption; + if (nextcaption.data('splitout') == "chars") animobject = nextcaption.data('mySplitText').chars; + else + if (nextcaption.data('splitout') == "words") animobject = nextcaption.data('mySplitText').words; + else + if (nextcaption.data('splitout') == "lines") animobject = nextcaption.data('mySplitText').lines; + + var elemdelay = (nextcaption.data('endelementdelay') == undefined) ? 0 : nextcaption.data('endelementdelay'); + frm.onStart = function() { + + punchgs.TweenLite.set(nextcaption,{ + transformPerspective:frm.transformPerspective, + transformOrigin:frm.transformOrigin, + overwrite:"auto" + }); + } + + frm.data = new Object(); + frm.data.oldx = frm.x; + frm.data.oldy = frm.y; + + frm.x = frm.x * downscale; + frm.y = frm.y * downscale; + + tl.add(newtl.staggerTo(animobject,mspeed,frm,elemdelay),mdelay); + } + + else { + backwards.delay = 0; + tl.add(punchgs.TweenLite.to(nextcaption,mspeed,backwards),mdelay); + } + + + tl.addLabel(frame,mdelay); + + nextcaption.data('timeline',tl); + } + + /////////////////////////// + // REMOVE THE LISTENERS // + /////////////////////////// + var removeAllListeners = function(container,opt) { + container.children().each(function() { + try{ jQuery(this).die('click'); } catch(e) {} + try{ jQuery(this).die('mouseenter');} catch(e) {} + try{ jQuery(this).die('mouseleave');} catch(e) {} + try{ jQuery(this).unbind('hover');} catch(e) {} + }) + try{ container.die('click','mouseenter','mouseleave');} catch(e) {} + clearInterval(opt.cdint); + container=null; + } + + /////////////////////////// + // - countDown - // + ///////////////////////// + var countDown = function(container,opt) { + opt.cd=0; + opt.loop=0; + if (opt.stopAfterLoops!=undefined && opt.stopAfterLoops>-1) + opt.looptogo=opt.stopAfterLoops; + else + opt.looptogo=9999999; + + if (opt.stopAtSlide!=undefined && opt.stopAtSlide>-1) + opt.lastslidetoshow=opt.stopAtSlide; + else + opt.lastslidetoshow=999; + + opt.stopLoop="off"; + + if (opt.looptogo==0) opt.stopLoop="on"; + + + if (opt.slideamount >1 && !(opt.stopAfterLoops==0 && opt.stopAtSlide==1) ) { + var bt=container.find('.tp-bannertimer'); + + + // LISTENERS //container.trigger('stoptimer'); + container.on('stoptimer',function() { + var bt = jQuery(this).find('.tp-bannertimer'); + bt.data('tween').pause(); + if (opt.hideTimerBar=="on") bt.css({visibility:"hidden"}); + }); + container.on('starttimer',function() { + + if (opt.conthover!=1 && opt.videoplaying!=true && opt.width>opt.hideSliderAtLimit && opt.bannertimeronpause != true && opt.overnav !=true) + if ((opt.stopLoop=="on" && opt.next==opt.lastslidetoshow-1) || opt.noloopanymore == 1) + opt.noloopanymore = 1; + else { + + bt.css({visibility:"visible"}); + bt.data('tween').resume(); + } + + if (opt.hideTimerBar=="on") bt.css({visibility:"hidden"}); + }); + container.on('restarttimer',function() { + var bt = jQuery(this).find('.tp-bannertimer'); + if ((opt.stopLoop=="on" && opt.next==opt.lastslidetoshow-1) || opt.noloopanymore == 1) + opt.noloopanymore = 1; + else { + + bt.css({visibility:"visible"}); + bt.data('tween').kill(); + bt.data('tween',punchgs.TweenLite.fromTo(bt,opt.delay/1000,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:countDownNext,delay:1})); + + } + if (opt.hideTimerBar=="on") bt.css({visibility:"hidden"}); + }); + + container.on('nulltimer',function() { + bt.data('tween').pause(0); + if (opt.hideTimerBar=="on") bt.css({visibility:"hidden"}); + }); + + + + var countDownNext = function() { + if (jQuery('body').find(container).length==0) { + removeAllListeners(container,opt); + clearInterval(opt.cdint); + } + + container.trigger("revolution.slide.slideatend"); + + //STATE OF API CHANGED -> MOVE TO AIP BETTER + if (container.data('conthover-changed') == 1) { + opt.conthover= container.data('conthover'); + container.data('conthover-changed',0); + } + + // SWAP TO NEXT BANNER + opt.act=opt.next; + opt.next=opt.next+1; + + if (opt.next>container.find('>ul >li').length-1) { + opt.next=0; + opt.looptogo=opt.looptogo-1; + + if (opt.looptogo<=0) { + opt.stopLoop="on"; + + } + } + + // STOP TIMER IF NO LOOP NO MORE NEEDED. + + if (opt.stopLoop=="on" && opt.next==opt.lastslidetoshow-1) { + container.find('.tp-bannertimer').css({'visibility':'hidden'}); + container.trigger('revolution.slide.onstop'); + opt.noloopanymore = 1; + } else { + bt.data('tween').restart(); + } + + // SWAP THE SLIDES + swapSlide(container,opt); + + } + + bt.data('tween',punchgs.TweenLite.fromTo(bt,opt.delay/1000,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:countDownNext,delay:1})); + bt.data('opt',opt); + + + container.hover( + function() { + + if (opt.onHoverStop=="on" && (!is_mobile())) { + container.trigger('stoptimer'); + + container.trigger('revolution.slide.onpause'); + var nextsh = container.find('>ul >li:eq('+opt.next+') .slotholder'); + nextsh.find('.defaultimg').each(function() { + var dimg = jQuery(this); + if (dimg.data('kenburn')!=undefined) { + dimg.data('kenburn').pause(); + } + }); + } + }, + function() { + if (container.data('conthover')!=1) { + container.trigger('revolution.slide.onresume'); + container.trigger('starttimer'); + + var nextsh = container.find('>ul >li:eq('+opt.next+') .slotholder'); + nextsh.find('.defaultimg').each(function() { + var dimg = jQuery(this); + if (dimg.data('kenburn')!=undefined) { + dimg.data('kenburn').play(); + } + }); + } + }); + } + } + + + ////////////////// + // IS MOBILE ?? // + ////////////////// + var is_mobile = function() { + var agents = ['android', 'webos', 'iphone', 'ipad', 'blackberry','Android', 'webos', ,'iPod', 'iPhone', 'iPad', 'Blackberry', 'BlackBerry']; + var ismobile=false; + for(var i in agents) { + + if (navigator.userAgent.split(agents[i]).length>1) { + ismobile = true; + + } + } + return ismobile; + } + + + +/************************************************************************** + * Revolution Slider - PAN ZOOM MODULE + * @version: 1.0 (03.06.2013) + * @author ThemePunch +**************************************************************************/ + + /*********************************************** + - KEN BURN BACKGROUND FIT CALCULATOR - + ***********************************************/ + var calculateKenBurnScales = function(proc,sloth,opt) { + var ow = sloth.data('owidth'); + var oh = sloth.data('oheight'); + + if (ow / oh > opt.width / opt.height) { + var factor = (opt.container.width() /ow); + var nheight = oh * factor; + var hfactor = (nheight / opt.container.height())*proc; + proc = proc * (100/hfactor); + hfactor = 100; + proc = proc; + return (proc+"% "+hfactor+"%"+" 1"); + } else { + var factor = (opt.container.width() /ow); + var nheight = oh * factor; + var hfactor = (nheight / opt.container.height())*proc; + return (proc+"% "+hfactor+"%"); + } + } + + + + /****************************** + - startKenBurn - + ********************************/ + var startKenBurn = function(container,opt,recalc,prepareonly) { + + try{ + var actli = container.find('>ul:first-child >li:eq('+opt.act+')'); + } catch(e) { + var actli=container.find('>ul:first-child >li:eq(1)'); + } + + opt.lastslide=opt.act; + + + var nextli = container.find('>ul:first-child >li:eq('+opt.next+')'), + nextsh = nextli.find('.slotholder'), + bgps = nextsh.data('bgposition'), + bgpe = nextsh.data('bgpositionend'), + zos = nextsh.data('zoomstart')/100, + zoe = nextsh.data('zoomend')/100, + ros = nextsh.data('rotationstart'), + roe = nextsh.data('rotationend'), + bgfs = nextsh.data('bgfit'), + bgfe = nextsh.data('bgfitend'), + easeme = nextsh.data('easeme'), + dur = nextsh.data('duration')/1000, + bgfb = 100; + + + if (bgfs==undefined) bgfs=100; + if (bgfe==undefined) bgfe=100; + var obgfs = bgfs, + obgfe = bgfe; + + bgfs = calculateKenBurnScales(bgfs,nextsh,opt); + bgfe = calculateKenBurnScales(bgfe,nextsh,opt); + bgfb = calculateKenBurnScales(100,nextsh,opt); + + + if (zos==undefined) zos=1; + if (zoe==undefined) zoe=1; + if (ros==undefined) ros=0; + if (roe==undefined) roe=0; + + if (zos<1) zos=1; + if (zoe<1) zoe=1; + + + var imgobj = new Object(); + imgobj.w = parseInt(bgfb.split(" ")[0],0), + imgobj.h = parseInt(bgfb.split(" ")[1],0); + + var turned = false; + if (bgfb.split(" ")[2] == "1") { + turned = true; + } + + nextsh.find('.defaultimg').each(function() { + var defimg = jQuery(this); + if (nextsh.find('.kenburnimg').length==0) + nextsh.append('
      '); + else { + nextsh.find('.kenburnimg img').css({width:imgobj.w+'%',height:imgobj.h+'%'}); + } + + + + var kbimg = nextsh.find('.kenburnimg img'); + + + var imgs = calculateKenBurnImgPos(opt,bgps,bgfs,kbimg,turned), + imge = calculateKenBurnImgPos(opt,bgpe,bgfe,kbimg,turned); + + if (turned) { + imgs.w = obgfs/100; + imge.w = obgfe/100; + } + + + + if (prepareonly) { + + punchgs.TweenLite.set(kbimg,{autoAlpha:0, + transformPerspective:1200, + transformOrigin:"0% 0%", + top:0,left:0, + scale:imgs.w, + x:imgs.x, + y:imgs.y}); + var sx = imgs.w, + ww = (sx * kbimg.width()) - opt.width, + hh = (sx * kbimg.height()) - opt.height, + hor = Math.abs((imgs.x / ww)*100), + ver = Math.abs((imgs.y / hh)*100); + if (hh==0) ver =0; + if (ww == 0) hor = 0; + defimg.data('bgposition',hor+"% "+ver+"%"); + if (!isIE(8)) defimg.data('currotate',getRotationDegrees(kbimg)); + if (!isIE(8)) defimg.data('curscale',(imgobj.w*sx)+"% "+(imgobj.h*sx+"%")); + + nextsh.find('.kenburnimg').remove(); + } + else + defimg.data('kenburn',punchgs.TweenLite.fromTo(kbimg,dur,{autoAlpha:1, force3D:punchgs.force3d, transformOrigin:"0% 0%", top:0,left:0, scale:imgs.w, x:imgs.x, y:imgs.y},{autoAlpha:1,rotationZ:roe,ease:easeme, x:imge.x, y:imge.y,scale:imge.w,onUpdate:function() { + var sx = kbimg[0]._gsTransform.scaleX; + var ww = (sx * kbimg.width()) - opt.width, + hh = (sx * kbimg.height()) - opt.height, + hor = Math.abs((kbimg[0]._gsTransform.x / ww)*100), + ver = Math.abs((kbimg[0]._gsTransform.y / hh)*100); + if (hh==0) ver =0; + if (ww == 0) hor = 0; + + defimg.data('bgposition',hor+"% "+ver+"%"); + + if (!isIE(8)) defimg.data('currotate',getRotationDegrees(kbimg)); + if (!isIE(8)) defimg.data('curscale',(imgobj.w*sx)+"% "+(imgobj.h*sx+"%")); + //punchgs.TweenLite.set(defimg,{rotation:defimg.data('currotate'), backgroundPosition:defimg.data('bgposition'), backgroundSize:defimg.data('curscale')}); + }})); + }) + } + + /************************************************* + - CALCULATE KENBURNS IMAGE POSITIONS - + **************************************************/ + + var calculateKenBurnImgPos = function(opt,bgp,bgf,img,turned) { + var imgobj = new Object; + + if (!turned) + imgobj.w = parseInt(bgf.split(" ")[0],0) / 100; + else + imgobj.w = parseInt(bgf.split(" ")[1],0) / 100; + + switch(bgp) { + case "left top": + case "top left": + imgobj.x = 0; + imgobj.y = 0; + break; + case "center top": + case "top center": + imgobj.x = (((0-img.width()) * imgobj.w) + parseInt(opt.width,0))/2; + imgobj.y = 0; + break; + case "top right": + case "right top": + imgobj.x = ((0-img.width()) * imgobj.w) + parseInt(opt.width,0); + imgobj.y = 0; + + break; + case "center left": + case "left center": + imgobj.x = 0; + imgobj.y = (((0-img.height()) * imgobj.w) + parseInt(opt.height,0)) / 2; + break; + case "center center": + imgobj.x = (((0-img.width()) * imgobj.w) + parseInt(opt.width,0))/2; + imgobj.y = (((0-img.height()) * imgobj.w) + parseInt(opt.height,0)) / 2; + + break; + case "center right": + case "right center": + imgobj.x = ((0-img.width()) * imgobj.w) + parseInt(opt.width,0); + imgobj.y = (((0-img.height()) * imgobj.w) + parseInt(opt.height,0)) / 2; + + break; + case "bottom left": + case "left bottom": + imgobj.x =0; + imgobj.y = ((0-img.height()) * imgobj.w) + parseInt(opt.height,0); + + break; + case "bottom center": + case "center bottom": + imgobj.x = (((0-img.width()) * imgobj.w) + parseInt(opt.width,0))/2; + imgobj.y = ((0-img.height()) * imgobj.w) + parseInt(opt.height,0); + break; + case "bottom right": + case "right bottom": + imgobj.x = ((0-img.width()) * imgobj.w) + parseInt(opt.width,0); + imgobj.y = ((0-img.height()) * imgobj.w) + parseInt(opt.height,0); + break; + } + + + + return imgobj; + } + + /****************************** + - GET ROTATION DEGREES - + ********************************/ + var getRotationDegrees = function(obj) { + var matrix = obj.css("-webkit-transform") || + obj.css("-moz-transform") || + obj.css("-ms-transform") || + obj.css("-o-transform") || + obj.css("transform"); + if(matrix !== 'none') { + var values = matrix.split('(')[1].split(')')[0].split(','); + var a = values[0]; + var b = values[1]; + var angle = Math.round(Math.atan2(b, a) * (180/Math.PI)); + } else { var angle = 0; } + return (angle < 0) ? angle +=360 : angle; + } + + + /****************************** + - STOP KEN BURN - + ********************************/ + var stopKenBurn = function(container,opt) { + + try{ + var actli = container.find('>ul:first-child >li:eq('+opt.act+')'); + } catch(e) { + var actli=container.find('>ul:first-child >li:eq(1)'); + } + + opt.lastslide=opt.act; + + var nextli = container.find('>ul:first-child >li:eq('+opt.next+')'); + + + var actsh = actli.find('.slotholder'); + var nextsh = nextli.find('.slotholder'); + + container.find('.defaultimg').each(function() { + var defimg = jQuery(this); + punchgs.TweenLite.killTweensOf(defimg,false); + punchgs.TweenLite.set(defimg,{scale:1,rotationZ:0}); + punchgs.TweenLite.killTweensOf(defimg.data('kenburn img'),false); + if (defimg.data('kenburn') != undefined) { + defimg.data('kenburn').pause(); + } + if (defimg.data('currotate') != undefined && defimg.data('bgposition') !=undefined && defimg.data('curscale') != undefined) + punchgs.TweenLite.set(defimg,{rotation:defimg.data('currotate'), backgroundPosition:defimg.data('bgposition'), backgroundSize:defimg.data('curscale')}); + if (defimg!= undefined && defimg.data('kenburn img') != undefined && defimg.data('kenburn img').length>0) punchgs.TweenLite.set(defimg.data('kenburn img'),{autoAlpha:0}); + + }); + } + +//// END OF KENBURNS EXTNESION + + + + +/************************************************************************** + * Revolution Slider - PARALLAX MODULE + * @version: 1.1 (23.06.2013) + * @author ThemePunch +**************************************************************************/ + + /****************************** + - PARALLAX EFFECT - + ********************************/ + var checkForParallax = function(container,opt) { + if (is_mobile() && opt.parallaxDisableOnMobile=="on") return false; + + container.find('>ul:first-child >li').each(function() { + var li = jQuery(this); + for (var i = 1; i<=10;i++) + li.find('.rs-parallaxlevel-'+i).each(function() { + var pw = jQuery(this); + pw.wrap('
      '); + }); + }) + + + + if (opt.parallax=="mouse" || opt.parallax=="scroll+mouse" || opt.parallax=="mouse+scroll") { + + container.mouseenter(function(event) { + var currslide = container.find('.current-sr-slide-visible'); + var t = container.offset().top, + l = container.offset().left, + ex = (event.pageX-l), + ey = (event.pageY-t); + currslide.data("enterx",ex); + currslide.data("entery",ey); + + }) + + container.on('mousemove.hoverdir, mouseleave.hoverdir',function(event) { + var currslide = container.find('.current-sr-slide-visible'); + switch (event.type) { + + case "mousemove": + + var t = container.offset().top, + l = container.offset().left, + mh = currslide.data("enterx"), + mv = currslide.data("entery"), + diffh = (mh - (event.pageX - l)), + diffv = (mv - (event.pageY - t)); + + currslide.find(".tp-parallax-container").each(function() { + var pc = jQuery(this), + pl = parseInt(pc.data('parallaxlevel'),0)/100, + offsh = diffh * pl, + offsv = diffv * pl; + if (opt.parallax=="scroll+mouse" || opt.parallax=="mouse+scroll") + punchgs.TweenLite.to(pc,0.4,{force3D:"auto",x:offsh,ease:punchgs.Power3.easeOut,overwrite:"all"}); + else + punchgs.TweenLite.to(pc,0.4,{force3D:"auto",x:offsh,y:offsv,ease:punchgs.Power3.easeOut,overwrite:"all"}); + }) + + break; + case "mouseleave": + currslide.find(".tp-parallax-container").each(function() { + var pc = jQuery(this); + if (opt.parallax=="scroll+mouse" || opt.parallax=="mouse+scroll") + punchgs.TweenLite.to(pc,1.5,{force3D:"auto",x:0,ease:punchgs.Power3.easeOut}); + else + punchgs.TweenLite.to(pc,1.5,{force3D:"auto",x:0,y:0,ease:punchgs.Power3.easeOut}); + }) + break; + } + }); + + if (is_mobile()) + window.ondeviceorientation = function(event) { + var y = Math.round(event.beta || 0), + x = Math.round(event.gamma || 0); + + var currslide = container.find('.current-sr-slide-visible'); + + + if (jQuery(window).width() > jQuery(window).height()){ + var xx = x; + x = y; + y = xx; + + } + + var curh = 360/container.width() * x, + curv = 180/container.height() * y; + + + + + currslide.find(".tp-parallax-container").each(function() { + var pc = jQuery(this), + pl = parseInt(pc.data('parallaxlevel'),0)/100, + offsh = curh * pl, + offsv = curv * pl; + punchgs.TweenLite.to(pc,0.2,{force3D:"auto",x:offsh,y:offsv,ease:punchgs.Power3.easeOut}); + }) + + // y: -90 -> +90, x:-180 -> +180 + + //jQuery('.logo-container').html("h:"+curh+" v:"+curv); + } + } + if (opt.parallax=="scroll" || opt.parallax=="scroll+mouse" || opt.parallax=="mouse+scroll") { + + jQuery(window).on('scroll',function(event) { + scrollParallax(container,opt); + }); + } + } + + /*************************************** + - SET POST OF SCROLL PARALLAX - + ***************************************/ + var scrollParallax = function(container,opt) { + if (is_mobile() && opt.parallaxDisableOnMobile=="on") return false; + var t = container.offset().top, + st = jQuery(window).scrollTop(), + dist = t+container.height()/2, + mv = t+container.height()/2 - st, + wh = jQuery(window).height()/2, + diffv= wh - mv; + + if (dist
      '); + } + var bullets = cap.find('.tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer'); + var bup = bullets.parent(); + + bup.width(opt.thumbWidth*opt.thumbAmount); + bup.height(opt.thumbHeight); + bup.parent().width(opt.thumbWidth*opt.thumbAmount); + bup.parent().height(opt.thumbHeight); + + container.find('>ul:first >li').each(function(i) { + var li= container.find(">ul:first >li:eq("+i+")"); + var bgcolor = li.find(".defaultimg").css("backgroundColor"); + if (li.data('thumb') !=undefined) + var src= li.data('thumb') + else + var src=li.find("img:first").attr('src'); + + + bullets.append('
      '); + var bullet= bullets.find('.bullet:first'); + }); + //bullets.append('
      '); + var minwidth=10; + + + // ADD THE BULLET CLICK FUNCTION HERE + bullets.find('.bullet').each(function(i) { + var bul = jQuery(this); + + if (i==opt.slideamount-1) bul.addClass('last'); + if (i==0) bul.addClass('first'); + bul.width(opt.thumbWidth); + bul.height(opt.thumbHeight); + + if (minwidthul:first >li').length; + + var thumbconwidth=bullets.parent().width(); + opt.thumbWidth = minwidth; + + + + //////////////////////// + // SLIDE TO POSITION // + //////////////////////// + if (thumbconwidthul:first >li').length, + diff=(max- thumbconwidth)+15, + steps = diff / thumbconwidth; + + $this.addClass("over"); + x=x-30; + + //ANIMATE TO POSITION + var pos=(0-((x)*steps)); + if (pos>0) pos =0; + if (pos<0-max+thumbconwidth) pos=0-max+thumbconwidth; + moveThumbSliderToPosition($this,pos,200); + }); + + bullets.parent().mousemove(function() { + + var $this=jQuery(this), + offset = $this.offset(), + x = jQuery('body').data('mousex')-offset.left, + thumbconwidth=$this.width(), + minwidth=$this.find('.bullet:first').outerWidth(true), + max=minwidth*container.find('>ul:first >li').length-1, + diff=(max- thumbconwidth)+15, + steps = diff / thumbconwidth; + + x=x-3; + if (x<6) x=0; + if (x+3>thumbconwidth-6) x=thumbconwidth; + + //ANIMATE TO POSITION + var pos=(0-((x)*steps)); + if (pos>0) pos =0; + if (pos<0-max+thumbconwidth) pos=0-max+thumbconwidth; + moveThumbSliderToPosition($this,pos,0); + + }); + + bullets.parent().mouseleave(function() { + var $this=jQuery(this); + $this.removeClass("over"); + moveSelectedThumb(container); + }); + } + + + } + + + /////////////////////////////// + // SelectedThumbInPosition // + ////////////////////////////// + var moveSelectedThumb = function(container) { + + var bullets=container.parent().find('.tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer'), + $this=bullets.parent(), + offset = $this.offset(), + minwidth=$this.find('.bullet:first').outerWidth(true), + x = $this.find('.bullet.selected').index() * minwidth, + thumbconwidth=$this.width(), + minwidth=$this.find('.bullet:first').outerWidth(true), + max=minwidth*container.find('>ul:first >li').length, + diff=(max- thumbconwidth), + steps = diff / thumbconwidth, + pos=0-x; + + if (pos>0) pos =0; + if (pos<0-max+thumbconwidth) pos=0-max+thumbconwidth; + if (!$this.hasClass("over")) { + moveThumbSliderToPosition($this,pos,200); + } + } + + + //////////////////////////////////// + // MOVE THUMB SLIDER TO POSITION // + /////////////////////////////////// + var moveThumbSliderToPosition = function($this,pos,speed) { + punchgs.TweenLite.to($this.find('.tp-thumbcontainer'),0.2,{force3D:"auto",left:pos,ease:punchgs.Power3.easeOut,overwrite:"auto"}); + } +})(jQuery); + + + +/// END OF THUMBNAIL EXTNESIONS + + + + + + +// SOME ERROR MESSAGES IN CASE THE PLUGIN CAN NOT BE LOADED +function revslider_showDoubleJqueryError(sliderID) { + var errorMessage = "Revolution Slider Error: You have some jquery.js library include that comes after the revolution files js include."; + errorMessage += "
      This includes make eliminates the revolution slider libraries, and make it not work."; + errorMessage += "

      To fix it you can:
          1. In the Slider Settings -> Troubleshooting set option: Put JS Includes To Body option to true."; + errorMessage += "
          2. Find the double jquery.js include and remove it."; + errorMessage = "" + errorMessage + "" + jQuery(sliderID).show().html(errorMessage); +} + + diff --git a/src/main/resources/static/lib/user/home/rs-plugin/js/jquery.themepunch.revolution.min.js b/src/main/resources/static/lib/user/home/rs-plugin/js/jquery.themepunch.revolution.min.js new file mode 100644 index 0000000..7fb1b8b --- /dev/null +++ b/src/main/resources/static/lib/user/home/rs-plugin/js/jquery.themepunch.revolution.min.js @@ -0,0 +1,9 @@ +/************************************************************************** + * jquery.themepunch.revolution.js - jQuery Plugin for Revolution Slider + * @version: 4.6.4 (26.11.2014) + * @requires jQuery v1.7 or later (tested on 1.9) + * @author ThemePunch +**************************************************************************/ + + +function revslider_showDoubleJqueryError(e){var t="Revolution Slider Error: You have some jquery.js library include that comes after the revolution files js include.";t+="
      This includes make eliminates the revolution slider libraries, and make it not work.";t+="

      To fix it you can:
          1. In the Slider Settings -> Troubleshooting set option: Put JS Includes To Body option to true.";t+="
          2. Find the double jquery.js include and remove it.";t=""+t+"";jQuery(e).show().html(t)}(function(e,t){function n(){var e=false;if(navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPod/i)||navigator.userAgent.match(/iPad/i)){if(navigator.userAgent.match(/OS 4_\d like Mac OS X/i)){e=true}}else{e=false}return e}function r(r,i){if(r==t)return false;if(r.data("aimg")!=t){if(r.data("aie8")=="enabled"&&a(8)||r.data("amobile")=="enabled"&&J())r.html('')}if(i.navigationStyle=="preview1"||i.navigationStyle=="preview3"||i.navigationStyle=="preview4"){i.soloArrowLeftHalign="left";i.soloArrowLeftValign="center";i.soloArrowLeftHOffset=0;i.soloArrowLeftVOffset=0;i.soloArrowRightHalign="right";i.soloArrowRightValign="center";i.soloArrowRightHOffset=0;i.soloArrowRightVOffset=0;i.navigationArrows="solo"}if(i.simplifyAll=="on"&&(a(8)||n())){r.find(".tp-caption").each(function(){var t=e(this);t.removeClass("customin").removeClass("customout").addClass("fadein").addClass("fadeout");t.data("splitin","");t.data("speed",400)});r.find(">ul>li").each(function(){var t=e(this);t.data("transition","fade");t.data("masterspeed",500);t.data("slotamount",1);var n=t.find(">img").first();n.data("kenburns","off")})}i.desktop=!navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i);if(i.fullWidth!="on"&&i.fullScreen!="on")i.autoHeight="off";if(i.fullScreen=="on")i.autoHeight="on";if(i.fullWidth!="on"&&i.fullScreen!="on")forceFulWidth="off";if(i.fullWidth=="on"&&i.autoHeight=="off")r.css({maxHeight:i.startheight+"px"});if(J()&&i.hideThumbsOnMobile=="on"&&i.navigationType=="thumb")i.navigationType="none";if(J()&&i.hideBulletsOnMobile=="on"&&i.navigationType=="bullet")i.navigationType="none";if(J()&&i.hideBulletsOnMobile=="on"&&i.navigationType=="both")i.navigationType="none";if(J()&&i.hideArrowsOnMobile=="on")i.navigationArrows="none";if(i.forceFullWidth=="on"&&r.closest(".forcefullwidth_wrapper_tp_banner").length==0){var f=r.parent().offset().left;var v=r.parent().css("marginBottom");var m=r.parent().css("marginTop");if(v==t)v=0;if(m==t)m=0;r.parent().wrap('
      ');r.closest(".forcefullwidth_wrapper_tp_banner").append('
      ');r.css({backgroundColor:r.parent().css("backgroundColor"),backgroundImage:r.parent().css("backgroundImage")});r.parent().css({left:0-f+"px",position:"absolute",width:e(window).width()});i.width=e(window).width()}try{if(i.hideThumbsUnderResolution>e(window).width()&&i.hideThumbsUnderResolution!=0){r.parent().find(".tp-bullets.tp-thumbs").css({display:"none"})}else{r.parent().find(".tp-bullets.tp-thumbs").css({display:"block"})}}catch(g){}if(!r.hasClass("revslider-initialised")){r.addClass("revslider-initialised");if(r.attr("id")==t)r.attr("id","revslider-"+Math.round(Math.random()*1e3+5));i.firefox13=false;i.ie=!e.support.opacity;i.ie9=document.documentMode==9;i.origcd=i.delay;var b=e.fn.jquery.split("."),w=parseFloat(b[0]),E=parseFloat(b[1]),S=parseFloat(b[2]||"0");if(w==1&&E<7){r.html('
      The Current Version of jQuery:'+b+"
      Please update your jQuery Version to min. 1.7 in Case you wish to use the Revolution Slider Plugin
      ")}if(w>1)i.ie=false;if(!e.support.transition)e.fn.transition=e.fn.animate;r.find(".caption").each(function(){e(this).addClass("tp-caption")});if(J()){r.find(".tp-caption").each(function(){var t=e(this);if(t.data("autoplayonlyfirsttime")==true||t.data("autoplayonlyfirsttime")=="true")t.data("autoplayonlyfirsttime","false");if(t.data("autoplay")==true||t.data("autoplay")=="true")t.data("autoplay",false)})}var x=0;var T=0;var C=0;var k="http";if(location.protocol==="https:"){k="https"}r.find(".tp-caption").each(function(n){try{if((e(this).data("ytid")!=t||e(this).find("iframe").attr("src").toLowerCase().indexOf("youtube")>0)&&x==0){x=1;var r=document.createElement("script");var i="https";r.src=i+"://www.youtube.com/iframe_api";var s=document.getElementsByTagName("script")[0];var o=true;e("head").find("*").each(function(){if(e(this).attr("src")==i+"://www.youtube.com/iframe_api")o=false});if(o){s.parentNode.insertBefore(r,s)}}}catch(u){}try{if((e(this).data("vimeoid")!=t||e(this).find("iframe").attr("src").toLowerCase().indexOf("vimeo")>0)&&T==0){T=1;var a=document.createElement("script");a.src=k+"://a.vimeocdn.com/js/froogaloop2.min.js";var s=document.getElementsByTagName("script")[0];var o=true;e("head").find("*").each(function(){if(e(this).attr("src")==k+"://a.vimeocdn.com/js/froogaloop2.min.js")o=false});if(o)s.parentNode.insertBefore(a,s)}}catch(u){}try{if(e(this).data("videomp4")!=t||e(this).data("videowebm")!=t){}}catch(u){}});r.find(".tp-caption video").each(function(t){e(this).removeClass("video-js").removeClass("vjs-default-skin");e(this).attr("preload","");e(this).css({display:"none"})});r.find(">ul:first-child >li").each(function(){var t=e(this);t.data("origindex",t.index())});if(i.shuffle=="on"){var L=new Object,A=r.find(">ul:first-child >li:first-child");L.fstransition=A.data("fstransition");L.fsmasterspeed=A.data("fsmasterspeed");L.fsslotamount=A.data("fsslotamount");for(var O=0;Oul:first-child >li").length;O++){var M=Math.round(Math.random()*r.find(">ul:first-child >li").length);r.find(">ul:first-child >li:eq("+M+")").prependTo(r.find(">ul:first-child"))}var _=r.find(">ul:first-child >li:first-child");_.data("fstransition",L.fstransition);_.data("fsmasterspeed",L.fsmasterspeed);_.data("fsslotamount",L.fsslotamount)}i.slots=4;i.act=-1;i.next=0;if(i.startWithSlide!=t)i.next=i.startWithSlide;var D=o("#")[0];if(D.length<9){if(D.split("slide").length>1){var P=parseInt(D.split("slide")[1],0);if(P<1)P=1;if(P>r.find(">ul:first >li").length)P=r.find(">ul:first >li").length;i.next=P-1}}i.firststart=1;if(i.navigationHOffset==t)i.navOffsetHorizontal=0;if(i.navigationVOffset==t)i.navOffsetVertical=0;r.append('
      '+'
      '+'
      '+'
      '+'
      '+'
      '+"
      ");if(r.find(".tp-bannertimer").length==0)r.append('');var H=r.find(".tp-bannertimer");if(H.length>0){H.css({width:"0%"})}r.addClass("tp-simpleresponsive");i.container=r;i.slideamount=r.find(">ul:first >li").length;if(r.height()==0)r.height(i.startheight);if(i.startwidth==t||i.startwidth==0)i.startwidth=r.width();if(i.startheight==t||i.startheight==0)i.startheight=r.height();i.width=r.width();i.height=r.height();i.bw=i.startwidth/r.width();i.bh=i.startheight/r.height();if(i.width!=i.startwidth){i.height=Math.round(i.startheight*(i.width/i.startwidth));r.height(i.height)}if(i.shadow!=0){r.parent().append('
      ');var f=0;if(i.forceFullWidth=="on")f=0-i.container.parent().offset().left;r.parent().find(".tp-bannershadow").css({width:i.width,left:f})}r.find("ul").css({display:"none"});var B=r;r.find("ul").css({display:"block"});y(r,i);if(i.parallax!="off")et(r,i);if(i.slideamount>1)l(r,i);if(i.slideamount>1&&i.navigationType=="thumb")nt(r,i);if(i.slideamount>1)c(r,i);if(i.keyboardNavigation=="on")h(r,i);p(r,i);if(i.hideThumbs>0)d(r,i);setTimeout(function(){N(r,i)},i.startDelay);i.startDelay=0;if(i.slideamount>1)$(r,i);setTimeout(function(){r.trigger("revolution.slide.onloaded")},500);e("body").data("rs-fullScreenMode",false);e(window).on("mozfullscreenchange webkitfullscreenchange fullscreenchange",function(){e("body").data("rs-fullScreenMode",!e("body").data("rs-fullScreenMode"));if(e("body").data("rs-fullScreenMode")){setTimeout(function(){e(window).trigger("resize")},200)}});var j="resize.revslider-"+r.attr("id");e(window).on(j,function(){if(r==t)return false;if(e("body").find(r)!=0)if(i.forceFullWidth=="on"){var n=i.container.closest(".forcefullwidth_wrapper_tp_banner").offset().left;i.container.parent().css({left:0-n+"px",width:e(window).width()})}if(r.outerWidth(true)!=i.width||r.is(":hidden")){u(r,i)}});try{if(i.hideThumbsUnderResoluition!=0&&i.navigationType=="thumb"){if(i.hideThumbsUnderResoluition>e(window).width())e(".tp-bullets").css({display:"none"});else e(".tp-bullets").css({display:"block"})}}catch(g){}r.find(".tp-scrollbelowslider").on("click",function(){var t=0;try{t=e("body").find(i.fullScreenOffsetContainer).height()}catch(n){}try{t=t-parseInt(e(this).data("scrolloffset"),0)}catch(n){}e("body,html").animate({scrollTop:r.offset().top+r.find(">ul >li").height()-t+"px"},{duration:400})});var F=r.parent();if(e(window).width()0&&e("body").find("#"+r.attr("id")).length>0)e("body,html").animate({scrollTop:r.offset().top+r.find(">ul >li").height()-n+"px"},{duration:400})})},revredraw:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0){var r=n.parent().find(".tp-bannertimer");var i=r.data("opt");u(n,i)}})},revkill:function(n){var r=this,i=e(this);if(i!=t&&i.length>0&&e("body").find("#"+i.attr("id")).length>0){i.data("conthover",1);i.data("conthover-changed",1);i.trigger("revolution.slide.onpause");var s=i.parent().find(".tp-bannertimer");var o=s.data("opt");o.bannertimeronpause=true;i.trigger("stoptimer");punchgs.TweenLite.killTweensOf(i.find("*"),false);punchgs.TweenLite.killTweensOf(i,false);i.unbind("hover, mouseover, mouseenter,mouseleave, resize");var u="resize.revslider-"+i.attr("id");e(window).off(u);i.find("*").each(function(){var n=e(this);n.unbind("on, hover, mouseenter,mouseleave,mouseover, resize,restarttimer, stoptimer");n.off("on, hover, mouseenter,mouseleave,mouseover, resize");n.data("mySplitText",null);n.data("ctl",null);if(n.data("tween")!=t)n.data("tween").kill();if(n.data("kenburn")!=t)n.data("kenburn").kill();n.remove();n.empty();n=null});punchgs.TweenLite.killTweensOf(i.find("*"),false);punchgs.TweenLite.killTweensOf(i,false);s.remove();try{i.closest(".forcefullwidth_wrapper_tp_banner").remove()}catch(a){}try{i.closest(".rev_slider_wrapper").remove()}catch(a){}try{i.remove()}catch(a){}i.empty();i.html();i=null;o=null;delete r.container;delete r.opt;return true}else{return false}},revpause:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0){n.data("conthover",1);n.data("conthover-changed",1);n.trigger("revolution.slide.onpause");var r=n.parent().find(".tp-bannertimer");var i=r.data("opt");i.bannertimeronpause=true;n.trigger("stoptimer")}})},revresume:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0){n.data("conthover",0);n.data("conthover-changed",1);n.trigger("revolution.slide.onresume");var r=n.parent().find(".tp-bannertimer");var i=r.data("opt");i.bannertimeronpause=false;n.trigger("starttimer")}})},revnext:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0)n.parent().find(".tp-rightarrow").click()})},revprev:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0)n.parent().find(".tp-leftarrow").click()})},revmaxslide:function(t){return e(this).find(">ul:first-child >li").length},revcurrentslide:function(n){var r=e(this);if(r!=t&&r.length>0&&e("body").find("#"+r.attr("id")).length>0){var i=r.parent().find(".tp-bannertimer");var s=i.data("opt");return s.act}},revlastslide:function(n){var r=e(this);if(r!=t&&r.length>0&&e("body").find("#"+r.attr("id")).length>0){var i=r.parent().find(".tp-bannertimer");var s=i.data("opt");return s.lastslide}},revshowslide:function(n){return this.each(function(){var r=e(this);if(r!=t&&r.length>0&&e("body").find("#"+r.attr("id")).length>0){r.data("showus",n);r.parent().find(".tp-rightarrow").click()}})}});var i=function(){var e,t,n={hidden:"visibilitychange",webkitHidden:"webkitvisibilitychange",mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange"};for(e in n){if(e in document){t=n[e];break}}return function(n){if(n)document.addEventListener(t,n);return!document[e]}}();var s=function(n,r){var i=document.documentMode===t,s=window.chrome;if(i&&!s){e(window).on("focusin",function(){if(n==t)return false;setTimeout(function(){if(r.nextSlideOnWindowFocus=="on")n.revnext();n.revredraw()},300)}).on("focusout",function(){})}else{if(window.addEventListener){window.addEventListener("focus",function(e){if(n==t)return false;setTimeout(function(){if(r.nextSlideOnWindowFocus=="on")n.revnext();n.revredraw()},300)},false);window.addEventListener("blur",function(e){},false)}else{window.attachEvent("focus",function(e){setTimeout(function(){if(n==t)return false;if(r.nextSlideOnWindowFocus=="on")n.revnext();n.revredraw()},300)});window.attachEvent("blur",function(e){})}}};var o=function(e){var t=[],n;var r=window.location.href.slice(window.location.href.indexOf(e)+1).split("_");for(var i=0;ie(window).width())e(".tp-bullets").css({display:"none"});else e(".tp-bullets").css({display:"block"})}}catch(i){}n.find(".defaultimg").each(function(t){g(e(this),r)});var s=n.parent();if(e(window).width()ul >li:eq("+r.act+") .slotholder");var f=n.find(">ul >li:eq("+r.next+") .slotholder");E(n,r,n);punchgs.TweenLite.set(f.find(".defaultimg"),{opacity:0});a.find(".defaultimg").css({opacity:1});f.find(".defaultimg").each(function(){var i=e(this);if(r.panZoomDisableOnMobile=="on"){}else{if(i.data("kenburn")!=t){i.data("kenburn").restart();Q(n,r,true)}}});var l=n.find(">ul >li:eq("+r.next+")");var c=n.parent().find(".tparrows");if(c.hasClass("preview2"))c.css({width:parseInt(c.css("minWidth"),0)});j(l,r,true);v(n,r)};var a=function(t,n){var r=e('
      ').appendTo(e("body"));r.html("");var i=r.find("a").length;r.remove();return i};var f=function(e,t){if(e.next==t.find(">ul >li").length-1){e.looptogo=e.looptogo-1;if(e.looptogo<=0)e.stopLoop="on"}N(t,e)};var l=function(t,n){var r="hidebullets";if(n.hideThumbs==0)r="";if(n.navigationType=="bullet"||n.navigationType=="both"){t.parent().append('
      ')}var i=t.parent().find(".tp-bullets");t.find(">ul:first >li").each(function(e){var n=t.find(">ul:first >li:eq("+e+") img:first").attr("src");i.append('
      ');var r=i.find(".bullet:first")});i.find(".bullet").each(function(r){var i=e(this);if(r==n.slideamount-1)i.addClass("last");if(r==0)i.addClass("first");i.click(function(){var e=false,r=i.index();if(n.navigationArrows=="withbullet"||n.navigationArrows=="nexttobullets")r=i.index()-1;if(r==n.act)e=true;if(n.transition==0&&!e){n.next=r;f(n,t)}})});i.append('
      ');v(t,n)};var c=function(e,n){function u(t){e.parent().append('
      ')}var r=e.find(".tp-bullets"),i="",s="hidearrows",o=n.navigationStyle;if(n.hideThumbs==0)s="";if(n.navigationArrows=="none")i="visibility:hidden;display:none";n.soloArrowStyle="default"+" "+n.navigationStyle;if(n.navigationArrows!="none"&&n.navigationArrows!="nexttobullets")o=n.soloArrowStyle;u("left");u("right");e.parent().find(".tp-rightarrow").click(function(){if(n.transition==0){if(e.data("showus")!=t&&e.data("showus")!=-1)n.next=e.data("showus")-1;else n.next=n.next+1;e.data("showus",-1);if(n.next>=n.slideamount)n.next=0;if(n.next<0)n.next=0;if(n.act!=n.next)f(n,e)}});e.parent().find(".tp-leftarrow").click(function(){if(n.transition==0){n.next=n.next-1;n.leftarrowpressed=1;if(n.next<0)n.next=n.slideamount-1;f(n,e)}});v(e,n)};var h=function(n,r){e(document).keydown(function(e){if(r.transition==0&&e.keyCode==39){if(n.data("showus")!=t&&n.data("showus")!=-1)r.next=n.data("showus")-1;else r.next=r.next+1;n.data("showus",-1);if(r.next>=r.slideamount)r.next=0;if(r.next<0)r.next=0;if(r.act!=r.next)f(r,n)}if(r.transition==0&&e.keyCode==37){r.next=r.next-1;r.leftarrowpressed=1;if(r.next<0)r.next=r.slideamount-1;f(r,n)}});v(n,r)};var p=function(t,n){var r="vertical";if(n.touchenabled=="on"){if(n.drag_block_vertical==true)r="none";t.swipe({allowPageScroll:r,fingers:n.swipe_min_touches,treshold:n.swipe_treshold,swipe:function(i,s,o,u,a,l){switch(s){case"left":if(n.transition==0){n.next=n.next+1;if(n.next==n.slideamount)n.next=0;f(n,t)}break;case"right":if(n.transition==0){n.next=n.next-1;n.leftarrowpressed=1;if(n.next<0)n.next=n.slideamount-1;f(n,t)}break;case"up":if(r=="none")e("html, body").animate({scrollTop:t.offset().top+t.height()+"px"});break;case"down":if(r=="none")e("html, body").animate({scrollTop:t.offset().top-e(window).height()+"px"});break}}})}};var d=function(e,t){var n=e.parent().find(".tp-bullets"),r=e.parent().find(".tparrows");if(n==null){e.append('
      ');var n=e.parent().find(".tp-bullets")}if(r==null){e.append('
      ');var r=e.parent().find(".tparrows")}e.data("hideThumbs",t.hideThumbs);n.addClass("hidebullets");r.addClass("hidearrows");if(J()){try{e.hammer().on("touch",function(){e.addClass("hovered");if(t.onHoverStop=="on")e.trigger("stoptimer");clearTimeout(e.data("hideThumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")});e.hammer().on("release",function(){e.removeClass("hovered");e.trigger("starttimer");if(!e.hasClass("hovered")&&!n.hasClass("hovered"))e.data("hideThumbs",setTimeout(function(){n.addClass("hidebullets");r.addClass("hidearrows");e.trigger("starttimer")},t.hideNavDelayOnMobile))})}catch(i){}}else{n.hover(function(){t.overnav=true;if(t.onHoverStop=="on")e.trigger("stoptimer");n.addClass("hovered");clearTimeout(e.data("hideThumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")},function(){t.overnav=false;e.trigger("starttimer");n.removeClass("hovered");if(!e.hasClass("hovered")&&!n.hasClass("hovered"))e.data("hideThumbs",setTimeout(function(){n.addClass("hidebullets");r.addClass("hidearrows")},t.hideThumbs))});r.hover(function(){t.overnav=true;if(t.onHoverStop=="on")e.trigger("stoptimer");n.addClass("hovered");clearTimeout(e.data("hideThumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")},function(){t.overnav=false;e.trigger("starttimer");n.removeClass("hovered")});e.on("mouseenter",function(){e.addClass("hovered");if(t.onHoverStop=="on")e.trigger("stoptimer");clearTimeout(e.data("hideThumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")});e.on("mouseleave",function(){e.removeClass("hovered");e.trigger("starttimer");if(!e.hasClass("hovered")&&!n.hasClass("hovered"))e.data("hideThumbs",setTimeout(function(){n.addClass("hidebullets");r.addClass("hidearrows")},t.hideThumbs))})}};var v=function(t,n){var r=t.parent();var i=r.find(".tp-bullets");if(n.navigationType=="thumb"){i.find(".thumb").each(function(t){var r=e(this);r.css({width:n.thumbWidth*n.bw+"px",height:n.thumbHeight*n.bh+"px"})});var s=i.find(".tp-mask");s.width(n.thumbWidth*n.thumbAmount*n.bw);s.height(n.thumbHeight*n.bh);s.parent().width(n.thumbWidth*n.thumbAmount*n.bw);s.parent().height(n.thumbHeight*n.bh)}var o=r.find(".tp-leftarrow");var u=r.find(".tp-rightarrow");if(n.navigationType=="thumb"&&n.navigationArrows=="nexttobullets")n.navigationArrows="solo";if(n.navigationArrows=="nexttobullets"){o.prependTo(i).css({"float":"left"});u.insertBefore(i.find(".tpclear")).css({"float":"left"})}var a=0;if(n.forceFullWidth=="on")a=0-n.container.parent().offset().left;var f=0,l=0;if(n.navigationInGrid=="on"){f=t.width()>n.startwidth?(t.width()-n.startwidth)/2:0,l=t.height()>n.startheight?(t.height()-n.startheight)/2:0}if(n.navigationArrows!="none"&&n.navigationArrows!="nexttobullets"){var c=n.soloArrowLeftValign,h=n.soloArrowLeftHalign,p=n.soloArrowRightValign,d=n.soloArrowRightHalign,v=n.soloArrowLeftVOffset,m=n.soloArrowLeftHOffset,g=n.soloArrowRightVOffset,y=n.soloArrowRightHOffset;o.css({position:"absolute"});u.css({position:"absolute"});if(c=="center")o.css({top:"50%",marginTop:v-Math.round(o.innerHeight()/2)+"px"});else if(c=="bottom")o.css({top:"auto",bottom:0+v+"px"});else if(c=="top")o.css({bottom:"auto",top:0+v+"px"});if(h=="center")o.css({left:"50%",marginLeft:a+m-Math.round(o.innerWidth()/2)+"px"});else if(h=="left")o.css({left:f+m+a+"px"});else if(h=="right")o.css({right:f+m-a+"px"});if(p=="center")u.css({top:"50%",marginTop:g-Math.round(u.innerHeight()/2)+"px"});else if(p=="bottom")u.css({top:"auto",bottom:0+g+"px"});else if(p=="top")u.css({bottom:"auto",top:0+g+"px"});if(d=="center")u.css({left:"50%",marginLeft:a+y-Math.round(u.innerWidth()/2)+"px"});else if(d=="left")u.css({left:f+y+a+"px"});else if(d=="right")u.css({right:f+y-a+"px"});if(o.position()!=null)o.css({top:Math.round(parseInt(o.position().top,0))+"px"});if(u.position()!=null)u.css({top:Math.round(parseInt(u.position().top,0))+"px"})}if(n.navigationArrows=="none"){o.css({visibility:"hidden"});u.css({visibility:"hidden"})}var b=n.navigationVAlign,w=n.navigationHAlign,E=n.navigationVOffset*n.bh,S=n.navigationHOffset*n.bw;if(b=="center")i.css({top:"50%",marginTop:E-Math.round(i.innerHeight()/2)+"px"});if(b=="bottom")i.css({bottom:0+E+"px"});if(b=="top")i.css({top:0+E+"px"});if(w=="center")i.css({left:"50%",marginLeft:a+S-Math.round(i.innerWidth()/2)+"px"});if(w=="left")i.css({left:0+S+a+"px"});if(w=="right")i.css({right:0+S-a+"px"})};var m=function(n){var r=n.container;n.beforli=n.next-1;n.comingli=n.next+1;if(n.beforli<0)n.beforli=n.slideamount-1;if(n.comingli>=n.slideamount)n.comingli=0;var i=r.find(">ul:first-child >li:eq("+n.comingli+")"),s=r.find(">ul:first-child >li:eq("+n.beforli+")"),o=s.find(".defaultimg").attr("src"),u=i.find(".defaultimg").attr("src");if(n.arr==t){n.arr=r.parent().find(".tparrows"),n.rar=r.parent().find(".tp-rightarrow"),n.lar=r.parent().find(".tp-leftarrow"),n.raimg=n.rar.find(".tp-arr-imgholder"),n.laimg=n.lar.find(".tp-arr-imgholder"),n.raimg_b=n.rar.find(".tp-arr-imgholder2"),n.laimg_b=n.lar.find(".tp-arr-imgholder2"),n.ratit=n.rar.find(".tp-arr-titleholder"),n.latit=n.lar.find(".tp-arr-titleholder")}var a=n.arr,f=n.rar,l=n.lar,c=n.raimg,h=n.laimg,p=n.raimg_b,d=n.laimg_b,v=n.ratit,m=n.latit;if(i.data("title")!=t)v.html(i.data("title"));if(s.data("title")!=t)m.html(s.data("title"));if(f.hasClass("itishovered")){f.width(v.outerWidth(true)+parseInt(f.css("minWidth"),0))}if(l.hasClass("itishovered")){l.width(m.outerWidth(true)+parseInt(l.css("minWidth"),0))}if(a.hasClass("preview2")&&!a.hasClass("hashoveralready")){a.addClass("hashoveralready");if(!J())a.hover(function(){var t=e(this),n=t.find(".tp-arr-titleholder");if(e(window).width()>767)t.width(n.outerWidth(true)+parseInt(t.css("minWidth"),0));t.addClass("itishovered")},function(){var t=e(this),n=t.find(".tp-arr-titleholder");t.css({width:parseInt(t.css("minWidth"),0)});t.removeClass("itishovered")});else{var a=e(this),g=a.find(".tp-arr-titleholder");g.addClass("alwayshidden");punchgs.TweenLite.set(g,{autoAlpha:0})}}if(s.data("thumb")!=t)o=s.data("thumb");if(i.data("thumb")!=t)u=i.data("thumb");if(!a.hasClass("preview4")){punchgs.TweenLite.to(c,.5,{autoAlpha:0,onComplete:function(){c.css({backgroundImage:"url("+u+")"});h.css({backgroundImage:"url("+o+")"})}});punchgs.TweenLite.to(h,.5,{autoAlpha:0,onComplete:function(){punchgs.TweenLite.to(c,.5,{autoAlpha:1,delay:.2});punchgs.TweenLite.to(h,.5,{autoAlpha:1,delay:.2})}})}else{p.css({backgroundImage:"url("+u+")"});d.css({backgroundImage:"url("+o+")"});punchgs.TweenLite.fromTo(p,.8,{force3D:punchgs.force3d,x:0},{x:-c.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function(){c.css({backgroundImage:"url("+u+")"});punchgs.TweenLite.set(p,{x:0})}});punchgs.TweenLite.fromTo(d,.8,{force3D:punchgs.force3d,x:0},{x:c.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function(){h.css({backgroundImage:"url("+o+")"});punchgs.TweenLite.set(d,{x:0})}});punchgs.TweenLite.fromTo(c,.8,{x:0},{force3D:punchgs.force3d,x:-c.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function(){punchgs.TweenLite.set(c,{x:0})}});punchgs.TweenLite.fromTo(h,.8,{x:0},{force3D:punchgs.force3d,x:c.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function(){punchgs.TweenLite.set(h,{x:0})}})}if(f.hasClass("preview4")&&!f.hasClass("hashoveralready")){f.addClass("hashoveralready");f.hover(function(){var t=e(this).find(".tp-arr-iwrapper");var n=e(this).find(".tp-arr-allwrapper");punchgs.TweenLite.fromTo(t,.4,{x:t.width()},{x:0,delay:.3,ease:punchgs.Power3.easeOut,overwrite:"all"});punchgs.TweenLite.to(n,.2,{autoAlpha:1,overwrite:"all"})},function(){var t=e(this).find(".tp-arr-iwrapper");var n=e(this).find(".tp-arr-allwrapper");punchgs.TweenLite.to(t,.4,{x:t.width(),ease:punchgs.Power3.easeOut,delay:.2,overwrite:"all"});punchgs.TweenLite.to(n,.2,{delay:.6,autoAlpha:0,overwrite:"all"})});l.hover(function(){var t=e(this).find(".tp-arr-iwrapper");var n=e(this).find(".tp-arr-allwrapper");punchgs.TweenLite.fromTo(t,.4,{x:0-t.width()},{x:0,delay:.3,ease:punchgs.Power3.easeOut,overwrite:"all"});punchgs.TweenLite.to(n,.2,{autoAlpha:1,overwrite:"all"})},function(){var t=e(this).find(".tp-arr-iwrapper");var n=e(this).find(".tp-arr-allwrapper");punchgs.TweenLite.to(t,.4,{x:0-t.width(),ease:punchgs.Power3.easeOut,delay:.2,overwrite:"all"});punchgs.TweenLite.to(n,.2,{delay:.6,autoAlpha:0,overwrite:"all"})})}};var g=function(n,r){r.container.closest(".forcefullwidth_wrapper_tp_banner").find(".tp-fullwidth-forcer").css({height:r.container.height()});r.container.closest(".rev_slider_wrapper").css({height:r.container.height()});r.width=parseInt(r.container.width(),0);r.height=parseInt(r.container.height(),0);r.bw=r.width/r.startwidth;r.bh=r.height/r.startheight;if(r.bh>r.bw)r.bh=r.bw;if(r.bh1){r.bw=1;r.bh=1}if(r.bw>1){r.bw=1;r.bh=1}r.height=Math.round(r.startheight*(r.width/r.startwidth));if(r.height>r.startheight&&r.autoHeight!="on")r.height=r.startheight;if(r.fullScreen=="on"){r.height=r.bw*r.startheight;var i=r.container.parent().width();var s=e(window).height();if(r.fullScreenOffsetContainer!=t){try{var o=r.fullScreenOffsetContainer.split(",");e.each(o,function(t,n){s=s-e(n).outerHeight(true);if(s1&&r.fullScreenOffset!=t&&r.fullScreenOffset.length>0){s=s-e(window).height()*parseInt(r.fullScreenOffset,0)/100}else{if(r.fullScreenOffset!=t&&r.fullScreenOffset.length>0)s=s-parseInt(r.fullScreenOffset,0)}if(sul:first").css({overflow:"hidden",width:"100%",height:"100%",maxHeight:n.parent().css("maxHeight")}).addClass("tp-revslider-mainul");if(r.autoHeight=="on"){n.find(">ul:first").css({overflow:"hidden",width:"100%",height:"100%",maxHeight:"none"});n.css({maxHeight:"none"});n.parent().css({maxHeight:"none"})}n.find(">ul:first >li").each(function(r){var i=e(this);i.addClass("tp-revslider-slidesli");i.css({width:"100%",height:"100%",overflow:"hidden"});if(i.data("link")!=t){var s=i.data("link");var o="_self";var u=60;if(i.data("slideindex")=="back")u=0;var a=checksl=i.data("linktoslide");if(a!=t){if(a!="next"&&a!="prev")n.find(">ul:first-child >li").each(function(){var t=e(this);if(t.data("origindex")+1==checksl)a=t.index()+1})}if(i.data("target")!=t)o=i.data("target");if(s!="slide")a="no";var f='';i.append(f)}});n.parent().css({overflow:"visible"});n.find(">ul:first >li >img").each(function(n){var i=e(this);i.addClass("defaultimg");if(i.data("lazyload")!=t&&i.data("lazydone")!=1){}else{g(i,r)}if(a(8)){i.data("kenburns","off")}if(r.panZoomDisableOnMobile=="on"&&J()){i.data("kenburns","off");i.data("bgfit","cover")}i.wrap('
      ");if(r.dottedOverlay!="none"&&r.dottedOverlay!=t)i.closest(".slotholder").append('
      ');var s=i.attr("src"),o=i.data("lazyload"),u=i.data("bgfit"),f=i.data("bgrepeat"),l=i.data("bgposition");if(u==t)u="cover";if(f==t)f="no-repeat";if(l==t)l="center center";var c=i.closest(".slotholder");i.replaceWith('
      ');if(a(8)){c.find(".tp-bgimg").css({backgroundImage:"none","background-image":"none"});c.find(".tp-bgimg").append('')}i.css({opacity:0});i.data("li-id",n)})};var b=function(e,n,r,i){var s=e,o=s.find(".defaultimg"),u=s.data("zoomstart"),f=s.data("rotationstart");if(o.data("currotate")!=t)f=o.data("currotate");if(o.data("curscale")!=t&&i=="box")u=o.data("curscale")*100;else if(o.data("curscale")!=t)u=o.data("curscale");g(o,n);var l=o.data("src"),c=o.css("backgroundColor"),h=n.width,p=n.height,d=o.data("fxof"),v=0;if(n.autoHeight=="on")p=n.container.height();if(d==t)d=0;var m=0,y=o.data("bgfit"),b=o.data("bgrepeat"),E=o.data("bgposition");if(y==t)y="cover";if(b==t)b="no-repeat";if(E==t)E="center center";if(a(8)){s.data("kenburns","off");var S=l;l=""}switch(i){case"box":var x=0,T=0,N=0;if(n.sloth>n.slotw)x=n.sloth;else x=n.slotw;if(!r){var m=0-x}n.slotw=x;n.sloth=x;var T=0;var N=0;if(s.data("kenburns")=="on"){y=u;if(y.toString().length<4)y=K(y,s,n)}for(var C=0;C'+'
      '+'
      '+"
      ");N=N+x;if(a(8)){s.find(".slot ").last().find(".slotslide").append('');w(s,n)}if(u!=t&&f!=t)punchgs.TweenLite.set(s.find(".slot").last(),{rotationZ:f})}T=T+x}break;case"vertical":case"horizontal":if(s.data("kenburns")=="on"){y=u;if(y.toString().length<4)y=K(y,s,n)}if(i=="horizontal"){if(!r)var m=0-n.slotw;for(var k=0;k'+'
      '+'
      '+"
      ");if(u!=t&&f!=t)punchgs.TweenLite.set(s.find(".slot").last(),{rotationZ:f});if(a(8)){s.find(".slot ").last().find(".slotslide").append('');w(s,n)}}}else{if(!r)var m=0-n.sloth;for(var k=0;k'+'
      '+'
      '+"
    • ");if(u!=t&&f!=t)punchgs.TweenLite.set(s.find(".slot").last(),{rotationZ:f});if(a(8)){s.find(".slot ").last().find(".slotslide").append('');w(s,n)}}}break}};var w=function(e,t){if(a(8)){var n=e.find(".ieeightfallbackimage");var r=n.width(),i=n.height();if(t.startwidth/t.startheight0)S(n,o);else{clearInterval(s);if(r!=t)r()}},100)};var N=function(e,n){try{var r=e.find(">ul:first-child >li:eq("+n.act+")")}catch(i){var r=e.find(">ul:first-child >li:eq(1)")}n.lastslide=n.act;var s=e.find(">ul:first-child >li:eq("+n.next+")");var o=s.find(".defaultimg");n.bannertimeronpause=true;e.trigger("stoptimer");n.cd=0;if(o.data("lazyload")!=t&&o.data("lazyload")!="undefined"&&o.data("lazydone")!=1){if(!a(8))o.css({backgroundImage:'url("'+s.find(".defaultimg").data("lazyload")+'")'});else{o.attr("src",s.find(".defaultimg").data("lazyload"))}o.data("src",s.find(".defaultimg").data("lazyload"));o.data("lazydone",1);o.data("orgw",0);s.data("loadeddone",1);e.find(".tp-loader").css({display:"block"});T(e.find(".tp-static-layers"),function(){T(s,function(){var t=s.find(".slotholder");if(t.data("kenburns")=="on"){var r=setInterval(function(){var i=t.data("owidth");if(i>=0){clearInterval(r);C(n,o,e)}},10)}else C(n,o,e)},n)},n)}else{if(s.data("loadeddone")===t){s.data("loadeddone",1);T(s,function(){C(n,o,e)},n)}else C(n,o,e)}};var C=function(e,t,n){e.bannertimeronpause=false;e.cd=0;n.trigger("nulltimer");n.find(".tp-loader").css({display:"none"});g(t,e);v(n,e);g(t,e);k(n,e)};var k=function(e,n){e.trigger("revolution.slide.onbeforeswap");n.transition=1;n.videoplaying=false;try{var r=e.find(">ul:first-child >li:eq("+n.act+")")}catch(i){var r=e.find(">ul:first-child >li:eq(1)")}n.lastslide=n.act;var s=e.find(">ul:first-child >li:eq("+n.next+")");setTimeout(function(){m(n)},200);var o=r.find(".slotholder"),u=s.find(".slotholder");if(u.data("kenburns")=="on"||o.data("kenburns")=="on"){Z(e,n);e.find(".kenburnimg").remove()}if(s.data("delay")!=t){n.cd=0;n.delay=s.data("delay")}else{n.delay=n.origcd}if(n.firststart==1)punchgs.TweenLite.set(r,{autoAlpha:0});punchgs.TweenLite.set(r,{zIndex:18});punchgs.TweenLite.set(s,{autoAlpha:0,zIndex:20});var a=0;if(r.index()!=s.index()&&n.firststart!=1){a=z(r,n)}if(r.data("saveperformance")!="on")a=0;setTimeout(function(){e.trigger("restarttimer");L(e,n,s,r,o,u)},a)};var L=function(n,r,i,s,o,u){function x(){e.each(d,function(e,t){if(t[0]==h||t[8]==h){f=t[1];p=t[2];g=y}y=y+1})}if(i.data("differentissplayed")=="prepared"){i.data("differentissplayed","done");i.data("transition",i.data("savedtransition"));i.data("slotamount",i.data("savedslotamount"));i.data("masterspeed",i.data("savedmasterspeed"))}if(i.data("fstransition")!=t&&i.data("differentissplayed")!="done"){i.data("savedtransition",i.data("transition"));i.data("savedslotamount",i.data("slotamount"));i.data("savedmasterspeed",i.data("masterspeed"));i.data("transition",i.data("fstransition"));i.data("slotamount",i.data("fsslotamount"));i.data("masterspeed",i.data("fsmasterspeed"));i.data("differentissplayed","prepared")}n.find(".active-revslide").removeClass(".active-revslide");i.addClass("active-revslide");if(i.data("transition")==t)i.data("transition","random");var f=0,l=i.data("transition").split(","),c=i.data("nexttransid")==t?-1:i.data("nexttransid");if(i.data("randomtransition")=="on")c=Math.round(Math.random()*l.length);else c=c+1;if(c==l.length)c=0;i.data("nexttransid",c);var h=l[c];if(r.ie){if(h=="boxfade")h="boxslide";if(h=="slotfade-vertical")h="slotzoom-vertical";if(h=="slotfade-horizontal")h="slotzoom-horizontal"}if(a(8)){h=11}var p=0;if(r.parallax=="scroll"&&r.parallaxFirstGo==t){r.parallaxFirstGo=true;tt(n,r);setTimeout(function(){tt(n,r)},210);setTimeout(function(){tt(n,r)},420)}if(h=="slidehorizontal"){h="slideleft";if(r.leftarrowpressed==1)h="slideright"}if(h=="slidevertical"){h="slideup";if(r.leftarrowpressed==1)h="slidedown"}if(h=="parallaxhorizontal"){h="parallaxtoleft";if(r.leftarrowpressed==1)h="parallaxtoright"}if(h=="parallaxvertical"){h="parallaxtotop";if(r.leftarrowpressed==1)h="parallaxtobottom"}var d=[["boxslide",0,1,10,0,"box",false,null,0],["boxfade",1,0,10,0,"box",false,null,1],["slotslide-horizontal",2,0,0,200,"horizontal",true,false,2],["slotslide-vertical",3,0,0,200,"vertical",true,false,3],["curtain-1",4,3,0,0,"horizontal",true,true,4],["curtain-2",5,3,0,0,"horizontal",true,true,5],["curtain-3",6,3,25,0,"horizontal",true,true,6],["slotzoom-horizontal",7,0,0,400,"horizontal",true,true,7],["slotzoom-vertical",8,0,0,0,"vertical",true,true,8],["slotfade-horizontal",9,0,0,500,"horizontal",true,null,9],["slotfade-vertical",10,0,0,500,"vertical",true,null,10],["fade",11,0,1,300,"horizontal",true,null,11],["slideleft",12,0,1,0,"horizontal",true,true,12],["slideup",13,0,1,0,"horizontal",true,true,13],["slidedown",14,0,1,0,"horizontal",true,true,14],["slideright",15,0,1,0,"horizontal",true,true,15],["papercut",16,0,0,600,"",null,null,16],["3dcurtain-horizontal",17,0,20,100,"vertical",false,true,17],["3dcurtain-vertical",18,0,10,100,"horizontal",false,true,18],["cubic",19,0,20,600,"horizontal",false,true,19],["cube",19,0,20,600,"horizontal",false,true,20],["flyin",20,0,4,600,"vertical",false,true,21],["turnoff",21,0,1,1600,"horizontal",false,true,22],["incube",22,0,20,200,"horizontal",false,true,23],["cubic-horizontal",23,0,20,500,"vertical",false,true,24],["cube-horizontal",23,0,20,500,"vertical",false,true,25],["incube-horizontal",24,0,20,500,"vertical",false,true,26],["turnoff-vertical",25,0,1,200,"horizontal",false,true,27],["fadefromright",12,1,1,0,"horizontal",true,true,28],["fadefromleft",15,1,1,0,"horizontal",true,true,29],["fadefromtop",14,1,1,0,"horizontal",true,true,30],["fadefrombottom",13,1,1,0,"horizontal",true,true,31],["fadetoleftfadefromright",12,2,1,0,"horizontal",true,true,32],["fadetorightfadetoleft",15,2,1,0,"horizontal",true,true,33],["fadetobottomfadefromtop",14,2,1,0,"horizontal",true,true,34],["fadetotopfadefrombottom",13,2,1,0,"horizontal",true,true,35],["parallaxtoright",12,3,1,0,"horizontal",true,true,36],["parallaxtoleft",15,3,1,0,"horizontal",true,true,37],["parallaxtotop",14,3,1,0,"horizontal",true,true,38],["parallaxtobottom",13,3,1,0,"horizontal",true,true,39],["scaledownfromright",12,4,1,0,"horizontal",true,true,40],["scaledownfromleft",15,4,1,0,"horizontal",true,true,41],["scaledownfromtop",14,4,1,0,"horizontal",true,true,42],["scaledownfrombottom",13,4,1,0,"horizontal",true,true,43],["zoomout",13,5,1,0,"horizontal",true,true,44],["zoomin",13,6,1,0,"horizontal",true,true,45],["notransition",26,0,1,0,"horizontal",true,null,46]];var v=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45];var m=[16,17,18,19,20,21,22,23,24,25,26,27];var f=0;var p=1;var g=0;var y=0;var w=new Array;if(u.data("kenburns")=="on"){if(h=="boxslide"||h==0||h=="boxfade"||h==1||h=="papercut"||h==16)h=11;Q(n,r,true,true)}if(h=="random"){h=Math.round(Math.random()*d.length-1);if(h>d.length-1)h=d.length-1}if(h=="random-static"){h=Math.round(Math.random()*v.length-1);if(h>v.length-1)h=v.length-1;h=v[h]}if(h=="random-premium"){h=Math.round(Math.random()*m.length-1);if(h>m.length-1)h=m.length-1;h=m[h]}var E=[12,13,14,15,16,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45];if(r.isJoomla==true&&window.MooTools!=t&&E.indexOf(h)!=-1){var S=Math.round(Math.random()*(m.length-2))+1;if(S>m.length-1)S=m.length-1;if(S==0)S=1;h=m[S]}x();if(a(8)&&f>15&&f<28){h=Math.round(Math.random()*v.length-1);if(h>v.length-1)h=v.length-1;h=v[h];y=0;x()}var T=-1;if(r.leftarrowpressed==1||r.act>r.next)T=1;r.leftarrowpressed=0;if(f>26)f=26;if(f<0)f=0;var N=300;if(i.data("masterspeed")!=t&&i.data("masterspeed")>99&&i.data("masterspeed")r.delay)N=r.delay;w=d[g];n.parent().find(".bullet").each(function(){var t=e(this),n=t.index();t.removeClass("selected");if(r.navigationArrows=="withbullet"||r.navigationArrows=="nexttobullets")n=t.index()-1;if(n==r.next)t.addClass("selected")});var C=new punchgs.TimelineLite({onComplete:function(){A(n,r,u,o,i,s,C)}});C.add(punchgs.TweenLite.set(u.find(".defaultimg"),{opacity:0}));C.pause();if(i.data("slotamount")==t||i.data("slotamount")<1){r.slots=Math.round(Math.random()*12+4);if(h=="boxslide")r.slots=Math.round(Math.random()*6+3);else if(h=="flyin")r.slots=Math.round(Math.random()*4+1)}else{r.slots=i.data("slotamount")}if(i.data("rotate")==t)r.rotate=0;else if(i.data("rotate")==999)r.rotate=Math.round(Math.random()*360);else r.rotate=i.data("rotate");if(!e.support.transition||r.ie||r.ie9)r.rotate=0;if(r.firststart==1)r.firststart=0;N=N+w[4];if((f==4||f==5||f==6)&&r.slots<3)r.slots=3;if(w[3]!=0)r.slots=Math.min(r.slots,w[3]);if(f==9)r.slots=r.width/20;if(f==10)r.slots=r.height/20;if(w[7]!=null)b(o,r,w[7],w[5]);if(w[6]!=null)b(u,r,w[6],w[5]);if(f==0){var k=Math.ceil(r.height/r.sloth);var L=0;u.find(".slotslide").each(function(t){var n=e(this);L=L+1;if(L==k)L=0;C.add(punchgs.TweenLite.from(n,N/600,{opacity:0,top:0-r.sloth,left:0-r.slotw,rotation:r.rotate,force3D:"auto",ease:punchgs.Power2.easeOut}),(t*15+L*30)/1500)})}if(f==1){var O,M=0;u.find(".slotslide").each(function(t){var n=e(this),i=Math.random()*N+300,s=Math.random()*500+200;if(i+s>O){O=s+s;M=t}C.add(punchgs.TweenLite.from(n,i/1e3,{autoAlpha:0,force3D:"auto",rotation:r.rotate,ease:punchgs.Power2.easeInOut}),s/1e3)})}if(f==2){var _=new punchgs.TimelineLite;o.find(".slotslide").each(function(){var t=e(this);_.add(punchgs.TweenLite.to(t,N/1e3,{left:r.slotw,force3D:"auto",rotation:0-r.rotate}),0);C.add(_,0)});u.find(".slotslide").each(function(){var t=e(this);_.add(punchgs.TweenLite.from(t,N/1e3,{left:0-r.slotw,force3D:"auto",rotation:r.rotate}),0);C.add(_,0)})}if(f==3){var _=new punchgs.TimelineLite;o.find(".slotslide").each(function(){var t=e(this);_.add(punchgs.TweenLite.to(t,N/1e3,{top:r.sloth,rotation:r.rotate,force3D:"auto",transformPerspective:600}),0);C.add(_,0)});u.find(".slotslide").each(function(){var t=e(this);_.add(punchgs.TweenLite.from(t,N/1e3,{top:0-r.sloth,rotation:r.rotate,ease:punchgs.Power2.easeOut,force3D:"auto",transformPerspective:600}),0);C.add(_,0)})}if(f==4||f==5){setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var D=N/1e3,P=D,_=new punchgs.TimelineLite;o.find(".slotslide").each(function(t){var n=e(this);var i=t*D/r.slots;if(f==5)i=(r.slots-t-1)*D/r.slots/1.5;_.add(punchgs.TweenLite.to(n,D*3,{transformPerspective:600,force3D:"auto",top:0+r.height,opacity:.5,rotation:r.rotate,ease:punchgs.Power2.easeInOut,delay:i}),0);C.add(_,0)});u.find(".slotslide").each(function(t){var n=e(this);var i=t*D/r.slots;if(f==5)i=(r.slots-t-1)*D/r.slots/1.5;_.add(punchgs.TweenLite.from(n,D*3,{top:0-r.height,opacity:.5,rotation:r.rotate,force3D:"auto",ease:punchgs.Power2.easeInOut,delay:i}),0);C.add(_,0)})}if(f==6){if(r.slots<2)r.slots=2;if(r.slots%2)r.slots=r.slots+1;var _=new punchgs.TimelineLite;setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);o.find(".slotslide").each(function(t){var n=e(this);if(t+1r.delay)N=r.delay;var _=new punchgs.TimelineLite;setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);o.find(".slotslide").each(function(){var t=e(this).find("div");_.add(punchgs.TweenLite.to(t,N/1e3,{left:0-r.slotw/2+"px",top:0-r.height/2+"px",width:r.slotw*2+"px",height:r.height*2+"px",opacity:0,rotation:r.rotate,force3D:"auto",ease:punchgs.Power2.easeOut}),0);C.add(_,0)});u.find(".slotslide").each(function(t){var n=e(this).find("div");_.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,top:0,opacity:0,transformPerspective:600},{left:0-t*r.slotw+"px",ease:punchgs.Power2.easeOut,force3D:"auto",top:0+"px",width:r.width,height:r.height,opacity:1,rotation:0,delay:.1}),0);C.add(_,0)})}if(f==8){N=N*3;if(N>r.delay)N=r.delay;var _=new punchgs.TimelineLite;o.find(".slotslide").each(function(){var t=e(this).find("div");_.add(punchgs.TweenLite.to(t,N/1e3,{left:0-r.width/2+"px",top:0-r.sloth/2+"px",width:r.width*2+"px",height:r.sloth*2+"px",force3D:"auto",opacity:0,rotation:r.rotate}),0);C.add(_,0)});u.find(".slotslide").each(function(t){var n=e(this).find("div");_.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,top:0,opacity:0,force3D:"auto"},{left:0+"px",top:0-t*r.sloth+"px",width:u.find(".defaultimg").data("neww")+"px",height:u.find(".defaultimg").data("newh")+"px",opacity:1,rotation:0}),0);C.add(_,0)})}if(f==9||f==10){var H=0;u.find(".slotslide").each(function(t){var n=e(this);H++;C.add(punchgs.TweenLite.fromTo(n,N/1e3,{autoAlpha:0,force3D:"auto",transformPerspective:600},{autoAlpha:1,ease:punchgs.Power2.easeInOut,delay:t*5/1e3}),0)})}if(f==11||f==26){var H=0;if(f==26)N=0;u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.from(n,N/1e3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power2.easeInOut}),0)})}if(f==12||f==13||f==14||f==15){N=N;if(N>r.delay)N=r.delay;setTimeout(function(){punchgs.TweenLite.set(o.find(".defaultimg"),{autoAlpha:0})},100);var B=r.width,F=r.height,I=u.find(".slotslide"),q=0,R=0,U=1,z=1,W=1,X=punchgs.Power2.easeInOut,V=punchgs.Power2.easeInOut,$=N/1e3,J=$;if(r.fullWidth=="on"||r.fullScreen=="on"){B=I.width();F=I.height()}if(f==12)q=B;else if(f==15)q=0-B;else if(f==13)R=F;else if(f==14)R=0-F;if(p==1)U=0;if(p==2)U=0;if(p==3){X=punchgs.Power2.easeInOut;V=punchgs.Power1.easeInOut;$=N/1200}if(p==4||p==5)z=.6;if(p==6)z=1.4;if(p==5||p==6){W=1.4;U=0;B=0;F=0;q=0;R=0}if(p==6)W=.6;var K=0;C.add(punchgs.TweenLite.from(I,$,{left:q,top:R,scale:W,opacity:U,rotation:r.rotate,ease:V,force3D:"auto"}),0);var G=o.find(".slotslide");if(p==4||p==5){B=0;F=0}if(p!=1)switch(f){case 12:C.add(punchgs.TweenLite.to(G,J,{left:0-B+"px",force3D:"auto",scale:z,opacity:U,rotation:r.rotate,ease:X}),0);break;case 15:C.add(punchgs.TweenLite.to(G,J,{left:B+"px",force3D:"auto",scale:z,opacity:U,rotation:r.rotate,ease:X}),0);break;case 13:C.add(punchgs.TweenLite.to(G,J,{top:0-F+"px",force3D:"auto",scale:z,opacity:U,rotation:r.rotate,ease:X}),0);break;case 14:C.add(punchgs.TweenLite.to(G,J,{top:F+"px",force3D:"auto",scale:z,opacity:U,rotation:r.rotate,ease:X}),0);break}}if(f==16){var _=new punchgs.TimelineLite;C.add(punchgs.TweenLite.set(s,{position:"absolute","z-index":20}),0);C.add(punchgs.TweenLite.set(i,{position:"absolute","z-index":15}),0);s.wrapInner('
      ');s.find(".tp-half-one").clone(true).appendTo(s).addClass("tp-half-two");s.find(".tp-half-two").removeClass("tp-half-one");var B=r.width,F=r.height;if(r.autoHeight=="on")F=n.height();s.find(".tp-half-one .defaultimg").wrap('
      ');s.find(".tp-half-two .defaultimg").wrap('
      ');s.find(".tp-half-two .defaultimg").css({position:"absolute",top:"-50%"});s.find(".tp-half-two .tp-caption").wrapAll('
      ');C.add(punchgs.TweenLite.set(s.find(".tp-half-two"),{width:B,height:F,overflow:"hidden",zIndex:15,position:"absolute",top:F/2,left:"0px",transformPerspective:600,transformOrigin:"center bottom"}),0);C.add(punchgs.TweenLite.set(s.find(".tp-half-one"),{width:B,height:F/2,overflow:"visible",zIndex:10,position:"absolute",top:"0px",left:"0px",transformPerspective:600,transformOrigin:"center top"}),0);var Y=s.find(".defaultimg"),Z=Math.round(Math.random()*20-10),et=Math.round(Math.random()*20-10),nt=Math.round(Math.random()*20-10),rt=Math.random()*.4-.2,it=Math.random()*.4-.2,st=Math.random()*1+1,ot=Math.random()*1+1,ut=Math.random()*.3+.3;C.add(punchgs.TweenLite.set(s.find(".tp-half-one"),{overflow:"hidden"}),0);C.add(punchgs.TweenLite.fromTo(s.find(".tp-half-one"),N/800,{width:B,height:F/2,position:"absolute",top:"0px",left:"0px",force3D:"auto",transformOrigin:"center top"},{scale:st,rotation:Z,y:0-F-F/4,autoAlpha:0,ease:punchgs.Power2.easeInOut}),0);C.add(punchgs.TweenLite.fromTo(s.find(".tp-half-two"),N/800,{width:B,height:F,overflow:"hidden",position:"absolute",top:F/2,left:"0px",force3D:"auto",transformOrigin:"center bottom"},{scale:ot,rotation:et,y:F+F/4,ease:punchgs.Power2.easeInOut,autoAlpha:0,onComplete:function(){punchgs.TweenLite.set(s,{position:"absolute","z-index":15});punchgs.TweenLite.set(i,{position:"absolute","z-index":20});if(s.find(".tp-half-one").length>0){s.find(".tp-half-one .defaultimg").unwrap();s.find(".tp-half-one .slotholder").unwrap()}s.find(".tp-half-two").remove()}}),0);_.add(punchgs.TweenLite.set(u.find(".defaultimg"),{autoAlpha:1}),0);if(s.html()!=null)C.add(punchgs.TweenLite.fromTo(i,(N-200)/1e3,{scale:ut,x:r.width/4*rt,y:F/4*it,rotation:nt,force3D:"auto",transformOrigin:"center center",ease:punchgs.Power2.easeOut},{autoAlpha:1,scale:1,x:0,y:0,rotation:0}),0);C.add(_,0)}if(f==17){u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/800,{opacity:0,rotationY:0,scale:.9,rotationX:-110,force3D:"auto",transformPerspective:600,transformOrigin:"center center"},{opacity:1,top:0,left:0,scale:1,rotation:0,rotationX:0,force3D:"auto",rotationY:0,ease:punchgs.Power3.easeOut,delay:t*.06}),0)})}if(f==18){u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/500,{autoAlpha:0,rotationY:310,scale:.9,rotationX:10,force3D:"auto",transformPerspective:600,transformOrigin:"center center"},{autoAlpha:1,top:0,left:0,scale:1,rotation:0,rotationX:0,force3D:"auto",rotationY:0,ease:punchgs.Power3.easeOut,delay:t*.06}),0)})}if(f==19||f==22){var _=new punchgs.TimelineLite;C.add(punchgs.TweenLite.set(s,{zIndex:20}),0);C.add(punchgs.TweenLite.set(i,{zIndex:20}),0);setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var at=i.css("z-index"),ft=s.css("z-index"),lt=90,U=1,ct="center center ";if(T==1)lt=-90;if(f==19){ct=ct+"-"+r.height/2;U=0}else{ct=ct+r.height/2}punchgs.TweenLite.set(n,{transformStyle:"flat",backfaceVisibility:"hidden",transformPerspective:600});u.find(".slotslide").each(function(t){var n=e(this);_.add(punchgs.TweenLite.fromTo(n,N/1e3,{transformStyle:"flat",backfaceVisibility:"hidden",left:0,rotationY:r.rotate,z:10,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationX:lt},{left:0,rotationY:0,top:0,z:0,scale:1,force3D:"auto",rotationX:0,delay:t*50/1e3,ease:punchgs.Power2.easeInOut}),0);_.add(punchgs.TweenLite.to(n,.1,{autoAlpha:1,delay:t*50/1e3}),0);C.add(_)});o.find(".slotslide").each(function(t){var n=e(this);var i=-90;if(T==1)i=90;_.add(punchgs.TweenLite.fromTo(n,N/1e3,{transformStyle:"flat",backfaceVisibility:"hidden",autoAlpha:1,rotationY:0,top:0,z:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationX:0},{autoAlpha:1,rotationY:r.rotate,top:0,z:10,scale:1,rotationX:i,delay:t*50/1e3,force3D:"auto",ease:punchgs.Power2.easeInOut}),0);C.add(_)})}if(f==20){setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var at=i.css("z-index"),ft=s.css("z-index");if(T==1){var ht=-r.width;var lt=70;var ct="left center -"+r.height/2}else{var ht=r.width;var lt=-70;var ct="right center -"+r.height/2}u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1500,{left:ht,rotationX:40,z:-600,opacity:U,top:0,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:lt},{left:0,delay:t*50/1e3,ease:punchgs.Power2.easeInOut}),0);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{rotationX:40,z:-600,opacity:U,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:lt},{rotationX:0,opacity:1,top:0,z:0,scale:1,rotationY:0,delay:t*50/1e3,ease:punchgs.Power2.easeInOut}),0);C.add(punchgs.TweenLite.to(n,.1,{opacity:1,force3D:"auto",delay:t*50/1e3+N/2e3}),0)});o.find(".slotslide").each(function(t){var n=e(this);if(T!=1){var i=-r.width;var s=70;var o="left center -"+r.height/2}else{var i=r.width;var s=-70;var o="right center -"+r.height/2}C.add(punchgs.TweenLite.fromTo(n,N/1e3,{opacity:1,rotationX:0,top:0,z:0,scale:1,left:0,force3D:"auto",transformPerspective:600,transformOrigin:o,rotationY:0},{opacity:1,rotationX:40,top:0,z:-600,left:i,force3D:"auto",scale:.8,rotationY:s,delay:t*50/1e3,ease:punchgs.Power2.easeInOut}),0);C.add(punchgs.TweenLite.to(n,.1,{force3D:"auto",opacity:0,delay:t*50/1e3+(N/1e3-N/1e4)}),0)})}if(f==21||f==25){setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var at=i.css("z-index"),ft=s.css("z-index"),lt=90,ht=-r.width,pt=-lt;if(T==1){if(f==25){var ct="center top 0";lt=r.rotate}else{var ct="left center 0";pt=r.rotate}}else{ht=r.width;lt=-90;if(f==25){var ct="center bottom 0";pt=-lt;lt=r.rotate}else{var ct="right center 0";pt=r.rotate}}u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,transformStyle:"flat",rotationX:pt,z:0,autoAlpha:0,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:lt},{left:0,rotationX:0,top:0,z:0,autoAlpha:1,scale:1,rotationY:0,force3D:"auto",ease:punchgs.Power3.easeInOut}),0)});if(T!=1){ht=-r.width;lt=90;if(f==25){ct="center top 0";pt=-lt;lt=r.rotate}else{ct="left center 0";pt=r.rotate}}else{ht=r.width;lt=-90;if(f==25){ct="center bottom 0";pt=-lt;lt=r.rotate}else{ct="right center 0";pt=r.rotate}}o.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,transformStyle:"flat",rotationX:0,z:0,autoAlpha:1,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:0},{left:0,rotationX:pt,top:0,z:0,autoAlpha:1,force3D:"auto",scale:1,rotationY:lt,ease:punchgs.Power1.easeInOut}),0)})}if(f==23||f==24){setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var at=i.css("z-index"),ft=s.css("z-index"),lt=-90,U=1,dt=0;if(T==1)lt=90;if(f==23){var ct="center center -"+r.width/2;U=0}else var ct="center center "+r.width/2;punchgs.TweenLite.set(n,{transformStyle:"preserve-3d",backfaceVisibility:"hidden",perspective:2500});u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:dt,rotationX:r.rotate,force3D:"auto",opacity:U,top:0,scale:1,transformPerspective:600,transformOrigin:ct,rotationY:lt},{left:0,rotationX:0,autoAlpha:1,top:0,z:0,scale:1,rotationY:0,delay:t*50/500,ease:punchgs.Power2.easeInOut}),0)});lt=90;if(T==1)lt=-90;o.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,autoAlpha:1,rotationX:0,top:0,z:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:0},{left:dt,autoAlpha:1,rotationX:r.rotate,top:0,scale:1,rotationY:lt,delay:t*50/500,ease:punchgs.Power2.easeInOut}),0)})}C.pause();j(i,r,null,C);punchgs.TweenLite.to(i,.001,{autoAlpha:1});var vt={};vt.slideIndex=r.next+1;vt.slide=i;n.trigger("revolution.slide.onchange",vt);setTimeout(function(){n.trigger("revolution.slide.onafterswap")},N);n.trigger("revolution.slide.onvideostop")};var A=function(e,t,n,r,i,s,o){punchgs.TweenLite.to(n.find(".defaultimg"),.001,{autoAlpha:1,onComplete:function(){E(e,t,i)}});if(i.index()!=s.index()){punchgs.TweenLite.to(s,.2,{autoAlpha:0,onComplete:function(){E(e,t,s)}})}t.act=t.next;if(t.navigationType=="thumb")rt(e);if(n.data("kenburns")=="on"){Q(e,t)}e.find(".current-sr-slide-visible").removeClass("current-sr-slide-visible");i.addClass("current-sr-slide-visible");if(t.parallax=="scroll"||t.parallax=="scroll+mouse"||t.parallax=="mouse+scroll"){tt(e,t)}o.clear()};var O=function(t){var n=t.target.getVideoEmbedCode();var r=e("#"+n.split('id="')[1].split('"')[0]);var i=r.closest(".tp-simpleresponsive");var s=r.parent().data("player");if(t.data==YT.PlayerState.PLAYING){var o=i.find(".tp-bannertimer");var u=o.data("opt");if(r.closest(".tp-caption").data("volume")=="mute")s.mute();u.videoplaying=true;i.trigger("stoptimer");i.trigger("revolution.slide.onvideoplay")}else{var o=i.find(".tp-bannertimer");var u=o.data("opt");if(t.data!=-1&&t.data!=3){u.videoplaying=false;i.trigger("starttimer");i.trigger("revolution.slide.onvideostop")}if(t.data==0&&u.nextslideatend==true)u.container.revnext();else{u.videoplaying=false;i.trigger("starttimer");i.trigger("revolution.slide.onvideostop")}}};var M=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,false);else e.attachEvent(t,n,false)};var _=function(t,n){var r=$f(t),i=e("#"+t),s=i.closest(".tp-simpleresponsive"),o=i.closest(".tp-caption");setTimeout(function(){r.addEvent("ready",function(t){if(n)r.api("play");r.addEvent("play",function(e){var t=s.find(".tp-bannertimer");var n=t.data("opt");n.videoplaying=true;s.trigger("stoptimer");if(o.data("volume")=="mute")r.api("setVolume","0")});r.addEvent("finish",function(e){var t=s.find(".tp-bannertimer");var n=t.data("opt");n.videoplaying=false;s.trigger("starttimer");s.trigger("revolution.slide.onvideoplay");if(n.nextslideatend==true)n.container.revnext()});r.addEvent("pause",function(e){var t=s.find(".tp-bannertimer");var n=t.data("opt");n.videoplaying=false;s.trigger("starttimer");s.trigger("revolution.slide.onvideostop")});o.find(".tp-thumb-image").click(function(){punchgs.TweenLite.to(e(this),.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut});r.api("play")})})},150)};var D=function(e,n){var r=n.width();var i=n.height();var s=e.data("mediaAspect");if(s==t)s=1;var o=r/i;e.css({position:"absolute"});var u=e.find("video");if(o=r.next||p==r.next||d==r.next){h.addClass("tp-is-shown");f=1}else{f=0}}else{if(d==r.next||p>r.next||d0)c=r.container.height()/2-r.startheight*r.bh/2;if(c<0)c=0;var g=0;if(r.width0||h.find("video").length>0){var y="iframe"+Math.round(Math.random()*1e5+1),b=h.data("videowidth"),w=h.data("videoheight"),E=h.data("videoattributes"),S=h.data("ytid"),x=h.data("vimeoid"),T=h.data("videpreload"),N=h.data("videomp4"),C=h.data("videowebm"),k=h.data("videoogv"),L=h.data("videocontrols"),A="http",j=h.data("videoloop")=="loop"?"loop":h.data("videoloop")=="loopandnoslidestop"?"loop":"";if(h.data("thumbimage")!=t&&h.data("videoposter")==t)h.data("videoposter",h.data("thumbimage"));if(S!=t&&String(S).length>1&&h.find("iframe").length==0){A="https";if(L=="none"){E=E.replace("controls=1","controls=0");if(E.toLowerCase().indexOf("controls")==-1)E=E+"&controls=0"}h.append('')}if(x!=t&&String(x).length>1&&h.find("iframe").length==0){if(location.protocol==="https:")A="https";h.append('')}if((N!=t||C!=t)&&h.find("video").length==0){if(L!="controls")L="";var I='";h.append(I);if(L=="controls")h.append('
      '+'
      '+'
      '+'
      '+'
      '+'
      '+"
      ")}var z=false;if(h.data("autoplayonlyfirsttime")==true||h.data("autoplayonlyfirsttime")=="true"||h.data("autoplay")==true){h.data("autoplay",true);z=true}h.find("iframe").each(function(){var n=e(this);punchgs.TweenLite.to(n,.1,{autoAlpha:1,zIndex:0,transformStyle:"preserve-3d",z:0,rotationX:0,force3D:"auto"});if(J()){var o=n.attr("src");n.attr("src","");n.attr("src",o)}r.nextslideatend=h.data("nextslideatend");if(h.data("videoposter")!=t&&h.data("videoposter").length>2&&h.data("autoplay")!=true&&!s){if(h.find(".tp-thumb-image").length==0)h.append('
      ');else punchgs.TweenLite.set(h.find(".tp-thumb-image"),{autoAlpha:1})}if(n.attr("src").toLowerCase().indexOf("youtube")>=0){if(!n.hasClass("HasListener")){try{n.attr("id",y);var u;var a=setInterval(function(){if(YT!=t)if(typeof YT.Player!=t&&typeof YT.Player!="undefined"){u=new YT.Player(y,{events:{onStateChange:O,onReady:function(n){var r=n.target.getVideoEmbedCode(),i=e("#"+r.split('id="')[1].split('"')[0]),s=i.closest(".tp-caption"),o=s.data("videorate"),a=s.data("videostart");if(o!=t)n.target.setPlaybackRate(parseFloat(o));if(!J()&&s.data("autoplay")==true||z){s.data("timerplay",setTimeout(function(){n.target.playVideo()},s.data("start")))}s.find(".tp-thumb-image").click(function(){punchgs.TweenLite.to(e(this),.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut});if(!J()){u.playVideo()}})}}})}n.addClass("HasListener");h.data("player",u);clearInterval(a)},100)}catch(f){}}else{if(!i){var u=h.data("player");if(h.data("forcerewind")=="on"&&!J())u.seekTo(0);if(!J()&&h.data("autoplay")==true||z){h.data("timerplay",setTimeout(function(){u.playVideo()},h.data("start")))}}}}else if(n.attr("src").toLowerCase().indexOf("vimeo")>=0){if(!n.hasClass("HasListener")){n.addClass("HasListener");n.attr("id",y);var l=n.attr("src");var c={},p=l,d=/([^&=]+)=([^&]*)/g,v;while(v=d.exec(p)){c[decodeURIComponent(v[1])]=decodeURIComponent(v[2])}if(c["player_id"]!=t)l=l.replace(c["player_id"],y);else l=l+"&player_id="+y;try{l=l.replace("api=0","api=1")}catch(f){}l=l+"&api=1";n.attr("src",l);var u=h.find("iframe")[0];var m=setInterval(function(){if($f!=t){if(typeof $f(y).api!=t&&typeof $f(y).api!="undefined"){$f(u).addEvent("ready",function(){_(y,z)});clearInterval(m)}}},100)}else{if(!i){if(!J()&&(h.data("autoplay")==true||h.data("forcerewind")=="on")){var n=h.find("iframe");var g=n.attr("id");var b=$f(g);if(h.data("forcerewind")=="on")b.api("seekTo",0);h.data("timerplay",setTimeout(function(){if(h.data("autoplay")==true)b.api("play")},h.data("start")))}}}}});if(J()&&h.data("disablevideoonmobile")==1||a(8))h.find("video").remove();if(h.find("video").length>0){h.find("video").each(function(n){var i=this,s=e(this);if(!s.parent().hasClass("html5vid"))s.wrap('
      ');var o=s.parent();M(i,"loadedmetadata",function(e){e.data("metaloaded",1)}(o));clearInterval(o.data("interval"));o.data("interval",setInterval(function(){if(o.data("metaloaded")==1||i.duration!=NaN){clearInterval(o.data("interval"));if(!o.hasClass("HasListener")){o.addClass("HasListener");if(h.data("dottedoverlay")!="none"&&h.data("dottedoverlay")!=t)if(h.find(".tp-dottedoverlay").length!=1)o.append('
      ');if(s.attr("control")==t){if(o.find(".tp-video-play-button").length==0)o.append('
      ');o.find("video, .tp-poster, .tp-video-play-button").click(function(){if(o.hasClass("videoisplaying"))i.pause();else i.play()})}if(h.data("forcecover")==1||h.hasClass("fullscreenvideo")){if(h.data("forcecover")==1){D(o,r.container);o.addClass("fullcoveredvideo");h.addClass("fullcoveredvideo")}o.css({width:"100%",height:"100%"})}var e=h.find(".tp-vid-play-pause")[0],n=h.find(".tp-vid-mute")[0],u=h.find(".tp-vid-full-screen")[0],a=h.find(".tp-seek-bar")[0],f=h.find(".tp-volume-bar")[0];if(e!=t){M(e,"click",function(){if(i.paused==true)i.play();else i.pause()});M(n,"click",function(){if(i.muted==false){i.muted=true;n.innerHTML="Unmute"}else{i.muted=false;n.innerHTML="Mute"}});M(u,"click",function(){if(i.requestFullscreen){i.requestFullscreen()}else if(i.mozRequestFullScreen){i.mozRequestFullScreen()}else if(i.webkitRequestFullscreen){i.webkitRequestFullscreen()}});M(a,"change",function(){var e=i.duration*(a.value/100);i.currentTime=e});M(i,"timeupdate",function(){var e=100/i.duration*i.currentTime;a.value=e});M(a,"mousedown",function(){i.pause()});M(a,"mouseup",function(){i.play()});M(f,"change",function(){i.volume=f.value})}M(i,"play",function(){if(h.data("volume")=="mute")i.muted=true;o.addClass("videoisplaying");if(h.data("videoloop")=="loopandnoslidestop"){r.videoplaying=false;r.container.trigger("starttimer");r.container.trigger("revolution.slide.onvideostop")}else{r.videoplaying=true;r.container.trigger("stoptimer");r.container.trigger("revolution.slide.onvideoplay")}var e=h.find(".tp-vid-play-pause")[0],n=h.find(".tp-vid-mute")[0];if(e!=t)e.innerHTML="Pause";if(n!=t&&i.muted)n.innerHTML="Unmute"});M(i,"pause",function(){o.removeClass("videoisplaying");r.videoplaying=false;r.container.trigger("starttimer");r.container.trigger("revolution.slide.onvideostop");var e=h.find(".tp-vid-play-pause")[0];if(e!=t)e.innerHTML="Play"});M(i,"ended",function(){o.removeClass("videoisplaying");r.videoplaying=false;r.container.trigger("starttimer");r.container.trigger("revolution.slide.onvideostop");if(r.nextslideatend==true)r.container.revnext()})}var l=false;if(h.data("autoplayonlyfirsttime")==true||h.data("autoplayonlyfirsttime")=="true")l=true;var c=16/9;if(h.data("aspectratio")=="4:3")c=4/3;o.data("mediaAspect",c);if(o.closest(".tp-caption").data("forcecover")==1){D(o,r.container);o.addClass("fullcoveredvideo")}s.css({display:"block"});r.nextslideatend=h.data("nextslideatend");if(h.data("autoplay")==true||l==true){if(h.data("videoloop")=="loopandnoslidestop"){r.videoplaying=false;r.container.trigger("starttimer");r.container.trigger("revolution.slide.onvideostop")}else{r.videoplaying=true;r.container.trigger("stoptimer");r.container.trigger("revolution.slide.onvideoplay")}if(h.data("forcerewind")=="on"&&!o.hasClass("videoisplaying"))if(i.currentTime>0)i.currentTime=0;if(h.data("volume")=="mute")i.muted=true;o.data("timerplay",setTimeout(function(){if(h.data("forcerewind")=="on"&&!o.hasClass("videoisplaying"))if(i.currentTime>0)i.currentTime=0;if(h.data("volume")=="mute")i.muted=true;i.play()},10+h.data("start")))}if(o.data("ww")==t)o.data("ww",s.attr("width"));if(o.data("hh")==t)o.data("hh",s.attr("height"));if(!h.hasClass("fullscreenvideo")&&h.data("forcecover")==1){try{o.width(o.data("ww")*r.bw);o.height(o.data("hh")*r.bh)}catch(p){}}clearInterval(o.data("interval"))}}),100)})}if(h.data("autoplay")==true){setTimeout(function(){if(h.data("videoloop")!="loopandnoslidestop"){r.videoplaying=true;r.container.trigger("stoptimer")}},200);if(h.data("videoloop")!="loopandnoslidestop"){r.videoplaying=true;r.container.trigger("stoptimer")}if(h.data("autoplayonlyfirsttime")==true||h.data("autoplayonlyfirsttime")=="true"){h.data("autoplay",false);h.data("autoplayonlyfirsttime",false)}}}var V=0;var $=0;if(h.find("img").length>0){var K=h.find("img");if(K.width()==0)K.css({width:"auto"});if(K.height()==0)K.css({height:"auto"});if(K.data("ww")==t&&K.width()>0)K.data("ww",K.width());if(K.data("hh")==t&&K.height()>0)K.data("hh",K.height());var Q=K.data("ww");var G=K.data("hh");if(Q==t)Q=0;if(G==t)G=0;K.width(Q*r.bw);K.height(G*r.bh);V=K.width();$=K.height()}else{if(h.find("iframe").length>0||h.find("video").length>0){var Y=false,K=h.find("iframe");if(K.length==0){K=h.find("video");Y=true}K.css({display:"block"});if(h.data("ww")==t)h.data("ww",K.width());if(h.data("hh")==t)h.data("hh",K.height());var Q=h.data("ww"),G=h.data("hh");var Z=h;if(Z.data("fsize")==t)Z.data("fsize",parseInt(Z.css("font-size"),0)||0);if(Z.data("pt")==t)Z.data("pt",parseInt(Z.css("paddingTop"),0)||0);if(Z.data("pb")==t)Z.data("pb",parseInt(Z.css("paddingBottom"),0)||0);if(Z.data("pl")==t)Z.data("pl",parseInt(Z.css("paddingLeft"),0)||0);if(Z.data("pr")==t)Z.data("pr",parseInt(Z.css("paddingRight"),0)||0);if(Z.data("mt")==t)Z.data("mt",parseInt(Z.css("marginTop"),0)||0);if(Z.data("mb")==t)Z.data("mb",parseInt(Z.css("marginBottom"),0)||0);if(Z.data("ml")==t)Z.data("ml",parseInt(Z.css("marginLeft"),0)||0);if(Z.data("mr")==t)Z.data("mr",parseInt(Z.css("marginRight"),0)||0);if(Z.data("bt")==t)Z.data("bt",parseInt(Z.css("borderTop"),0)||0);if(Z.data("bb")==t)Z.data("bb",parseInt(Z.css("borderBottom"),0)||0);if(Z.data("bl")==t)Z.data("bl",parseInt(Z.css("borderLeft"),0)||0);if(Z.data("br")==t)Z.data("br",parseInt(Z.css("borderRight"),0)||0);if(Z.data("lh")==t)Z.data("lh",parseInt(Z.css("lineHeight"),0)||0);if(Z.data("lh")=="auto")Z.data("lh",Z.data("fsize")+4);var et=r.width,tt=r.height;if(et>r.startwidth)et=r.startwidth;if(tt>r.startheight)tt=r.startheight;if(!h.hasClass("fullscreenvideo"))h.css({"font-size":Z.data("fsize")*r.bw+"px","padding-top":Z.data("pt")*r.bh+"px","padding-bottom":Z.data("pb")*r.bh+"px","padding-left":Z.data("pl")*r.bw+"px","padding-right":Z.data("pr")*r.bw+"px","margin-top":Z.data("mt")*r.bh+"px","margin-bottom":Z.data("mb")*r.bh+"px","margin-left":Z.data("ml")*r.bw+"px","margin-right":Z.data("mr")*r.bw+"px","border-top":Z.data("bt")*r.bh+"px","border-bottom":Z.data("bb")*r.bh+"px","border-left":Z.data("bl")*r.bw+"px","border-right":Z.data("br")*r.bw+"px","line-height":Z.data("lh")*r.bh+"px",height:G*r.bh+"px"});else{l=0;c=0;h.data("x",0);h.data("y",0);var nt=r.height;if(r.autoHeight=="on")nt=r.container.height();h.css({width:r.width,height:nt})}if(Y==false){K.width(Q*r.bw);K.height(G*r.bh)}else if(h.data("forcecover")!=1&&!h.hasClass("fullscreenvideo")){K.width(Q*r.bw);K.height(G*r.bh)}V=K.width();$=K.height()}else{h.find(".tp-resizeme, .tp-resizeme *").each(function(){q(e(this),r)});if(h.hasClass("tp-resizeme")){h.find("*").each(function(){q(e(this),r)})}q(h,r);$=h.outerHeight(true);V=h.outerWidth(true);var rt=h.outerHeight();var it=h.css("backgroundColor");h.find(".frontcorner").css({borderWidth:rt+"px",left:0-rt+"px",borderRight:"0px solid transparent",borderTopColor:it});h.find(".frontcornertop").css({borderWidth:rt+"px",left:0-rt+"px",borderRight:"0px solid transparent",borderBottomColor:it});h.find(".backcorner").css({borderWidth:rt+"px",right:0-rt+"px",borderLeft:"0px solid transparent",borderBottomColor:it});h.find(".backcornertop").css({borderWidth:rt+"px",right:0-rt+"px",borderLeft:"0px solid transparent",borderTopColor:it})}}if(r.fullScreenAlignForce=="on"){l=0;c=0}if(h.data("voffset")==t)h.data("voffset",0);if(h.data("hoffset")==t)h.data("hoffset",0);var st=h.data("voffset")*v;var ot=h.data("hoffset")*v;var ut=r.startwidth*v;var at=r.startheight*v;if(r.fullScreenAlignForce=="on"){ut=r.container.width();at=r.container.height()}if(h.data("x")=="center"||h.data("xcenter")=="center"){h.data("xcenter","center");h.data("x",ut/2-h.outerWidth(true)/2+ot)}if(h.data("x")=="left"||h.data("xleft")=="left"){h.data("xleft","left");h.data("x",0/v+ot)}if(h.data("x")=="right"||h.data("xright")=="right"){h.data("xright","right");h.data("x",(ut-h.outerWidth(true)+ot)/v)}if(h.data("y")=="center"||h.data("ycenter")=="center"){h.data("ycenter","center");h.data("y",at/2-h.outerHeight(true)/2+st)}if(h.data("y")=="top"||h.data("ytop")=="top"){h.data("ytop","top");h.data("y",0/r.bh+st)}if(h.data("y")=="bottom"||h.data("ybottom")=="bottom"){h.data("ybottom","bottom");h.data("y",(at-h.outerHeight(true)+st)/v)}if(h.data("start")==t)h.data("start",1e3);var ft=h.data("easing");if(ft==t)ft="punchgs.Power1.easeOut";var lt=h.data("start")/1e3,ct=h.data("speed")/1e3;if(h.data("x")=="center"||h.data("xcenter")=="center")var ht=h.data("x")+l;else{var ht=v*h.data("x")+l}if(h.data("y")=="center"||h.data("ycenter")=="center")var pt=h.data("y")+c;else{var pt=r.bh*h.data("y")+c}punchgs.TweenLite.set(h,{top:pt,left:ht,overwrite:"auto"});if(f==0)s=true;if(h.data("timeline")!=t&&!s){if(f!=2)h.data("timeline").gotoAndPlay(0);s=true}if(!s){if(h.data("timeline")!=t){}var dt=new punchgs.TimelineLite({smoothChildTiming:true,onStart:u});dt.pause();if(r.fullScreenAlignForce=="on"){}var vt=h;if(h.data("mySplitText")!=t)h.data("mySplitText").revert();if(h.data("splitin")=="chars"||h.data("splitin")=="words"||h.data("splitin")=="lines"||h.data("splitout")=="chars"||h.data("splitout")=="words"||h.data("splitout")=="lines"){if(h.find("a").length>0)h.data("mySplitText",new punchgs.SplitText(h.find("a"),{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"}));else if(h.find(".tp-layer-inner-rotation").length>0)h.data("mySplitText",new punchgs.SplitText(h.find(".tp-layer-inner-rotation"),{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"}));else h.data("mySplitText",new punchgs.SplitText(h,{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"}));h.addClass("splitted")}if(h.data("splitin")=="chars")vt=h.data("mySplitText").chars;if(h.data("splitin")=="words")vt=h.data("mySplitText").words;if(h.data("splitin")=="lines")vt=h.data("mySplitText").lines;var mt=P();var gt=P();if(h.data("repeat")!=t)repeatV=h.data("repeat");if(h.data("yoyo")!=t)yoyoV=h.data("yoyo");if(h.data("repeatdelay")!=t)repeatdelayV=h.data("repeatdelay");var yt=h.attr("class");if(yt.match("customin"))mt=H(mt,h.data("customin"));else if(yt.match("randomrotate")){mt.scale=Math.random()*3+1;mt.rotation=Math.round(Math.random()*200-100);mt.x=Math.round(Math.random()*200-100);mt.y=Math.round(Math.random()*200-100)}else if(yt.match("lfr")||yt.match("skewfromright"))mt.x=15+r.width;else if(yt.match("lfl")||yt.match("skewfromleft"))mt.x=-15-V;else if(yt.match("sfl")||yt.match("skewfromleftshort"))mt.x=-50;else if(yt.match("sfr")||yt.match("skewfromrightshort"))mt.x=50;else if(yt.match("lft"))mt.y=-25-$;else if(yt.match("lfb"))mt.y=25+r.height;else if(yt.match("sft"))mt.y=-50;else if(yt.match("sfb"))mt.y=50;if(yt.match("skewfromright")||h.hasClass("skewfromrightshort"))mt.skewX=-85;else if(yt.match("skewfromleft")||h.hasClass("skewfromleftshort"))mt.skewX=85;if(yt.match("fade")||yt.match("sft")||yt.match("sfl")||yt.match("sfb")||yt.match("skewfromleftshort")||yt.match("sfr")||yt.match("skewfromrightshort"))mt.opacity=0;if(F().toLowerCase()=="safari"){}var bt=h.data("elementdelay")==t?0:h.data("elementdelay");gt.ease=mt.ease=h.data("easing")==t?punchgs.Power1.easeInOut:h.data("easing");mt.data=new Object;mt.data.oldx=mt.x;mt.data.oldy=mt.y;gt.data=new Object;gt.data.oldx=gt.x;gt.data.oldy=gt.y;mt.x=mt.x*v;mt.y=mt.y*v;var wt=new punchgs.TimelineLite;if(f!=2){if(yt.match("customin")){if(vt!=h)dt.add(punchgs.TweenLite.set(h,{force3D:"auto",opacity:1,scaleX:1,scaleY:1,rotationX:0,rotationY:0,rotationZ:0,skewX:0,skewY:0,z:0,x:0,y:0,visibility:"visible",delay:0,overwrite:"all"}));mt.visibility="hidden";gt.visibility="visible";gt.overwrite="all";gt.opacity=1;gt.onComplete=o();gt.delay=lt;gt.force3D="auto";dt.add(wt.staggerFromTo(vt,ct,mt,gt,bt),"frame0")}else{mt.visibility="visible";mt.transformPerspective=600;if(vt!=h)dt.add(punchgs.TweenLite.set(h,{force3D:"auto",opacity:1,scaleX:1,scaleY:1,rotationX:0,rotationY:0,rotationZ:0,skewX:0,skewY:0,z:0,x:0,y:0,visibility:"visible",delay:0,overwrite:"all"}));gt.visibility="visible";gt.delay=lt;gt.onComplete=o();gt.opacity=1;gt.force3D="auto";if(yt.match("randomrotate")&&vt!=h){for(var n=0;n0){var n=B(t);W(h,r,n,"frame"+(e+10),v)}})}dt=h.data("timeline");if(h.data("end")!=t&&(f==-1||f==2)){X(h,r,h.data("end")/1e3,mt,"frame99",v)}else{if(f==-1||f==2)X(h,r,999999,mt,"frame99",v);else X(h,r,200,mt,"frame99",v)}dt=h.data("timeline");h.data("timeline",dt);R(h,v);dt.resume()}}if(s){U(h);R(h,v);if(h.data("timeline")!=t){var Ct=h.data("timeline").getTweensOf();e.each(Ct,function(e,n){if(n.vars.data!=t){var r=n.vars.data.oldx*v;var i=n.vars.data.oldy*v;if(n.progress()!=1&&n.progress()!=0){try{n.vars.x=r;n.vary.y=i}catch(s){}}else{if(n.progress()==1){punchgs.TweenLite.set(n.target,{x:r,y:i})}}}})}}});var d=e("body").find("#"+r.container.attr("id")).find(".tp-bannertimer");d.data("opt",r);if(s!=t)setTimeout(function(){s.resume()},30)};var F=function(){var e=navigator.appName,t=navigator.userAgent,n;var r=t.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);if(r&&(n=t.match(/version\/([\.\d]+)/i))!=null)r[2]=n[1];r=r?[r[1],r[2]]:[e,navigator.appVersion,"-?"];return r[0]};var I=function(){var e=navigator.appName,t=navigator.userAgent,n;var r=t.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);if(r&&(n=t.match(/version\/([\.\d]+)/i))!=null)r[2]=n[1];r=r?[r[1],r[2]]:[e,navigator.appVersion,"-?"];return r[1]};var q=function(e,n){if(e.data("fsize")==t)e.data("fsize",parseInt(e.css("font-size"),0)||0);if(e.data("pt")==t)e.data("pt",parseInt(e.css("paddingTop"),0)||0);if(e.data("pb")==t)e.data("pb",parseInt(e.css("paddingBottom"),0)||0);if(e.data("pl")==t)e.data("pl",parseInt(e.css("paddingLeft"),0)||0);if(e.data("pr")==t)e.data("pr",parseInt(e.css("paddingRight"),0)||0);if(e.data("mt")==t)e.data("mt",parseInt(e.css("marginTop"),0)||0);if(e.data("mb")==t)e.data("mb",parseInt(e.css("marginBottom"),0)||0);if(e.data("ml")==t)e.data("ml",parseInt(e.css("marginLeft"),0)||0);if(e.data("mr")==t)e.data("mr",parseInt(e.css("marginRight"),0)||0);if(e.data("bt")==t)e.data("bt",parseInt(e.css("borderTopWidth"),0)||0);if(e.data("bb")==t)e.data("bb",parseInt(e.css("borderBottomWidth"),0)||0);if(e.data("bl")==t)e.data("bl",parseInt(e.css("borderLeftWidth"),0)||0);if(e.data("br")==t)e.data("br",parseInt(e.css("borderRightWidth"),0)||0);if(e.data("ls")==t)e.data("ls",parseInt(e.css("letterSpacing"),0)||0);if(e.data("lh")==t)e.data("lh",parseInt(e.css("lineHeight"),0)||"auto");if(e.data("minwidth")==t)e.data("minwidth",parseInt(e.css("minWidth"),0)||0);if(e.data("minheight")==t)e.data("minheight",parseInt(e.css("minHeight"),0)||0);if(e.data("maxwidth")==t)e.data("maxwidth",parseInt(e.css("maxWidth"),0)||"none");if(e.data("maxheight")==t)e.data("maxheight",parseInt(e.css("maxHeight"),0)||"none");if(e.data("wii")==t)e.data("wii",parseInt(e.css("width"),0)||0);if(e.data("hii")==t)e.data("hii",parseInt(e.css("height"),0)||0);if(e.data("wan")==t)e.data("wan",e.css("-webkit-transition"));if(e.data("moan")==t)e.data("moan",e.css("-moz-animation-transition"));if(e.data("man")==t)e.data("man",e.css("-ms-animation-transition"));if(e.data("ani")==t)e.data("ani",e.css("transition"));if(e.data("lh")=="auto")e.data("lh",e.data("fsize")+4);if(!e.hasClass("tp-splitted")){e.css("-webkit-transition","none");e.css("-moz-transition","none");e.css("-ms-transition","none");e.css("transition","none");punchgs.TweenLite.set(e,{fontSize:Math.round(e.data("fsize")*n.bw)+"px",letterSpacing:Math.floor(e.data("ls")*n.bw)+"px",paddingTop:Math.round(e.data("pt")*n.bh)+"px",paddingBottom:Math.round(e.data("pb")*n.bh)+"px",paddingLeft:Math.round(e.data("pl")*n.bw)+"px",paddingRight:Math.round(e.data("pr")*n.bw)+"px",marginTop:e.data("mt")*n.bh+"px",marginBottom:e.data("mb")*n.bh+"px",marginLeft:e.data("ml")*n.bw+"px",marginRight:e.data("mr")*n.bw+"px",borderTopWidth:Math.round(e.data("bt")*n.bh)+"px",borderBottomWidth:Math.round(e.data("bb")*n.bh)+"px",borderLeftWidth:Math.round(e.data("bl")*n.bw)+"px",borderRightWidth:Math.round(e.data("br")*n.bw)+"px",lineHeight:Math.round(e.data("lh")*n.bh)+"px",minWidth:e.data("minwidth")*n.bw+"px",minHeight:e.data("minheight")*n.bh+"px",overwrite:"auto"});setTimeout(function(){e.css("-webkit-transition",e.data("wan"));e.css("-moz-transition",e.data("moan"));e.css("-ms-transition",e.data("man"));e.css("transition",e.data("ani"))},30);if(e.data("maxheight")!="none")e.css({maxHeight:e.data("maxheight")*n.bh+"px"});if(e.data("maxwidth")!="none")e.css({maxWidth:e.data("maxwidth")*n.bw+"px"})}};var R=function(n,r){n.find(".rs-pendulum").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var i=n.data("startdeg")==t?-20:n.data("startdeg"),s=n.data("enddeg")==t?20:n.data("enddeg"),o=n.data("speed")==t?2:n.data("speed"),u=n.data("origin")==t?"50% 50%":n.data("origin"),a=n.data("easing")==t?punchgs.Power2.easeInOut:n.data("ease");i=i*r;s=s*r;n.data("timeline").append(new punchgs.TweenLite.fromTo(n,o,{force3D:"auto",rotation:i,transformOrigin:u},{rotation:s,ease:a}));n.data("timeline").append(new punchgs.TweenLite.fromTo(n,o,{force3D:"auto",rotation:s,transformOrigin:u},{rotation:i,ease:a,onComplete:function(){n.data("timeline").restart()}}))}});n.find(".rs-rotate").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var i=n.data("startdeg")==t?0:n.data("startdeg"),s=n.data("enddeg")==t?360:n.data("enddeg");speed=n.data("speed")==t?2:n.data("speed"),origin=n.data("origin")==t?"50% 50%":n.data("origin"),easing=n.data("easing")==t?punchgs.Power2.easeInOut:n.data("easing");i=i*r;s=s*r;n.data("timeline").append(new punchgs.TweenLite.fromTo(n,speed,{force3D:"auto",rotation:i,transformOrigin:origin},{rotation:s,ease:easing,onComplete:function(){n.data("timeline").restart()}}))}});n.find(".rs-slideloop").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var i=n.data("xs")==t?0:n.data("xs"),s=n.data("ys")==t?0:n.data("ys"),o=n.data("xe")==t?0:n.data("xe"),u=n.data("ye")==t?0:n.data("ye"),a=n.data("speed")==t?2:n.data("speed"),f=n.data("easing")==t?punchgs.Power2.easeInOut:n.data("easing");i=i*r;s=s*r;o=o*r;u=u*r;n.data("timeline").append(new punchgs.TweenLite.fromTo(n,a,{force3D:"auto",x:i,y:s},{x:o,y:u,ease:f}));n.data("timeline").append(new punchgs.TweenLite.fromTo(n,a,{force3D:"auto",x:o,y:u},{x:i,y:s,onComplete:function(){n.data("timeline").restart()}}))}});n.find(".rs-pulse").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var r=n.data("zoomstart")==t?0:n.data("zoomstart"),i=n.data("zoomend")==t?0:n.data("zoomend"),s=n.data("speed")==t?2:n.data("speed"),o=n.data("easing")==t?punchgs.Power2.easeInOut:n.data("easing");n.data("timeline").append(new punchgs.TweenLite.fromTo(n,s,{force3D:"auto",scale:r},{scale:i,ease:o}));n.data("timeline").append(new punchgs.TweenLite.fromTo(n,s,{force3D:"auto",scale:i},{scale:r,onComplete:function(){n.data("timeline").restart()}}))}});n.find(".rs-wave").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var i=n.data("angle")==t?10:n.data("angle"),s=n.data("radius")==t?10:n.data("radius"),o=n.data("speed")==t?-20:n.data("speed"),u=n.data("origin")==t?-20:n.data("origin");i=i*r;s=s*r;var a={a:0,ang:i,element:n,unit:s};n.data("timeline").append(new punchgs.TweenLite.fromTo(a,o,{a:360},{a:0,force3D:"auto",ease:punchgs.Linear.easeNone,onUpdate:function(){var e=a.a*(Math.PI/180);punchgs.TweenLite.to(a.element,.1,{force3D:"auto",x:Math.cos(e)*a.unit,y:a.unit*(1-Math.sin(e))})},onComplete:function(){n.data("timeline").restart()}}))}})};var U=function(n){n.find(".rs-pendulum, .rs-slideloop, .rs-pulse, .rs-wave").each(function(){var n=e(this);if(n.data("timeline")!=t){n.data("timeline").pause();n.data("timeline",null)}})};var z=function(n,r){var i=0;var s=n.find(".tp-caption"),o=r.container.find(".tp-static-layers").find(".tp-caption");e.each(o,function(e,t){s.push(t)});s.each(function(n){var s=-1;var o=e(this);if(o.hasClass("tp-static-layer")){if(o.data("startslide")==-1||o.data("startslide")=="-1")o.data("startslide",0);if(o.data("endslide")==-1||o.data("endslide")=="-1")o.data("endslide",r.slideamount);if(o.hasClass("tp-is-shown")){if(o.data("startslide")>r.next||o.data("endslide")0){punchgs.TweenLite.to(o.find("iframe"),.2,{autoAlpha:0});if(J())o.find("iframe").remove();try{var u=o.find("iframe");var a=u.attr("id");var f=$f(a);f.api("pause");clearTimeout(o.data("timerplay"))}catch(l){}try{var c=o.data("player");c.stopVideo();clearTimeout(o.data("timerplay"))}catch(l){}}if(o.find("video").length>0){try{o.find("video").each(function(t){var n=e(this).parent();var r=n.attr("id");clearTimeout(n.data("timerplay"));var i=this;i.pause()})}catch(l){}}try{var h=o.data("timeline");var p=h.getLabelTime("frame99");var d=h.time();if(p>d){var v=h.getTweensOf(o);e.each(v,function(e,t){if(e!=0)t.pause()});if(o.css("opacity")!=0){var m=o.data("endspeed")==t?o.data("speed"):o.data("endspeed");if(m>i)i=m;h.play("frame99")}else h.progress(1,false)}}catch(l){}}});return i};var W=function(e,n,r,i,s){var o=e.data("timeline");var u=new punchgs.TimelineLite;var a=e;if(r.typ=="chars")a=e.data("mySplitText").chars;else if(r.typ=="words")a=e.data("mySplitText").words;else if(r.typ=="lines")a=e.data("mySplitText").lines;r.animation.ease=r.ease;if(r.animation.rotationZ!=t)r.animation.rotation=r.animation.rotationZ;r.animation.data=new Object;r.animation.data.oldx=r.animation.x;r.animation.data.oldy=r.animation.y;r.animation.x=r.animation.x*s;r.animation.y=r.animation.y*s;o.add(u.staggerTo(a,r.speed,r.animation,r.elementdelay),r.start);o.addLabel(i,r.start);e.data("timeline",o)};var X=function(e,n,r,i,s,o){var u=e.data("timeline"),a=new punchgs.TimelineLite;var f=P(),l=e.data("endspeed")==t?e.data("speed"):e.data("endspeed"),c=e.attr("class");f.ease=e.data("endeasing")==t?punchgs.Power1.easeInOut:e.data("endeasing");l=l/1e3;if(c.match("ltr")||c.match("ltl")||c.match("str")||c.match("stl")||c.match("ltt")||c.match("ltb")||c.match("stt")||c.match("stb")||c.match("skewtoright")||c.match("skewtorightshort")||c.match("skewtoleft")||c.match("skewtoleftshort")||c.match("fadeout")||c.match("randomrotateout")){if(c.match("skewtoright")||c.match("skewtorightshort"))f.skewX=35;else if(c.match("skewtoleft")||c.match("skewtoleftshort"))f.skewX=-35;if(c.match("ltr")||c.match("skewtoright"))f.x=n.width+60;else if(c.match("ltl")||c.match("skewtoleft"))f.x=0-(n.width+60);else if(c.match("ltt"))f.y=0-(n.height+60);else if(c.match("ltb"))f.y=n.height+60;else if(c.match("str")||c.match("skewtorightshort")){f.x=50;f.opacity=0}else if(c.match("stl")||c.match("skewtoleftshort")){f.x=-50;f.opacity=0}else if(c.match("stt")){f.y=-50;f.opacity=0}else if(c.match("stb")){f.y=50;f.opacity=0}else if(c.match("randomrotateout")){f.x=Math.random()*n.width;f.y=Math.random()*n.height;f.scale=Math.random()*2+.3;f.rotation=Math.random()*360-180;f.opacity=0}else if(c.match("fadeout")){f.opacity=0}if(c.match("skewtorightshort"))f.x=270;else if(c.match("skewtoleftshort"))f.x=-270;f.data=new Object;f.data.oldx=f.x;f.data.oldy=f.y;f.x=f.x*o;f.y=f.y*o;f.overwrite="auto";var h=e;var h=e;if(e.data("splitout")=="chars")h=e.data("mySplitText").chars;else if(e.data("splitout")=="words")h=e.data("mySplitText").words;else if(e.data("splitout")=="lines")h=e.data("mySplitText").lines;var p=e.data("endelementdelay")==t?0:e.data("endelementdelay");u.add(a.staggerTo(h,l,f,p),r)}else if(e.hasClass("customout")){f=H(f,e.data("customout"));var h=e;if(e.data("splitout")=="chars")h=e.data("mySplitText").chars;else if(e.data("splitout")=="words")h=e.data("mySplitText").words;else if(e.data("splitout")=="lines")h=e.data("mySplitText").lines;var p=e.data("endelementdelay")==t?0:e.data("endelementdelay");f.onStart=function(){punchgs.TweenLite.set(e,{transformPerspective:f.transformPerspective,transformOrigin:f.transformOrigin,overwrite:"auto"})};f.data=new Object;f.data.oldx=f.x;f.data.oldy=f.y;f.x=f.x*o;f.y=f.y*o;u.add(a.staggerTo(h,l,f,p),r)}else{i.delay=0;u.add(punchgs.TweenLite.to(e,l,i),r)}u.addLabel(s,r);e.data("timeline",u)};var V=function(t,n){t.children().each(function(){try{e(this).die("click")}catch(t){}try{e(this).die("mouseenter")}catch(t){}try{e(this).die("mouseleave")}catch(t){}try{e(this).unbind("hover")}catch(t){}});try{t.die("click","mouseenter","mouseleave")}catch(r){}clearInterval(n.cdint);t=null};var $=function(n,r){r.cd=0;r.loop=0;if(r.stopAfterLoops!=t&&r.stopAfterLoops>-1)r.looptogo=r.stopAfterLoops;else r.looptogo=9999999;if(r.stopAtSlide!=t&&r.stopAtSlide>-1)r.lastslidetoshow=r.stopAtSlide;else r.lastslidetoshow=999;r.stopLoop="off";if(r.looptogo==0)r.stopLoop="on";if(r.slideamount>1&&!(r.stopAfterLoops==0&&r.stopAtSlide==1)){var i=n.find(".tp-bannertimer");n.on("stoptimer",function(){var t=e(this).find(".tp-bannertimer");t.data("tween").pause();if(r.hideTimerBar=="on")t.css({visibility:"hidden"})});n.on("starttimer",function(){if(r.conthover!=1&&r.videoplaying!=true&&r.width>r.hideSliderAtLimit&&r.bannertimeronpause!=true&&r.overnav!=true)if(r.stopLoop=="on"&&r.next==r.lastslidetoshow-1||r.noloopanymore==1)r.noloopanymore=1;else{i.css({visibility:"visible"});i.data("tween").resume()}if(r.hideTimerBar=="on")i.css({visibility:"hidden"})});n.on("restarttimer",function(){var t=e(this).find(".tp-bannertimer");if(r.stopLoop=="on"&&r.next==r.lastslidetoshow-1||r.noloopanymore==1)r.noloopanymore=1;else{t.css({visibility:"visible"});t.data("tween").kill();t.data("tween",punchgs.TweenLite.fromTo(t,r.delay/1e3,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:s,delay:1}))}if(r.hideTimerBar=="on")t.css({visibility:"hidden"})});n.on("nulltimer",function(){i.data("tween").pause(0);if(r.hideTimerBar=="on")i.css({visibility:"hidden"})});var s=function(){if(e("body").find(n).length==0){V(n,r);clearInterval(r.cdint)}n.trigger("revolution.slide.slideatend");if(n.data("conthover-changed")==1){r.conthover=n.data("conthover");n.data("conthover-changed",0)}r.act=r.next;r.next=r.next+1;if(r.next>n.find(">ul >li").length-1){r.next=0;r.looptogo=r.looptogo-1;if(r.looptogo<=0){r.stopLoop="on"}}if(r.stopLoop=="on"&&r.next==r.lastslidetoshow-1){n.find(".tp-bannertimer").css({visibility:"hidden"});n.trigger("revolution.slide.onstop");r.noloopanymore=1}else{i.data("tween").restart()}N(n,r)};i.data("tween",punchgs.TweenLite.fromTo(i,r.delay/1e3,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:s,delay:1}));i.data("opt",r);n.hover(function(){if(r.onHoverStop=="on"&&!J()){n.trigger("stoptimer");n.trigger("revolution.slide.onpause");var i=n.find(">ul >li:eq("+r.next+") .slotholder");i.find(".defaultimg").each(function(){var n=e(this);if(n.data("kenburn")!=t){n.data("kenburn").pause()}})}},function(){if(n.data("conthover")!=1){n.trigger("revolution.slide.onresume");n.trigger("starttimer");var i=n.find(">ul >li:eq("+r.next+") .slotholder");i.find(".defaultimg").each(function(){var n=e(this);if(n.data("kenburn")!=t){n.data("kenburn").play()}})}})}};var J=function(){var e=["android","webos","iphone","ipad","blackberry","Android","webos",,"iPod","iPhone","iPad","Blackberry","BlackBerry"];var t=false;for(var n in e){if(navigator.userAgent.split(e[n]).length>1){t=true}}return t};var K=function(e,t,n){var r=t.data("owidth");var i=t.data("oheight");if(r/i>n.width/n.height){var s=n.container.width()/r;var o=i*s;var u=o/n.container.height()*e;e=e*(100/u);u=100;e=e;return e+"% "+u+"%"+" 1"}else{var s=n.container.width()/r;var o=i*s;var u=o/n.container.height()*e;return e+"% "+u+"%"}};var Q=function(n,r,i,s){try{var o=n.find(">ul:first-child >li:eq("+r.act+")")}catch(u){var o=n.find(">ul:first-child >li:eq(1)")}r.lastslide=r.act;var f=n.find(">ul:first-child >li:eq("+r.next+")"),l=f.find(".slotholder"),c=l.data("bgposition"),h=l.data("bgpositionend"),p=l.data("zoomstart")/100,d=l.data("zoomend")/100,v=l.data("rotationstart"),m=l.data("rotationend"),g=l.data("bgfit"),y=l.data("bgfitend"),b=l.data("easeme"),w=l.data("duration")/1e3,E=100;if(g==t)g=100;if(y==t)y=100;var S=g,x=y;g=K(g,l,r);y=K(y,l,r);E=K(100,l,r);if(p==t)p=1;if(d==t)d=1;if(v==t)v=0;if(m==t)m=0;if(p<1)p=1;if(d<1)d=1;var T=new Object;T.w=parseInt(E.split(" ")[0],0),T.h=parseInt(E.split(" ")[1],0);var N=false;if(E.split(" ")[2]=="1"){N=true}l.find(".defaultimg").each(function(){var t=e(this);if(l.find(".kenburnimg").length==0)l.append('
      ');else{l.find(".kenburnimg img").css({width:T.w+"%",height:T.h+"%"})}var n=l.find(".kenburnimg img");var i=G(r,c,g,n,N),o=G(r,h,y,n,N);if(N){i.w=S/100;o.w=x/100}if(s){punchgs.TweenLite.set(n,{autoAlpha:0,transformPerspective:1200,transformOrigin:"0% 0%",top:0,left:0,scale:i.w,x:i.x,y:i.y});var u=i.w,f=u*n.width()-r.width,p=u*n.height()-r.height,d=Math.abs(i.x/f*100),v=Math.abs(i.y/p*100);if(p==0)v=0;if(f==0)d=0;t.data("bgposition",d+"% "+v+"%");if(!a(8))t.data("currotate",Y(n));if(!a(8))t.data("curscale",T.w*u+"% "+(T.h*u+"%"));l.find(".kenburnimg").remove()}else t.data("kenburn",punchgs.TweenLite.fromTo(n,w,{autoAlpha:1,force3D:punchgs.force3d,transformOrigin:"0% 0%",top:0,left:0,scale:i.w,x:i.x,y:i.y},{autoAlpha:1,rotationZ:m,ease:b,x:o.x,y:o.y,scale:o.w,onUpdate:function(){var e=n[0]._gsTransform.scaleX;var i=e*n.width()-r.width,s=e*n.height()-r.height,o=Math.abs(n[0]._gsTransform.x/i*100),u=Math.abs(n[0]._gsTransform.y/s*100);if(s==0)u=0;if(i==0)o=0;t.data("bgposition",o+"% "+u+"%");if(!a(8))t.data("currotate",Y(n));if(!a(8))t.data("curscale",T.w*e+"% "+(T.h*e+"%"))}}))})};var G=function(e,t,n,r,i){var s=new Object;if(!i)s.w=parseInt(n.split(" ")[0],0)/100;else s.w=parseInt(n.split(" ")[1],0)/100;switch(t){case"left top":case"top left":s.x=0;s.y=0;break;case"center top":case"top center":s.x=((0-r.width())*s.w+parseInt(e.width,0))/2;s.y=0;break;case"top right":case"right top":s.x=(0-r.width())*s.w+parseInt(e.width,0);s.y=0;break;case"center left":case"left center":s.x=0;s.y=((0-r.height())*s.w+parseInt(e.height,0))/2;break;case"center center":s.x=((0-r.width())*s.w+parseInt(e.width,0))/2;s.y=((0-r.height())*s.w+parseInt(e.height,0))/2;break;case"center right":case"right center":s.x=(0-r.width())*s.w+parseInt(e.width,0);s.y=((0-r.height())*s.w+parseInt(e.height,0))/2;break;case"bottom left":case"left bottom":s.x=0;s.y=(0-r.height())*s.w+parseInt(e.height,0);break;case"bottom center":case"center bottom":s.x=((0-r.width())*s.w+parseInt(e.width,0))/2;s.y=(0-r.height())*s.w+parseInt(e.height,0);break;case"bottom right":case"right bottom":s.x=(0-r.width())*s.w+parseInt(e.width,0);s.y=(0-r.height())*s.w+parseInt(e.height,0);break}return s};var Y=function(e){var t=e.css("-webkit-transform")||e.css("-moz-transform")||e.css("-ms-transform")||e.css("-o-transform")||e.css("transform");if(t!=="none"){var n=t.split("(")[1].split(")")[0].split(",");var r=n[0];var i=n[1];var s=Math.round(Math.atan2(i,r)*(180/Math.PI))}else{var s=0}return s<0?s+=360:s};var Z=function(n,r){try{var i=n.find(">ul:first-child >li:eq("+r.act+")")}catch(s){var i=n.find(">ul:first-child >li:eq(1)")}r.lastslide=r.act;var o=n.find(">ul:first-child >li:eq("+r.next+")");var u=i.find(".slotholder");var a=o.find(".slotholder");n.find(".defaultimg").each(function(){var n=e(this);punchgs.TweenLite.killTweensOf(n,false);punchgs.TweenLite.set(n,{scale:1,rotationZ:0});punchgs.TweenLite.killTweensOf(n.data("kenburn img"),false);if(n.data("kenburn")!=t){n.data("kenburn").pause()}if(n.data("currotate")!=t&&n.data("bgposition")!=t&&n.data("curscale")!=t)punchgs.TweenLite.set(n,{rotation:n.data("currotate"),backgroundPosition:n.data("bgposition"),backgroundSize:n.data("curscale")});if(n!=t&&n.data("kenburn img")!=t&&n.data("kenburn img").length>0)punchgs.TweenLite.set(n.data("kenburn img"),{autoAlpha:0})})};var et=function(t,n){if(J()&&n.parallaxDisableOnMobile=="on")return false;t.find(">ul:first-child >li").each(function(){var t=e(this);for(var r=1;r<=10;r++)t.find(".rs-parallaxlevel-"+r).each(function(){var t=e(this);t.wrap('
      ')})});if(n.parallax=="mouse"||n.parallax=="scroll+mouse"||n.parallax=="mouse+scroll"){t.mouseenter(function(e){var n=t.find(".current-sr-slide-visible");var r=t.offset().top,i=t.offset().left,s=e.pageX-i,o=e.pageY-r;n.data("enterx",s);n.data("entery",o)});t.on("mousemove.hoverdir, mouseleave.hoverdir",function(r){var i=t.find(".current-sr-slide-visible");switch(r.type){case"mousemove":var s=t.offset().top,o=t.offset().left,u=i.data("enterx"),a=i.data("entery"),f=u-(r.pageX-o),l=a-(r.pageY-s);i.find(".tp-parallax-container").each(function(){var t=e(this),r=parseInt(t.data("parallaxlevel"),0)/100,i=f*r,s=l*r;if(n.parallax=="scroll+mouse"||n.parallax=="mouse+scroll")punchgs.TweenLite.to(t,.4,{force3D:"auto",x:i,ease:punchgs.Power3.easeOut,overwrite:"all"});else punchgs.TweenLite.to(t,.4,{force3D:"auto",x:i,y:s,ease:punchgs.Power3.easeOut,overwrite:"all"})});break;case"mouseleave":i.find(".tp-parallax-container").each(function(){var t=e(this);if(n.parallax=="scroll+mouse"||n.parallax=="mouse+scroll")punchgs.TweenLite.to(t,1.5,{force3D:"auto",x:0,ease:punchgs.Power3.easeOut});else punchgs.TweenLite.to(t,1.5,{force3D:"auto",x:0,y:0,ease:punchgs.Power3.easeOut})});break}});if(J())window.ondeviceorientation=function(n){var r=Math.round(n.beta||0),i=Math.round(n.gamma||0);var s=t.find(".current-sr-slide-visible");if(e(window).width()>e(window).height()){var o=i;i=r;r=o}var u=360/t.width()*i,a=180/t.height()*r;s.find(".tp-parallax-container").each(function(){var t=e(this),n=parseInt(t.data("parallaxlevel"),0)/100,r=u*n,i=a*n;punchgs.TweenLite.to(t,.2,{force3D:"auto",x:r,y:i,ease:punchgs.Power3.easeOut})})}}if(n.parallax=="scroll"||n.parallax=="scroll+mouse"||n.parallax=="mouse+scroll"){e(window).on("scroll",function(e){tt(t,n)})}};var tt=function(t,n){if(J()&&n.parallaxDisableOnMobile=="on")return false;var r=t.offset().top,i=e(window).scrollTop(),s=r+t.height()/2,o=r+t.height()/2-i,u=e(window).height()/2,a=u-o;if(s
')}var s=i.find(".tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer");var o=s.parent();o.width(r.thumbWidth*r.thumbAmount);o.height(r.thumbHeight);o.parent().width(r.thumbWidth*r.thumbAmount);o.parent().height(r.thumbHeight);n.find(">ul:first >li").each(function(e){var i=n.find(">ul:first >li:eq("+e+")");var o=i.find(".defaultimg").css("backgroundColor");if(i.data("thumb")!=t)var u=i.data("thumb");else var u=i.find("img:first").attr("src");s.append('
');var a=s.find(".bullet:first")});var u=10;s.find(".bullet").each(function(t){var i=e(this);if(t==r.slideamount-1)i.addClass("last");if(t==0)i.addClass("first");i.width(r.thumbWidth);i.height(r.thumbHeight);if(uul:first >li").length;var l=s.parent().width();r.thumbWidth=u;if(lul:first >li").length,a=u-s+15,f=a/s;t.addClass("over");i=i-30;var l=0-i*f;if(l>0)l=0;if(l<0-u+s)l=0-u+s;it(t,l,200)});s.parent().mousemove(function(){var t=e(this),r=t.offset(),i=e("body").data("mousex")-r.left,s=t.width(),o=t.find(".bullet:first").outerWidth(true),u=o*n.find(">ul:first >li").length-1,a=u-s+15,f=a/s;i=i-3;if(i<6)i=0;if(i+3>s-6)i=s;var l=0-i*f;if(l>0)l=0;if(l<0-u+s)l=0-u+s;it(t,l,0)});s.parent().mouseleave(function(){var t=e(this);t.removeClass("over");rt(n)})}};var rt=function(e){var t=e.parent().find(".tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer"),n=t.parent(),r=n.offset(),i=n.find(".bullet:first").outerWidth(true),s=n.find(".bullet.selected").index()*i,o=n.width(),i=n.find(".bullet:first").outerWidth(true),u=i*e.find(">ul:first >li").length,a=u-o,f=a/o,l=0-s;if(l>0)l=0;if(l<0-u+o)l=0-u+o;if(!n.hasClass("over")){it(n,l,200)}};var it=function(e,t,n){punchgs.TweenLite.to(e.find(".tp-thumbcontainer"),.2,{force3D:"auto",left:t,ease:punchgs.Power3.easeOut,overwrite:"auto"})}})(jQuery) \ No newline at end of file diff --git a/src/main/resources/static/lib/user/home/rs-plugin/js/jquery.themepunch.tools.min.js b/src/main/resources/static/lib/user/home/rs-plugin/js/jquery.themepunch.tools.min.js new file mode 100644 index 0000000..2b13a23 --- /dev/null +++ b/src/main/resources/static/lib/user/home/rs-plugin/js/jquery.themepunch.tools.min.js @@ -0,0 +1,142 @@ + + +/******************************************** + - THEMEPUNCH TOOLS Ver. 1.0 - + Last Update of Tools 17.11.2014 +*********************************************/ + + +/* +* @fileOverview TouchSwipe - jQuery Plugin +* @version 1.6.6 +* +* @author Matt Bryson http://www.github.com/mattbryson +* @see https://github.com/mattbryson/TouchSwipe-Jquery-Plugin +* @see http://labs.skinkers.com/touchSwipe/ +* @see http://plugins.jquery.com/project/touchSwipe +* +* Copyright (c) 2010 Matt Bryson +* Dual licensed under the MIT or GPL Version 2 licenses. +* +*/ +(function(a){if(typeof define==="function"&&define.amd&&define.amd.jQuery){define(["jquery"],a)}else{a(jQuery)}}(function(f){var p="left",o="right",e="up",x="down",c="in",z="out",m="none",s="auto",l="swipe",t="pinch",A="tap",j="doubletap",b="longtap",y="hold",D="horizontal",u="vertical",i="all",r=10,g="start",k="move",h="end",q="cancel",a="ontouchstart" in window,v=window.navigator.msPointerEnabled&&!window.navigator.pointerEnabled,d=window.navigator.pointerEnabled||window.navigator.msPointerEnabled,B="TouchSwipe";var n={fingers:1,threshold:75,cancelThreshold:null,pinchThreshold:20,maxTimeThreshold:null,fingerReleaseThreshold:250,longTapThreshold:500,doubleTapThreshold:200,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,pinchIn:null,pinchOut:null,pinchStatus:null,click:null,tap:null,doubleTap:null,longTap:null,hold:null,triggerOnTouchEnd:true,triggerOnTouchLeave:false,allowPageScroll:"auto",fallbackToMouseEvents:true,excludedElements:"label, button, input, select, textarea, a, .noSwipe"};f.fn.swipe=function(G){var F=f(this),E=F.data(B);if(E&&typeof G==="string"){if(E[G]){return E[G].apply(this,Array.prototype.slice.call(arguments,1))}else{f.error("Method "+G+" does not exist on jQuery.swipe")}}else{if(!E&&(typeof G==="object"||!G)){return w.apply(this,arguments)}}return F};f.fn.swipe.defaults=n;f.fn.swipe.phases={PHASE_START:g,PHASE_MOVE:k,PHASE_END:h,PHASE_CANCEL:q};f.fn.swipe.directions={LEFT:p,RIGHT:o,UP:e,DOWN:x,IN:c,OUT:z};f.fn.swipe.pageScroll={NONE:m,HORIZONTAL:D,VERTICAL:u,AUTO:s};f.fn.swipe.fingers={ONE:1,TWO:2,THREE:3,ALL:i};function w(E){if(E&&(E.allowPageScroll===undefined&&(E.swipe!==undefined||E.swipeStatus!==undefined))){E.allowPageScroll=m}if(E.click!==undefined&&E.tap===undefined){E.tap=E.click}if(!E){E={}}E=f.extend({},f.fn.swipe.defaults,E);return this.each(function(){var G=f(this);var F=G.data(B);if(!F){F=new C(this,E);G.data(B,F)}})}function C(a4,av){var az=(a||d||!av.fallbackToMouseEvents),J=az?(d?(v?"MSPointerDown":"pointerdown"):"touchstart"):"mousedown",ay=az?(d?(v?"MSPointerMove":"pointermove"):"touchmove"):"mousemove",U=az?(d?(v?"MSPointerUp":"pointerup"):"touchend"):"mouseup",S=az?null:"mouseleave",aD=(d?(v?"MSPointerCancel":"pointercancel"):"touchcancel");var ag=0,aP=null,ab=0,a1=0,aZ=0,G=1,aq=0,aJ=0,M=null;var aR=f(a4);var Z="start";var W=0;var aQ=null;var T=0,a2=0,a5=0,ad=0,N=0;var aW=null,af=null;try{aR.bind(J,aN);aR.bind(aD,a9)}catch(ak){f.error("events not supported "+J+","+aD+" on jQuery.swipe")}this.enable=function(){aR.bind(J,aN);aR.bind(aD,a9);return aR};this.disable=function(){aK();return aR};this.destroy=function(){aK();aR.data(B,null);return aR};this.option=function(bc,bb){if(av[bc]!==undefined){if(bb===undefined){return av[bc]}else{av[bc]=bb}}else{f.error("Option "+bc+" does not exist on jQuery.swipe.options")}return null};function aN(bd){if(aB()){return}if(f(bd.target).closest(av.excludedElements,aR).length>0){return}var be=bd.originalEvent?bd.originalEvent:bd;var bc,bb=a?be.touches[0]:be;Z=g;if(a){W=be.touches.length}else{bd.preventDefault()}ag=0;aP=null;aJ=null;ab=0;a1=0;aZ=0;G=1;aq=0;aQ=aj();M=aa();R();if(!a||(W===av.fingers||av.fingers===i)||aX()){ai(0,bb);T=at();if(W==2){ai(1,be.touches[1]);a1=aZ=au(aQ[0].start,aQ[1].start)}if(av.swipeStatus||av.pinchStatus){bc=O(be,Z)}}else{bc=false}if(bc===false){Z=q;O(be,Z);return bc}else{if(av.hold){af=setTimeout(f.proxy(function(){aR.trigger("hold",[be.target]);if(av.hold){bc=av.hold.call(aR,be,be.target)}},this),av.longTapThreshold)}ao(true)}return null}function a3(be){var bh=be.originalEvent?be.originalEvent:be;if(Z===h||Z===q||am()){return}var bd,bc=a?bh.touches[0]:bh;var bf=aH(bc);a2=at();if(a){W=bh.touches.length}if(av.hold){clearTimeout(af)}Z=k;if(W==2){if(a1==0){ai(1,bh.touches[1]);a1=aZ=au(aQ[0].start,aQ[1].start)}else{aH(bh.touches[1]);aZ=au(aQ[0].end,aQ[1].end);aJ=ar(aQ[0].end,aQ[1].end)}G=a7(a1,aZ);aq=Math.abs(a1-aZ)}if((W===av.fingers||av.fingers===i)||!a||aX()){aP=aL(bf.start,bf.end);al(be,aP);ag=aS(bf.start,bf.end);ab=aM();aI(aP,ag);if(av.swipeStatus||av.pinchStatus){bd=O(bh,Z)}if(!av.triggerOnTouchEnd||av.triggerOnTouchLeave){var bb=true;if(av.triggerOnTouchLeave){var bg=aY(this);bb=E(bf.end,bg)}if(!av.triggerOnTouchEnd&&bb){Z=aC(k)}else{if(av.triggerOnTouchLeave&&!bb){Z=aC(h)}}if(Z==q||Z==h){O(bh,Z)}}}else{Z=q;O(bh,Z)}if(bd===false){Z=q;O(bh,Z)}}function L(bb){var bc=bb.originalEvent;if(a){if(bc.touches.length>0){F();return true}}if(am()){W=ad}a2=at();ab=aM();if(ba()||!an()){Z=q;O(bc,Z)}else{if(av.triggerOnTouchEnd||(av.triggerOnTouchEnd==false&&Z===k)){bb.preventDefault();Z=h;O(bc,Z)}else{if(!av.triggerOnTouchEnd&&a6()){Z=h;aF(bc,Z,A)}else{if(Z===k){Z=q;O(bc,Z)}}}}ao(false);return null}function a9(){W=0;a2=0;T=0;a1=0;aZ=0;G=1;R();ao(false)}function K(bb){var bc=bb.originalEvent;if(av.triggerOnTouchLeave){Z=aC(h);O(bc,Z)}}function aK(){aR.unbind(J,aN);aR.unbind(aD,a9);aR.unbind(ay,a3);aR.unbind(U,L);if(S){aR.unbind(S,K)}ao(false)}function aC(bf){var be=bf;var bd=aA();var bc=an();var bb=ba();if(!bd||bb){be=q}else{if(bc&&bf==k&&(!av.triggerOnTouchEnd||av.triggerOnTouchLeave)){be=h}else{if(!bc&&bf==h&&av.triggerOnTouchLeave){be=q}}}return be}function O(bd,bb){var bc=undefined;if(I()||V()){bc=aF(bd,bb,l)}else{if((P()||aX())&&bc!==false){bc=aF(bd,bb,t)}}if(aG()&&bc!==false){bc=aF(bd,bb,j)}else{if(ap()&&bc!==false){bc=aF(bd,bb,b)}else{if(ah()&&bc!==false){bc=aF(bd,bb,A)}}}if(bb===q){a9(bd)}if(bb===h){if(a){if(bd.touches.length==0){a9(bd)}}else{a9(bd)}}return bc}function aF(be,bb,bd){var bc=undefined;if(bd==l){aR.trigger("swipeStatus",[bb,aP||null,ag||0,ab||0,W,aQ]);if(av.swipeStatus){bc=av.swipeStatus.call(aR,be,bb,aP||null,ag||0,ab||0,W,aQ);if(bc===false){return false}}if(bb==h&&aV()){aR.trigger("swipe",[aP,ag,ab,W,aQ]);if(av.swipe){bc=av.swipe.call(aR,be,aP,ag,ab,W,aQ);if(bc===false){return false}}switch(aP){case p:aR.trigger("swipeLeft",[aP,ag,ab,W,aQ]);if(av.swipeLeft){bc=av.swipeLeft.call(aR,be,aP,ag,ab,W,aQ)}break;case o:aR.trigger("swipeRight",[aP,ag,ab,W,aQ]);if(av.swipeRight){bc=av.swipeRight.call(aR,be,aP,ag,ab,W,aQ)}break;case e:aR.trigger("swipeUp",[aP,ag,ab,W,aQ]);if(av.swipeUp){bc=av.swipeUp.call(aR,be,aP,ag,ab,W,aQ)}break;case x:aR.trigger("swipeDown",[aP,ag,ab,W,aQ]);if(av.swipeDown){bc=av.swipeDown.call(aR,be,aP,ag,ab,W,aQ)}break}}}if(bd==t){aR.trigger("pinchStatus",[bb,aJ||null,aq||0,ab||0,W,G,aQ]);if(av.pinchStatus){bc=av.pinchStatus.call(aR,be,bb,aJ||null,aq||0,ab||0,W,G,aQ);if(bc===false){return false}}if(bb==h&&a8()){switch(aJ){case c:aR.trigger("pinchIn",[aJ||null,aq||0,ab||0,W,G,aQ]);if(av.pinchIn){bc=av.pinchIn.call(aR,be,aJ||null,aq||0,ab||0,W,G,aQ)}break;case z:aR.trigger("pinchOut",[aJ||null,aq||0,ab||0,W,G,aQ]);if(av.pinchOut){bc=av.pinchOut.call(aR,be,aJ||null,aq||0,ab||0,W,G,aQ)}break}}}if(bd==A){if(bb===q||bb===h){clearTimeout(aW);clearTimeout(af);if(Y()&&!H()){N=at();aW=setTimeout(f.proxy(function(){N=null;aR.trigger("tap",[be.target]);if(av.tap){bc=av.tap.call(aR,be,be.target)}},this),av.doubleTapThreshold)}else{N=null;aR.trigger("tap",[be.target]);if(av.tap){bc=av.tap.call(aR,be,be.target)}}}}else{if(bd==j){if(bb===q||bb===h){clearTimeout(aW);N=null;aR.trigger("doubletap",[be.target]);if(av.doubleTap){bc=av.doubleTap.call(aR,be,be.target)}}}else{if(bd==b){if(bb===q||bb===h){clearTimeout(aW);N=null;aR.trigger("longtap",[be.target]);if(av.longTap){bc=av.longTap.call(aR,be,be.target)}}}}}return bc}function an(){var bb=true;if(av.threshold!==null){bb=ag>=av.threshold}return bb}function ba(){var bb=false;if(av.cancelThreshold!==null&&aP!==null){bb=(aT(aP)-ag)>=av.cancelThreshold}return bb}function ae(){if(av.pinchThreshold!==null){return aq>=av.pinchThreshold}return true}function aA(){var bb;if(av.maxTimeThreshold){if(ab>=av.maxTimeThreshold){bb=false}else{bb=true}}else{bb=true}return bb}function al(bb,bc){if(av.allowPageScroll===m||aX()){bb.preventDefault()}else{var bd=av.allowPageScroll===s;switch(bc){case p:if((av.swipeLeft&&bd)||(!bd&&av.allowPageScroll!=D)){bb.preventDefault()}break;case o:if((av.swipeRight&&bd)||(!bd&&av.allowPageScroll!=D)){bb.preventDefault()}break;case e:if((av.swipeUp&&bd)||(!bd&&av.allowPageScroll!=u)){bb.preventDefault()}break;case x:if((av.swipeDown&&bd)||(!bd&&av.allowPageScroll!=u)){bb.preventDefault()}break}}}function a8(){var bc=aO();var bb=X();var bd=ae();return bc&&bb&&bd}function aX(){return !!(av.pinchStatus||av.pinchIn||av.pinchOut)}function P(){return !!(a8()&&aX())}function aV(){var be=aA();var bg=an();var bd=aO();var bb=X();var bc=ba();var bf=!bc&&bb&&bd&&bg&&be;return bf}function V(){return !!(av.swipe||av.swipeStatus||av.swipeLeft||av.swipeRight||av.swipeUp||av.swipeDown)}function I(){return !!(aV()&&V())}function aO(){return((W===av.fingers||av.fingers===i)||!a)}function X(){return aQ[0].end.x!==0}function a6(){return !!(av.tap)}function Y(){return !!(av.doubleTap)}function aU(){return !!(av.longTap)}function Q(){if(N==null){return false}var bb=at();return(Y()&&((bb-N)<=av.doubleTapThreshold))}function H(){return Q()}function ax(){return((W===1||!a)&&(isNaN(ag)||agav.longTapThreshold)&&(ag=0)){return p}else{if((bd<=360)&&(bd>=315)){return p}else{if((bd>=135)&&(bd<=225)){return o}else{if((bd>45)&&(bd<135)){return x}else{return e}}}}}function at(){var bb=new Date();return bb.getTime()}function aY(bb){bb=f(bb);var bd=bb.offset();var bc={left:bd.left,right:bd.left+bb.outerWidth(),top:bd.top,bottom:bd.top+bb.outerHeight()};return bc}function E(bb,bc){return(bb.x>bc.left&&bb.xbc.top&&bb.ye;e++)r[s[e]]=r=r[s[e]]||{};return r},h=l("com.greensock"),_=1e-10,u=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},m=function(){},f=function(){var t=Object.prototype.toString,e=t.call([]);return function(i){return null!=i&&(i instanceof Array||"object"==typeof i&&!!i.push&&t.call(i)===e)}}(),c={},p=function(s,r,n,a){this.sc=c[s]?c[s].sc:[],c[s]=this,this.gsClass=null,this.func=n;var o=[];this.check=function(h){for(var _,u,m,f,d=r.length,v=d;--d>-1;)(_=c[r[d]]||new p(r[d],[])).gsClass?(o[d]=_.gsClass,v--):h&&_.sc.push(this);if(0===v&&n)for(u=("com.greensock."+s).split("."),m=u.pop(),f=l(u.join("."))[m]=this.gsClass=n.apply(n,o),a&&(i[m]=f,"function"==typeof define&&define.amd?define((t.GreenSockAMDPath?t.GreenSockAMDPath+"/":"")+s.split(".").pop(),[],function(){return f}):s===e&&"undefined"!=typeof module&&module.exports&&(module.exports=f)),d=0;this.sc.length>d;d++)this.sc[d].check()},this.check(!0)},d=t._gsDefine=function(t,e,i,s){return new p(t,e,i,s)},v=h._class=function(t,e,i){return e=e||function(){},d(t,[],function(){return e},i),e};d.globals=i;var g=[0,0,1,1],T=[],y=v("easing.Ease",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?g.concat(e):g},!0),w=y.map={},P=y.register=function(t,e,i,s){for(var r,n,a,o,l=e.split(","),_=l.length,u=(i||"easeIn,easeOut,easeInOut").split(",");--_>-1;)for(n=l[_],r=s?v("easing."+n,null,!0):h.easing[n]||{},a=u.length;--a>-1;)o=u[a],w[n+"."+o]=w[o+n]=r[o]=t.getRatio?t:t[o]||new t};for(n=y.prototype,n._calcEnd=!1,n.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:.5>t?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:.5>t?s/2:1-s/2},s=["Linear","Quad","Cubic","Quart","Quint,Strong"],r=s.length;--r>-1;)n=s[r]+",Power"+r,P(new y(null,null,1,r),n,"easeOut",!0),P(new y(null,null,2,r),n,"easeIn"+(0===r?",easeNone":"")),P(new y(null,null,3,r),n,"easeInOut");w.linear=h.easing.Linear.easeIn,w.swing=h.easing.Quad.easeInOut;var b=v("events.EventDispatcher",function(t){this._listeners={},this._eventTarget=t||this});n=b.prototype,n.addEventListener=function(t,e,i,s,r){r=r||0;var n,l,h=this._listeners[t],_=0;for(null==h&&(this._listeners[t]=h=[]),l=h.length;--l>-1;)n=h[l],n.c===e&&n.s===i?h.splice(l,1):0===_&&r>n.pr&&(_=l+1);h.splice(_,0,{c:e,s:i,up:s,pr:r}),this!==a||o||a.wake()},n.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;--i>-1;)if(s[i].c===e)return s.splice(i,1),void 0},n.dispatchEvent=function(t){var e,i,s,r=this._listeners[t];if(r)for(e=r.length,i=this._eventTarget;--e>-1;)s=r[e],s&&(s.up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i))};var k=t.requestAnimationFrame,A=t.cancelAnimationFrame,S=Date.now||function(){return(new Date).getTime()},x=S();for(s=["ms","moz","webkit","o"],r=s.length;--r>-1&&!k;)k=t[s[r]+"RequestAnimationFrame"],A=t[s[r]+"CancelAnimationFrame"]||t[s[r]+"CancelRequestAnimationFrame"];v("Ticker",function(t,e){var i,s,r,n,l,h=this,u=S(),f=e!==!1&&k,c=500,p=33,d=function(t){var e,a,o=S()-x;o>c&&(u+=o-p),x+=o,h.time=(x-u)/1e3,e=h.time-l,(!i||e>0||t===!0)&&(h.frame++,l+=e+(e>=n?.004:n-e),a=!0),t!==!0&&(r=s(d)),a&&h.dispatchEvent("tick")};b.call(h),h.time=h.frame=0,h.tick=function(){d(!0)},h.lagSmoothing=function(t,e){c=t||1/_,p=Math.min(e,c,0)},h.sleep=function(){null!=r&&(f&&A?A(r):clearTimeout(r),s=m,r=null,h===a&&(o=!1))},h.wake=function(){null!==r?h.sleep():h.frame>10&&(x=S()-c+5),s=0===i?m:f&&k?k:function(t){return setTimeout(t,0|1e3*(l-h.time)+1)},h===a&&(o=!0),d(2)},h.fps=function(t){return arguments.length?(i=t,n=1/(i||60),l=this.time+n,h.wake(),void 0):i},h.useRAF=function(t){return arguments.length?(h.sleep(),f=t,h.fps(i),void 0):f},h.fps(t),setTimeout(function(){f&&(!r||5>h.frame)&&h.useRAF(!1)},1500)}),n=h.Ticker.prototype=new h.events.EventDispatcher,n.constructor=h.Ticker;var R=v("core.Animation",function(t,e){if(this.vars=e=e||{},this._duration=this._totalDuration=t||0,this._delay=Number(e.delay)||0,this._timeScale=1,this._active=e.immediateRender===!0,this.data=e.data,this._reversed=e.reversed===!0,B){o||a.wake();var i=this.vars.useFrames?q:B;i.add(this,i._time),this.vars.paused&&this.paused(!0)}});a=R.ticker=new h.Ticker,n=R.prototype,n._dirty=n._gc=n._initted=n._paused=!1,n._totalTime=n._time=0,n._rawPrevTime=-1,n._next=n._last=n._onUpdate=n._timeline=n.timeline=null,n._paused=!1;var C=function(){o&&S()-x>2e3&&a.wake(),setTimeout(C,2e3)};C(),n.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},n.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},n.resume=function(t,e){return null!=t&&this.seek(t,e),this.paused(!1)},n.seek=function(t,e){return this.totalTime(Number(t),e!==!1)},n.restart=function(t,e){return this.reversed(!1).paused(!1).totalTime(t?-this._delay:0,e!==!1,!0)},n.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},n.render=function(){},n.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,(this._gc||!this.timeline)&&this._enabled(!0),this},n.isActive=function(){var t,e=this._timeline,i=this._startTime;return!e||!this._gc&&!this._paused&&e.isActive()&&(t=e.rawTime())>=i&&i+this.totalDuration()/this._timeScale>t},n._enabled=function(t,e){return o||a.wake(),this._gc=!t,this._active=this.isActive(),e!==!0&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},n._kill=function(){return this._enabled(!1,!1)},n.kill=function(t,e){return this._kill(t,e),this},n._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},n._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();--e>-1;)"{self}"===t[e]&&(i[e]=this);return i},n.eventCallback=function(t,e,i,s){if("on"===(t||"").substr(0,2)){var r=this.vars;if(1===arguments.length)return r[t];null==e?delete r[t]:(r[t]=e,r[t+"Params"]=f(i)&&-1!==i.join("").indexOf("{self}")?this._swapSelfInParams(i):i,r[t+"Scope"]=s),"onUpdate"===t&&(this._onUpdate=e)}return this},n.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},n.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._timethis._duration?this._duration:t,e)):this._time},n.totalTime=function(t,e,i){if(o||a.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(0>t&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,r=this._timeline;if(t>s&&!i&&(t=s),this._startTime=(this._paused?this._pauseTime:r._time)-(this._reversed?s-t:t)/this._timeScale,r._dirty||this._uncache(!1),r._timeline)for(;r._timeline;)r._timeline._time!==(r._startTime+r._totalTime)/r._timeScale&&r.totalTime(r._totalTime,!0),r=r._timeline}this._gc&&this._enabled(!0,!1),(this._totalTime!==t||0===this._duration)&&(this.render(t,e,!1),z.length&&M())}return this},n.progress=n.totalProgress=function(t,e){return arguments.length?this.totalTime(this.duration()*t,e):this._time/this.duration()},n.startTime=function(t){return arguments.length?(t!==this._startTime&&(this._startTime=t,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,t-this._delay)),this):this._startTime},n.endTime=function(t){return this._startTime+(0!=t?this.totalDuration():this.duration())/this._timeScale},n.timeScale=function(t){if(!arguments.length)return this._timeScale;if(t=t||_,this._timeline&&this._timeline.smoothChildTiming){var e=this._pauseTime,i=e||0===e?e:this._timeline.totalTime();this._startTime=i-(i-this._startTime)*this._timeScale/t}return this._timeScale=t,this._uncache(!1)},n.reversed=function(t){return arguments.length?(t!=this._reversed&&(this._reversed=t,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},n.paused=function(t){if(!arguments.length)return this._paused;if(t!=this._paused&&this._timeline){o||t||a.wake();var e=this._timeline,i=e.rawTime(),s=i-this._pauseTime;!t&&e.smoothChildTiming&&(this._startTime+=s,this._uncache(!1)),this._pauseTime=t?i:null,this._paused=t,this._active=this.isActive(),!t&&0!==s&&this._initted&&this.duration()&&this.render(e.smoothChildTiming?this._totalTime:(i-this._startTime)/this._timeScale,!0,!0)}return this._gc&&!t&&this._enabled(!0,!1),this};var D=v("core.SimpleTimeline",function(t){R.call(this,0,t),this.autoRemoveChildren=this.smoothChildTiming=!0});n=D.prototype=new R,n.constructor=D,n.kill()._gc=!1,n._first=n._last=n._recent=null,n._sortChildren=!1,n.add=n.insert=function(t,e){var i,s;if(t._startTime=Number(e||0)+t._delay,t._paused&&this!==t._timeline&&(t._pauseTime=t._startTime+(this.rawTime()-t._startTime)/t._timeScale),t.timeline&&t.timeline._remove(t,!0),t.timeline=t._timeline=this,t._gc&&t._enabled(!0,!0),i=this._last,this._sortChildren)for(s=t._startTime;i&&i._startTime>s;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._recent=t,this._timeline&&this._uncache(!0),this},n._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),t._next=t._prev=t.timeline=null,t===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},n.render=function(t,e,i){var s,r=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;r;)s=r._next,(r._active||t>=r._startTime&&!r._paused)&&(r._reversed?r.render((r._dirty?r.totalDuration():r._totalDuration)-(t-r._startTime)*r._timeScale,e,i):r.render((t-r._startTime)*r._timeScale,e,i)),r=s},n.rawTime=function(){return o||a.wake(),this._totalTime};var I=v("TweenLite",function(e,i,s){if(R.call(this,i,s),this.render=I.prototype.render,null==e)throw"Cannot tween a null target.";this.target=e="string"!=typeof e?e:I.selector(e)||e;var r,n,a,o=e.jquery||e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType),l=this.vars.overwrite;if(this._overwrite=l=null==l?Q[I.defaultOverwrite]:"number"==typeof l?l>>0:Q[l],(o||e instanceof Array||e.push&&f(e))&&"number"!=typeof e[0])for(this._targets=a=u(e),this._propLookup=[],this._siblings=[],r=0;a.length>r;r++)n=a[r],n?"string"!=typeof n?n.length&&n!==t&&n[0]&&(n[0]===t||n[0].nodeType&&n[0].style&&!n.nodeType)?(a.splice(r--,1),this._targets=a=a.concat(u(n))):(this._siblings[r]=$(n,this,!1),1===l&&this._siblings[r].length>1&&H(n,this,null,1,this._siblings[r])):(n=a[r--]=I.selector(n),"string"==typeof n&&a.splice(r+1,1)):a.splice(r--,1);else this._propLookup={},this._siblings=$(e,this,!1),1===l&&this._siblings.length>1&&H(e,this,null,1,this._siblings);(this.vars.immediateRender||0===i&&0===this._delay&&this.vars.immediateRender!==!1)&&(this._time=-_,this.render(-this._delay))},!0),E=function(e){return e&&e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType)},O=function(t,e){var i,s={};for(i in t)G[i]||i in e&&"transform"!==i&&"x"!==i&&"y"!==i&&"width"!==i&&"height"!==i&&"className"!==i&&"border"!==i||!(!U[i]||U[i]&&U[i]._autoCSS)||(s[i]=t[i],delete t[i]);t.css=s};n=I.prototype=new R,n.constructor=I,n.kill()._gc=!1,n.ratio=0,n._firstPT=n._targets=n._overwrittenProps=n._startAt=null,n._notifyPluginsOfEnabled=n._lazy=!1,I.version="1.14.2",I.defaultEase=n._ease=new y(null,null,1,1),I.defaultOverwrite="auto",I.ticker=a,I.autoSleep=!0,I.lagSmoothing=function(t,e){a.lagSmoothing(t,e)},I.selector=t.$||t.jQuery||function(e){var i=t.$||t.jQuery;return i?(I.selector=i,i(e)):"undefined"==typeof document?e:document.querySelectorAll?document.querySelectorAll(e):document.getElementById("#"===e.charAt(0)?e.substr(1):e)};var z=[],L={},N=I._internals={isArray:f,isSelector:E,lazyTweens:z},U=I._plugins={},F=N.tweenLookup={},j=0,G=N.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1},Q={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,"true":1,"false":0},q=R._rootFramesTimeline=new D,B=R._rootTimeline=new D,M=N.lazyRender=function(){var t,e=z.length;for(L={};--e>-1;)t=z[e],t&&t._lazy!==!1&&(t.render(t._lazy[0],t._lazy[1],!0),t._lazy=!1);z.length=0};B._startTime=a.time,q._startTime=a.frame,B._active=q._active=!0,setTimeout(M,1),R._updateRoot=I.render=function(){var t,e,i;if(z.length&&M(),B.render((a.time-B._startTime)*B._timeScale,!1,!1),q.render((a.frame-q._startTime)*q._timeScale,!1,!1),z.length&&M(),!(a.frame%120)){for(i in F){for(e=F[i].tweens,t=e.length;--t>-1;)e[t]._gc&&e.splice(t,1);0===e.length&&delete F[i]}if(i=B._first,(!i||i._paused)&&I.autoSleep&&!q._first&&1===a._listeners.tick.length){for(;i&&i._paused;)i=i._next;i||a.sleep()}}},a.addEventListener("tick",R._updateRoot);var $=function(t,e,i){var s,r,n=t._gsTweenID;if(F[n||(t._gsTweenID=n="t"+j++)]||(F[n]={target:t,tweens:[]}),e&&(s=F[n].tweens,s[r=s.length]=e,i))for(;--r>-1;)s[r]===e&&s.splice(r,1);return F[n].tweens},K=function(t,e,i,s){var r,n,a=t.vars.onOverwrite;return a&&(r=a(t,e,i,s)),a=I.onOverwrite,a&&(n=a(t,e,i,s)),r!==!1&&n!==!1},H=function(t,e,i,s,r){var n,a,o,l;if(1===s||s>=4){for(l=r.length,n=0;l>n;n++)if((o=r[n])!==e)o._gc||K(o,e)&&o._enabled(!1,!1)&&(a=!0);else if(5===s)break;return a}var h,u=e._startTime+_,m=[],f=0,c=0===e._duration;for(n=r.length;--n>-1;)(o=r[n])===e||o._gc||o._paused||(o._timeline!==e._timeline?(h=h||J(e,0,c),0===J(o,h,c)&&(m[f++]=o)):u>=o._startTime&&o._startTime+o.totalDuration()/o._timeScale>u&&((c||!o._initted)&&2e-10>=u-o._startTime||(m[f++]=o)));for(n=f;--n>-1;)if(o=m[n],2===s&&o._kill(i,t,e)&&(a=!0),2!==s||!o._firstPT&&o._initted){if(2!==s&&!K(o,e))continue;o._enabled(!1,!1)&&(a=!0)}return a},J=function(t,e,i){for(var s=t._timeline,r=s._timeScale,n=t._startTime;s._timeline;){if(n+=s._startTime,r*=s._timeScale,s._paused)return-100;s=s._timeline}return n/=r,n>e?n-e:i&&n===e||!t._initted&&2*_>n-e?_:(n+=t.totalDuration()/t._timeScale/r)>e+_?0:n-e-_};n._init=function(){var t,e,i,s,r,n=this.vars,a=this._overwrittenProps,o=this._duration,l=!!n.immediateRender,h=n.ease;if(n.startAt){this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),r={};for(s in n.startAt)r[s]=n.startAt[s];if(r.overwrite=!1,r.immediateRender=!0,r.lazy=l&&n.lazy!==!1,r.startAt=r.delay=null,this._startAt=I.to(this.target,0,r),l)if(this._time>0)this._startAt=null;else if(0!==o)return}else if(n.runBackwards&&0!==o)if(this._startAt)this._startAt.render(-1,!0),this._startAt.kill(),this._startAt=null;else{0!==this._time&&(l=!1),i={};for(s in n)G[s]&&"autoCSS"!==s||(i[s]=n[s]);if(i.overwrite=0,i.data="isFromStart",i.lazy=l&&n.lazy!==!1,i.immediateRender=l,this._startAt=I.to(this.target,0,i),l){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=h=h?h instanceof y?h:"function"==typeof h?new y(h,n.easeParams):w[h]||I.defaultEase:I.defaultEase,n.easeParams instanceof Array&&h.config&&(this._ease=h.config.apply(h,n.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(t=this._targets.length;--t>-1;)this._initProps(this._targets[t],this._propLookup[t]={},this._siblings[t],a?a[t]:null)&&(e=!0);else e=this._initProps(this.target,this._propLookup,this._siblings,a);if(e&&I._onPluginEvent("_onInitAllProps",this),a&&(this._firstPT||"function"!=typeof this.target&&this._enabled(!1,!1)),n.runBackwards)for(i=this._firstPT;i;)i.s+=i.c,i.c=-i.c,i=i._next;this._onUpdate=n.onUpdate,this._initted=!0},n._initProps=function(e,i,s,r){var n,a,o,l,h,_;if(null==e)return!1;L[e._gsTweenID]&&M(),this.vars.css||e.style&&e!==t&&e.nodeType&&U.css&&this.vars.autoCSS!==!1&&O(this.vars,e);for(n in this.vars){if(_=this.vars[n],G[n])_&&(_ instanceof Array||_.push&&f(_))&&-1!==_.join("").indexOf("{self}")&&(this.vars[n]=_=this._swapSelfInParams(_,this));else if(U[n]&&(l=new U[n])._onInitTween(e,this.vars[n],this)){for(this._firstPT=h={_next:this._firstPT,t:l,p:"setRatio",s:0,c:1,f:!0,n:n,pg:!0,pr:l._priority},a=l._overwriteProps.length;--a>-1;)i[l._overwriteProps[a]]=this._firstPT;(l._priority||l._onInitAllProps)&&(o=!0),(l._onDisable||l._onEnable)&&(this._notifyPluginsOfEnabled=!0)}else this._firstPT=i[n]=h={_next:this._firstPT,t:e,p:n,f:"function"==typeof e[n],n:n,pg:!1,pr:0},h.s=h.f?e[n.indexOf("set")||"function"!=typeof e["get"+n.substr(3)]?n:"get"+n.substr(3)]():parseFloat(e[n]),h.c="string"==typeof _&&"="===_.charAt(1)?parseInt(_.charAt(0)+"1",10)*Number(_.substr(2)):Number(_)-h.s||0;h&&h._next&&(h._next._prev=h)}return r&&this._kill(r,e)?this._initProps(e,i,s,r):this._overwrite>1&&this._firstPT&&s.length>1&&H(e,this,i,this._overwrite,s)?(this._kill(i,e),this._initProps(e,i,s,r)):(this._firstPT&&(this.vars.lazy!==!1&&this._duration||this.vars.lazy&&!this._duration)&&(L[e._gsTweenID]=!0),o)},n.render=function(t,e,i){var s,r,n,a,o=this._time,l=this._duration,h=this._rawPrevTime;if(t>=l)this._totalTime=this._time=l,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(s=!0,r="onComplete"),0===l&&(this._initted||!this.vars.lazy||i)&&(this._startTime===this._timeline._duration&&(t=0),(0===t||0>h||h===_)&&h!==t&&(i=!0,h>_&&(r="onReverseComplete")),this._rawPrevTime=a=!e||t||h===t?t:_);else if(1e-7>t)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==o||0===l&&h>0&&h!==_)&&(r="onReverseComplete",s=this._reversed),0>t&&(this._active=!1,0===l&&(this._initted||!this.vars.lazy||i)&&(h>=0&&(i=!0),this._rawPrevTime=a=!e||t||h===t?t:_)),this._initted||(i=!0);else if(this._totalTime=this._time=t,this._easeType){var u=t/l,m=this._easeType,f=this._easePower;(1===m||3===m&&u>=.5)&&(u=1-u),3===m&&(u*=2),1===f?u*=u:2===f?u*=u*u:3===f?u*=u*u*u:4===f&&(u*=u*u*u*u),this.ratio=1===m?1-u:2===m?u:.5>t/l?u/2:1-u/2}else this.ratio=this._ease.getRatio(t/l);if(this._time!==o||i){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!i&&this._firstPT&&(this.vars.lazy!==!1&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=o,this._rawPrevTime=h,z.push(this),this._lazy=[t,e],void 0;this._time&&!s?this.ratio=this._ease.getRatio(this._time/l):s&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(this._lazy!==!1&&(this._lazy=!1),this._active||!this._paused&&this._time!==o&&t>=0&&(this._active=!0),0===o&&(this._startAt&&(t>=0?this._startAt.render(t,e,i):r||(r="_dummyGS")),this.vars.onStart&&(0!==this._time||0===l)&&(e||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||T))),n=this._firstPT;n;)n.f?n.t[n.p](n.c*this.ratio+n.s):n.t[n.p]=n.c*this.ratio+n.s,n=n._next;this._onUpdate&&(0>t&&this._startAt&&t!==-1e-4&&this._startAt.render(t,e,i),e||(this._time!==o||s)&&this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||T)),r&&(!this._gc||i)&&(0>t&&this._startAt&&!this._onUpdate&&t!==-1e-4&&this._startAt.render(t,e,i),s&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[r]&&this.vars[r].apply(this.vars[r+"Scope"]||this,this.vars[r+"Params"]||T),0===l&&this._rawPrevTime===_&&a!==_&&(this._rawPrevTime=0))}},n._kill=function(t,e,i){if("all"===t&&(t=null),null==t&&(null==e||e===this.target))return this._lazy=!1,this._enabled(!1,!1);e="string"!=typeof e?e||this._targets||this.target:I.selector(e)||e;var s,r,n,a,o,l,h,_,u;if((f(e)||E(e))&&"number"!=typeof e[0])for(s=e.length;--s>-1;)this._kill(t,e[s])&&(l=!0);else{if(this._targets){for(s=this._targets.length;--s>-1;)if(e===this._targets[s]){o=this._propLookup[s]||{},this._overwrittenProps=this._overwrittenProps||[],r=this._overwrittenProps[s]=t?this._overwrittenProps[s]||{}:"all";break}}else{if(e!==this.target)return!1;o=this._propLookup,r=this._overwrittenProps=t?this._overwrittenProps||{}:"all"}if(o){if(h=t||o,_=t!==r&&"all"!==r&&t!==o&&("object"!=typeof t||!t._tempKill),i&&(I.onOverwrite||this.vars.onOverwrite)){for(n in h)o[n]&&(u||(u=[]),u.push(n));if(!K(this,i,e,u))return!1}for(n in h)(a=o[n])&&(a.pg&&a.t._kill(h)&&(l=!0),a.pg&&0!==a.t._overwriteProps.length||(a._prev?a._prev._next=a._next:a===this._firstPT&&(this._firstPT=a._next),a._next&&(a._next._prev=a._prev),a._next=a._prev=null),delete o[n]),_&&(r[n]=1);!this._firstPT&&this._initted&&this._enabled(!1,!1)}}return l},n.invalidate=function(){return this._notifyPluginsOfEnabled&&I._onPluginEvent("_onDisable",this),this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],R.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-_,this.render(-this._delay)),this},n._enabled=function(t,e){if(o||a.wake(),t&&this._gc){var i,s=this._targets;if(s)for(i=s.length;--i>-1;)this._siblings[i]=$(s[i],this,!0);else this._siblings=$(this.target,this,!0)}return R.prototype._enabled.call(this,t,e),this._notifyPluginsOfEnabled&&this._firstPT?I._onPluginEvent(t?"_onEnable":"_onDisable",this):!1},I.to=function(t,e,i){return new I(t,e,i)},I.from=function(t,e,i){return i.runBackwards=!0,i.immediateRender=0!=i.immediateRender,new I(t,e,i)},I.fromTo=function(t,e,i,s){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,new I(t,e,s)},I.delayedCall=function(t,e,i,s,r){return new I(e,0,{delay:t,onComplete:e,onCompleteParams:i,onCompleteScope:s,onReverseComplete:e,onReverseCompleteParams:i,onReverseCompleteScope:s,immediateRender:!1,useFrames:r,overwrite:0})},I.set=function(t,e){return new I(t,0,e)},I.getTweensOf=function(t,e){if(null==t)return[];t="string"!=typeof t?t:I.selector(t)||t;var i,s,r,n;if((f(t)||E(t))&&"number"!=typeof t[0]){for(i=t.length,s=[];--i>-1;)s=s.concat(I.getTweensOf(t[i],e));for(i=s.length;--i>-1;)for(n=s[i],r=i;--r>-1;)n===s[r]&&s.splice(i,1)}else for(s=$(t).concat(),i=s.length;--i>-1;)(s[i]._gc||e&&!s[i].isActive())&&s.splice(i,1);return s},I.killTweensOf=I.killDelayedCallsTo=function(t,e,i){"object"==typeof e&&(i=e,e=!1);for(var s=I.getTweensOf(t,e),r=s.length;--r>-1;)s[r]._kill(i,t)};var V=v("plugins.TweenPlugin",function(t,e){this._overwriteProps=(t||"").split(","),this._propName=this._overwriteProps[0],this._priority=e||0,this._super=V.prototype},!0);if(n=V.prototype,V.version="1.10.1",V.API=2,n._firstPT=null,n._addTween=function(t,e,i,s,r,n){var a,o;return null!=s&&(a="number"==typeof s||"="!==s.charAt(1)?Number(s)-i:parseInt(s.charAt(0)+"1",10)*Number(s.substr(2)))?(this._firstPT=o={_next:this._firstPT,t:t,p:e,s:i,c:a,f:"function"==typeof t[e],n:r||e,r:n},o._next&&(o._next._prev=o),o):void 0},n.setRatio=function(t){for(var e,i=this._firstPT,s=1e-6;i;)e=i.c*t+i.s,i.r?e=Math.round(e):s>e&&e>-s&&(e=0),i.f?i.t[i.p](e):i.t[i.p]=e,i=i._next},n._kill=function(t){var e,i=this._overwriteProps,s=this._firstPT;if(null!=t[this._propName])this._overwriteProps=[];else for(e=i.length;--e>-1;)null!=t[i[e]]&&i.splice(e,1);for(;s;)null!=t[s.n]&&(s._next&&(s._next._prev=s._prev),s._prev?(s._prev._next=s._next,s._prev=null):this._firstPT===s&&(this._firstPT=s._next)),s=s._next;return!1},n._roundProps=function(t,e){for(var i=this._firstPT;i;)(t[this._propName]||null!=i.n&&t[i.n.split(this._propName+"_").join("")])&&(i.r=e),i=i._next},I._onPluginEvent=function(t,e){var i,s,r,n,a,o=e._firstPT;if("_onInitAllProps"===t){for(;o;){for(a=o._next,s=r;s&&s.pr>o.pr;)s=s._next;(o._prev=s?s._prev:n)?o._prev._next=o:r=o,(o._next=s)?s._prev=o:n=o,o=a}o=e._firstPT=r}for(;o;)o.pg&&"function"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},V.activate=function(t){for(var e=t.length;--e>-1;)t[e].API===V.API&&(U[(new t[e])._propName]=t[e]);return!0},d.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw"illegal plugin definition.";var e,i=t.propName,s=t.priority||0,r=t.overwriteProps,n={init:"_onInitTween",set:"setRatio",kill:"_kill",round:"_roundProps",initAll:"_onInitAllProps"},a=v("plugins."+i.charAt(0).toUpperCase()+i.substr(1)+"Plugin",function(){V.call(this,i,s),this._overwriteProps=r||[]},t.global===!0),o=a.prototype=new V(i);o.constructor=a,a.API=t.API;for(e in n)"function"==typeof t[e]&&(o[n[e]]=t[e]);return a.version=t.version,V.activate([a]),a},s=t._gsQueue){for(r=0;s.length>r;r++)s[r]();for(n in c)c[n].func||t.console.log("GSAP encountered missing dependency: com.greensock."+n)}o=!1}})("undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window,"TweenLite"); + +/*! + * VERSION: 1.14.2 + * DATE: 2014-10-18 + * UPDATES AND DOCS AT: http://www.greensock.com + * + * @license Copyright (c) 2008-2014, GreenSock. All rights reserved. + * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(t,e,i){var s=function(t){e.call(this,t),this._labels={},this.autoRemoveChildren=this.vars.autoRemoveChildren===!0,this.smoothChildTiming=this.vars.smoothChildTiming===!0,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var i,s,r=this.vars;for(s in r)i=r[s],o(i)&&-1!==i.join("").indexOf("{self}")&&(r[s]=this._swapSelfInParams(i));o(r.tweens)&&this.add(r.tweens,0,r.align,r.stagger)},r=1e-10,n=i._internals,a=n.isSelector,o=n.isArray,h=n.lazyTweens,l=n.lazyRender,_=[],u=_gsScope._gsDefine.globals,c=function(t){var e,i={};for(e in t)i[e]=t[e];return i},p=function(t,e,i,s){var r=t._timeline._totalTime;(e||!this._forcingPlayhead)&&(t._timeline.pause(t._startTime),e&&e.apply(s||t._timeline,i||_),this._forcingPlayhead&&t._timeline.seek(r))},f=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},m=s.prototype=new e;return s.version="1.14.2",m.constructor=s,m.kill()._gc=m._forcingPlayhead=!1,m.to=function(t,e,s,r){var n=s.repeat&&u.TweenMax||i;return e?this.add(new n(t,e,s),r):this.set(t,s,r)},m.from=function(t,e,s,r){return this.add((s.repeat&&u.TweenMax||i).from(t,e,s),r)},m.fromTo=function(t,e,s,r,n){var a=r.repeat&&u.TweenMax||i;return e?this.add(a.fromTo(t,e,s,r),n):this.set(t,r,n)},m.staggerTo=function(t,e,r,n,o,h,l,_){var u,p=new s({onComplete:h,onCompleteParams:l,onCompleteScope:_,smoothChildTiming:this.smoothChildTiming});for("string"==typeof t&&(t=i.selector(t)||t),t=t||[],a(t)&&(t=f(t)),n=n||0,0>n&&(t=f(t),t.reverse(),n*=-1),u=0;t.length>u;u++)r.startAt&&(r.startAt=c(r.startAt)),p.to(t[u],e,c(r),u*n);return this.add(p,o)},m.staggerFrom=function(t,e,i,s,r,n,a,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,s,r,n,a,o)},m.staggerFromTo=function(t,e,i,s,r,n,a,o,h){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,s,r,n,a,o,h)},m.call=function(t,e,s,r){return this.add(i.delayedCall(0,t,e,s),r)},m.set=function(t,e,s){return s=this._parseTimeOrLabel(s,0,!0),null==e.immediateRender&&(e.immediateRender=s===this._time&&!this._paused),this.add(new i(t,0,e),s)},s.exportRoot=function(t,e){t=t||{},null==t.smoothChildTiming&&(t.smoothChildTiming=!0);var r,n,a=new s(t),o=a._timeline;for(null==e&&(e=!0),o._remove(a,!0),a._startTime=0,a._rawPrevTime=a._time=a._totalTime=o._time,r=o._first;r;)n=r._next,e&&r instanceof i&&r.target===r.vars.onComplete||a.add(r,r._startTime-r._delay),r=n;return o.add(a,0),a},m.add=function(r,n,a,h){var l,_,u,c,p,f;if("number"!=typeof n&&(n=this._parseTimeOrLabel(n,0,!0,r)),!(r instanceof t)){if(r instanceof Array||r&&r.push&&o(r)){for(a=a||"normal",h=h||0,l=n,_=r.length,u=0;_>u;u++)o(c=r[u])&&(c=new s({tweens:c})),this.add(c,l),"string"!=typeof c&&"function"!=typeof c&&("sequence"===a?l=c._startTime+c.totalDuration()/c._timeScale:"start"===a&&(c._startTime-=c.delay())),l+=h;return this._uncache(!0)}if("string"==typeof r)return this.addLabel(r,n);if("function"!=typeof r)throw"Cannot add "+r+" into the timeline; it is not a tween, timeline, function, or string.";r=i.delayedCall(0,r)}if(e.prototype.add.call(this,r,n),(this._gc||this._time===this._duration)&&!this._paused&&this._durationr._startTime;p._timeline;)f&&p._timeline.smoothChildTiming?p.totalTime(p._totalTime,!0):p._gc&&p._enabled(!0,!1),p=p._timeline;return this},m.remove=function(e){if(e instanceof t)return this._remove(e,!1);if(e instanceof Array||e&&e.push&&o(e)){for(var i=e.length;--i>-1;)this.remove(e[i]);return this}return"string"==typeof e?this.removeLabel(e):this.kill(null,e)},m._remove=function(t,i){e.prototype._remove.call(this,t,i);var s=this._last;return s?this._time>s._startTime+s._totalDuration/s._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},m.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},m.insert=m.insertMultiple=function(t,e,i,s){return this.add(t,e||0,i,s)},m.appendMultiple=function(t,e,i,s){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,s)},m.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},m.addPause=function(t,e,i,s){return this.call(p,["{self}",e,i,s],this,t)},m.removeLabel=function(t){return delete this._labels[t],this},m.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},m._parseTimeOrLabel=function(e,i,s,r){var n;if(r instanceof t&&r.timeline===this)this.remove(r);else if(r&&(r instanceof Array||r.push&&o(r)))for(n=r.length;--n>-1;)r[n]instanceof t&&r[n].timeline===this&&this.remove(r[n]);if("string"==typeof i)return this._parseTimeOrLabel(i,s&&"number"==typeof e&&null==this._labels[i]?e-this.duration():0,s);if(i=i||0,"string"!=typeof e||!isNaN(e)&&null==this._labels[e])null==e&&(e=this.duration());else{if(n=e.indexOf("="),-1===n)return null==this._labels[e]?s?this._labels[e]=this.duration()+i:i:this._labels[e]+i;i=parseInt(e.charAt(n-1)+"1",10)*Number(e.substr(n+1)),e=n>1?this._parseTimeOrLabel(e.substr(0,n-1),0,s):this.duration()}return Number(e)+i},m.seek=function(t,e){return this.totalTime("number"==typeof t?t:this._parseTimeOrLabel(t),e!==!1)},m.stop=function(){return this.paused(!0)},m.gotoAndPlay=function(t,e){return this.play(t,e)},m.gotoAndStop=function(t,e){return this.pause(t,e)},m.render=function(t,e,i){this._gc&&this._enabled(!0,!1);var s,n,a,o,u,c=this._dirty?this.totalDuration():this._totalDuration,p=this._time,f=this._startTime,m=this._timeScale,d=this._paused;if(t>=c?(this._totalTime=this._time=c,this._reversed||this._hasPausedChild()||(n=!0,o="onComplete",0===this._duration&&(0===t||0>this._rawPrevTime||this._rawPrevTime===r)&&this._rawPrevTime!==t&&this._first&&(u=!0,this._rawPrevTime>r&&(o="onReverseComplete"))),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:r,t=c+1e-4):1e-7>t?(this._totalTime=this._time=0,(0!==p||0===this._duration&&this._rawPrevTime!==r&&(this._rawPrevTime>0||0>t&&this._rawPrevTime>=0))&&(o="onReverseComplete",n=this._reversed),0>t?(this._active=!1,this._rawPrevTime>=0&&this._first&&(u=!0),this._rawPrevTime=t):(this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:r,t=0,this._initted||(u=!0))):this._totalTime=this._time=this._rawPrevTime=t,this._time!==p&&this._first||i||u){if(this._initted||(this._initted=!0),this._active||!this._paused&&this._time!==p&&t>0&&(this._active=!0),0===p&&this.vars.onStart&&0!==this._time&&(e||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||_)),this._time>=p)for(s=this._first;s&&(a=s._next,!this._paused||d);)(s._active||s._startTime<=this._time&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=a;else for(s=this._last;s&&(a=s._prev,!this._paused||d);)(s._active||p>=s._startTime&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=a;this._onUpdate&&(e||(h.length&&l(),this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||_))),o&&(this._gc||(f===this._startTime||m!==this._timeScale)&&(0===this._time||c>=this.totalDuration())&&(n&&(h.length&&l(),this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[o]&&this.vars[o].apply(this.vars[o+"Scope"]||this,this.vars[o+"Params"]||_)))}},m._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof s&&t._hasPausedChild())return!0;t=t._next}return!1},m.getChildren=function(t,e,s,r){r=r||-9999999999;for(var n=[],a=this._first,o=0;a;)r>a._startTime||(a instanceof i?e!==!1&&(n[o++]=a):(s!==!1&&(n[o++]=a),t!==!1&&(n=n.concat(a.getChildren(!0,e,s)),o=n.length))),a=a._next;return n},m.getTweensOf=function(t,e){var s,r,n=this._gc,a=[],o=0;for(n&&this._enabled(!0,!0),s=i.getTweensOf(t),r=s.length;--r>-1;)(s[r].timeline===this||e&&this._contains(s[r]))&&(a[o++]=s[r]);return n&&this._enabled(!1,!0),a},m.recent=function(){return this._recent},m._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},m.shiftChildren=function(t,e,i){i=i||0;for(var s,r=this._first,n=this._labels;r;)r._startTime>=i&&(r._startTime+=t),r=r._next;if(e)for(s in n)n[s]>=i&&(n[s]+=t);return this._uncache(!0)},m._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),s=i.length,r=!1;--s>-1;)i[s]._kill(t,e)&&(r=!0);return r},m.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;--i>-1;)e[i]._enabled(!1,!1);return t!==!1&&(this._labels={}),this._uncache(!0)},m.invalidate=function(){for(var e=this._first;e;)e.invalidate(),e=e._next;return t.prototype.invalidate.call(this)},m._enabled=function(t,i){if(t===this._gc)for(var s=this._first;s;)s._enabled(t,!0),s=s._next;return e.prototype._enabled.call(this,t,i)},m.totalTime=function(){this._forcingPlayhead=!0;var e=t.prototype.totalTime.apply(this,arguments);return this._forcingPlayhead=!1,e},m.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},m.totalDuration=function(t){if(!arguments.length){if(this._dirty){for(var e,i,s=0,r=this._last,n=999999999999;r;)e=r._prev,r._dirty&&r.totalDuration(),r._startTime>n&&this._sortChildren&&!r._paused?this.add(r,r._startTime-r._delay):n=r._startTime,0>r._startTime&&!r._paused&&(s-=r._startTime,this._timeline.smoothChildTiming&&(this._startTime+=r._startTime/this._timeScale),this.shiftChildren(-r._startTime,!1,-9999999999),n=0),i=r._startTime+r._totalDuration/r._timeScale,i>s&&(s=i),r=e;this._duration=this._totalDuration=s,this._dirty=!1}return this._totalDuration}return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this},m.usesFrames=function(){for(var e=this._timeline;e._timeline;)e=e._timeline;return e===t._rootFramesTimeline},m.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},s},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(t){"use strict";var e=function(){return(_gsScope.GreenSockGlobals||_gsScope)[t]};"function"==typeof define&&define.amd?define(["TweenLite"],e):"undefined"!=typeof module&&module.exports&&(require("./TweenLite.js"),module.exports=e())}("TimelineLite"); + +/*! + * VERSION: beta 1.9.4 + * DATE: 2014-07-17 + * UPDATES AND DOCS AT: http://www.greensock.com + * + * @license Copyright (c) 2008-2014, GreenSock. All rights reserved. + * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + **/ +var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("easing.Back",["easing.Ease"],function(t){var e,i,s,r=_gsScope.GreenSockGlobals||_gsScope,n=r.com.greensock,a=2*Math.PI,o=Math.PI/2,h=n._class,l=function(e,i){var s=h("easing."+e,function(){},!0),r=s.prototype=new t;return r.constructor=s,r.getRatio=i,s},_=t.register||function(){},u=function(t,e,i,s){var r=h("easing."+t,{easeOut:new e,easeIn:new i,easeInOut:new s},!0);return _(r,t),r},c=function(t,e,i){this.t=t,this.v=e,i&&(this.next=i,i.prev=this,this.c=i.v-e,this.gap=i.t-t)},p=function(e,i){var s=h("easing."+e,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0),r=s.prototype=new t;return r.constructor=s,r.getRatio=i,r.config=function(t){return new s(t)},s},f=u("Back",p("BackOut",function(t){return(t-=1)*t*((this._p1+1)*t+this._p1)+1}),p("BackIn",function(t){return t*t*((this._p1+1)*t-this._p1)}),p("BackInOut",function(t){return 1>(t*=2)?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),m=h("easing.SlowMo",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:t>1&&(t=1),this._p=1!==t?e:0,this._p1=(1-t)/2,this._p2=t,this._p3=this._p1+this._p2,this._calcEnd=i===!0},!0),d=m.prototype=new t;return d.constructor=m,d.getRatio=function(t){var e=t+(.5-t)*this._p;return this._p1>t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},m.ease=new m(.7,.7),d.config=m.config=function(t,e,i){return new m(t,e,i)},e=h("easing.SteppedEase",function(t){t=t||1,this._p1=1/t,this._p2=t+1},!0),d=e.prototype=new t,d.constructor=e,d.getRatio=function(t){return 0>t?t=0:t>=1&&(t=.999999999),(this._p2*t>>0)*this._p1},d.config=e.config=function(t){return new e(t)},i=h("easing.RoughEase",function(e){e=e||{};for(var i,s,r,n,a,o,h=e.taper||"none",l=[],_=0,u=0|(e.points||20),p=u,f=e.randomize!==!1,m=e.clamp===!0,d=e.template instanceof t?e.template:null,g="number"==typeof e.strength?.4*e.strength:.4;--p>-1;)i=f?Math.random():1/u*p,s=d?d.getRatio(i):i,"none"===h?r=g:"out"===h?(n=1-i,r=n*n*g):"in"===h?r=i*i*g:.5>i?(n=2*i,r=.5*n*n*g):(n=2*(1-i),r=.5*n*n*g),f?s+=Math.random()*r-.5*r:p%2?s+=.5*r:s-=.5*r,m&&(s>1?s=1:0>s&&(s=0)),l[_++]={x:i,y:s};for(l.sort(function(t,e){return t.x-e.x}),o=new c(1,1,null),p=u;--p>-1;)a=l[p],o=new c(a.x,a.y,o);this._prev=new c(0,0,0!==o.t?o:o.next)},!0),d=i.prototype=new t,d.constructor=i,d.getRatio=function(t){var e=this._prev;if(t>e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return this._prev=e,e.v+(t-e.t)/e.gap*e.c},d.config=function(t){return new i(t)},i.ease=new i,u("Bounce",l("BounceOut",function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),l("BounceIn",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:2/2.75>t?1-(7.5625*(t-=1.5/2.75)*t+.75):2.5/2.75>t?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),l("BounceInOut",function(t){var e=.5>t;return t=e?1-2*t:2*t-1,t=1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),u("Circ",l("CircOut",function(t){return Math.sqrt(1-(t-=1)*t)}),l("CircIn",function(t){return-(Math.sqrt(1-t*t)-1)}),l("CircInOut",function(t){return 1>(t*=2)?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),s=function(e,i,s){var r=h("easing."+e,function(t,e){this._p1=t||1,this._p2=e||s,this._p3=this._p2/a*(Math.asin(1/this._p1)||0)},!0),n=r.prototype=new t;return n.constructor=r,n.getRatio=i,n.config=function(t,e){return new r(t,e)},r},u("Elastic",s("ElasticOut",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*a/this._p2)+1},.3),s("ElasticIn",function(t){return-(this._p1*Math.pow(2,10*(t-=1))*Math.sin((t-this._p3)*a/this._p2))},.3),s("ElasticInOut",function(t){return 1>(t*=2)?-.5*this._p1*Math.pow(2,10*(t-=1))*Math.sin((t-this._p3)*a/this._p2):.5*this._p1*Math.pow(2,-10*(t-=1))*Math.sin((t-this._p3)*a/this._p2)+1},.45)),u("Expo",l("ExpoOut",function(t){return 1-Math.pow(2,-10*t)}),l("ExpoIn",function(t){return Math.pow(2,10*(t-1))-.001}),l("ExpoInOut",function(t){return 1>(t*=2)?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),u("Sine",l("SineOut",function(t){return Math.sin(t*o)}),l("SineIn",function(t){return-Math.cos(t*o)+1}),l("SineInOut",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),h("easing.EaseLookup",{find:function(e){return t.map[e]}},!0),_(r.SlowMo,"SlowMo","ease,"),_(i,"RoughEase","ease,"),_(e,"SteppedEase","ease,"),f},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(); + +/*! + * VERSION: 1.14.2 + * DATE: 2014-10-28 + * UPDATES AND DOCS AT: http://www.greensock.com + * + * @license Copyright (c) 2008-2014, GreenSock. All rights reserved. + * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(t,e){var i,r,s,n,a=function(){t.call(this,"css"),this._overwriteProps.length=0,this.setRatio=a.prototype.setRatio},o={},l=a.prototype=new t("css");l.constructor=a,a.version="1.14.2",a.API=2,a.defaultTransformPerspective=0,a.defaultSkewType="compensated",l="px",a.suffixMap={top:l,right:l,bottom:l,left:l,width:l,height:l,fontSize:l,padding:l,margin:l,perspective:l,lineHeight:""};var h,u,f,p,_,c,d=/(?:\d|\-\d|\.\d|\-\.\d)+/g,m=/(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g,g=/(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi,v=/(?![+-]?\d*\.?\d+|e[+-]\d+)[^0-9]/g,y=/(?:\d|\-|\+|=|#|\.)*/g,x=/opacity *= *([^)]*)/i,T=/opacity:([^;]*)/i,w=/alpha\(opacity *=.+?\)/i,b=/^(rgb|hsl)/,P=/([A-Z])/g,S=/-([a-z])/gi,R=/(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi,C=function(t,e){return e.toUpperCase()},k=/(?:Left|Right|Width)/i,O=/(M11|M12|M21|M22)=[\d\-\.e]+/gi,A=/progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i,D=/,(?=[^\)]*(?:\(|$))/gi,M=Math.PI/180,L=180/Math.PI,N={},z=document,X=z.createElement("div"),I=z.createElement("img"),E=a._internals={_specialProps:o},F=navigator.userAgent,Y=function(){var t,e=F.indexOf("Android"),i=z.createElement("div");return f=-1!==F.indexOf("Safari")&&-1===F.indexOf("Chrome")&&(-1===e||Number(F.substr(e+8,1))>3),_=f&&6>Number(F.substr(F.indexOf("Version/")+8,1)),p=-1!==F.indexOf("Firefox"),(/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(F)||/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(F))&&(c=parseFloat(RegExp.$1)),i.innerHTML="a",t=i.getElementsByTagName("a")[0],t?/^0.55/.test(t.style.opacity):!1}(),B=function(t){return x.test("string"==typeof t?t:(t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?parseFloat(RegExp.$1)/100:1},U=function(t){window.console&&console.log(t)},j="",W="",V=function(t,e){e=e||X;var i,r,s=e.style;if(void 0!==s[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=["O","Moz","ms","Ms","Webkit"],r=5;--r>-1&&void 0===s[i[r]+t];);return r>=0?(W=3===r?"ms":i[r],j="-"+W.toLowerCase()+"-",W+t):null},q=z.defaultView?z.defaultView.getComputedStyle:function(){},H=a.getStyle=function(t,e,i,r,s){var n;return Y||"opacity"!==e?(!r&&t.style[e]?n=t.style[e]:(i=i||q(t))?n=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(P,"-$1").toLowerCase()):t.currentStyle&&(n=t.currentStyle[e]),null==s||n&&"none"!==n&&"auto"!==n&&"auto auto"!==n?n:s):B(t)},G=E.convertToPixels=function(t,i,r,s,n){if("px"===s||!s)return r;if("auto"===s||!r)return 0;var o,l,h,u=k.test(i),f=t,p=X.style,_=0>r;if(_&&(r=-r),"%"===s&&-1!==i.indexOf("border"))o=r/100*(u?t.clientWidth:t.clientHeight);else{if(p.cssText="border:0 solid red;position:"+H(t,"position")+";line-height:0;","%"!==s&&f.appendChild)p[u?"borderLeftWidth":"borderTopWidth"]=r+s;else{if(f=t.parentNode||z.body,l=f._gsCache,h=e.ticker.frame,l&&u&&l.time===h)return l.width*r/100;p[u?"width":"height"]=r+s}f.appendChild(X),o=parseFloat(X[u?"offsetWidth":"offsetHeight"]),f.removeChild(X),u&&"%"===s&&a.cacheWidths!==!1&&(l=f._gsCache=f._gsCache||{},l.time=h,l.width=100*(o/r)),0!==o||n||(o=G(t,i,r,s,!0))}return _?-o:o},Q=E.calculateOffset=function(t,e,i){if("absolute"!==H(t,"position",i))return 0;var r="left"===e?"Left":"Top",s=H(t,"margin"+r,i);return t["offset"+r]-(G(t,e,parseFloat(s),s.replace(y,""))||0)},Z=function(t,e){var i,r,s={};if(e=e||q(t,null))if(i=e.length)for(;--i>-1;)s[e[i].replace(S,C)]=e.getPropertyValue(e[i]);else for(i in e)s[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)"string"==typeof i&&void 0===s[i]&&(s[i.replace(S,C)]=e[i]);return Y||(s.opacity=B(t)),r=Ae(t,e,!1),s.rotation=r.rotation,s.skewX=r.skewX,s.scaleX=r.scaleX,s.scaleY=r.scaleY,s.x=r.x,s.y=r.y,be&&(s.z=r.z,s.rotationX=r.rotationX,s.rotationY=r.rotationY,s.scaleZ=r.scaleZ),s.filters&&delete s.filters,s},$=function(t,e,i,r,s){var n,a,o,l={},h=t.style;for(a in i)"cssText"!==a&&"length"!==a&&isNaN(a)&&(e[a]!==(n=i[a])||s&&s[a])&&-1===a.indexOf("Origin")&&("number"==typeof n||"string"==typeof n)&&(l[a]="auto"!==n||"left"!==a&&"top"!==a?""!==n&&"auto"!==n&&"none"!==n||"string"!=typeof e[a]||""===e[a].replace(v,"")?n:0:Q(t,a),void 0!==h[a]&&(o=new fe(h,a,h[a],o)));if(r)for(a in r)"className"!==a&&(l[a]=r[a]);return{difs:l,firstMPT:o}},K={width:["Left","Right"],height:["Top","Bottom"]},J=["marginLeft","marginRight","marginTop","marginBottom"],te=function(t,e,i){var r=parseFloat("width"===e?t.offsetWidth:t.offsetHeight),s=K[e],n=s.length;for(i=i||q(t,null);--n>-1;)r-=parseFloat(H(t,"padding"+s[n],i,!0))||0,r-=parseFloat(H(t,"border"+s[n]+"Width",i,!0))||0;return r},ee=function(t,e){(null==t||""===t||"auto"===t||"auto auto"===t)&&(t="0 0");var i=t.split(" "),r=-1!==t.indexOf("left")?"0%":-1!==t.indexOf("right")?"100%":i[0],s=-1!==t.indexOf("top")?"0%":-1!==t.indexOf("bottom")?"100%":i[1];return null==s?s="0":"center"===s&&(s="50%"),("center"===r||isNaN(parseFloat(r))&&-1===(r+"").indexOf("="))&&(r="50%"),e&&(e.oxp=-1!==r.indexOf("%"),e.oyp=-1!==s.indexOf("%"),e.oxr="="===r.charAt(1),e.oyr="="===s.charAt(1),e.ox=parseFloat(r.replace(v,"")),e.oy=parseFloat(s.replace(v,""))),r+" "+s+(i.length>2?" "+i[2]:"")},ie=function(t,e){return"string"==typeof t&&"="===t.charAt(1)?parseInt(t.charAt(0)+"1",10)*parseFloat(t.substr(2)):parseFloat(t)-parseFloat(e)},re=function(t,e){return null==t?e:"string"==typeof t&&"="===t.charAt(1)?parseInt(t.charAt(0)+"1",10)*parseFloat(t.substr(2))+e:parseFloat(t)},se=function(t,e,i,r){var s,n,a,o,l=1e-6;return null==t?o=e:"number"==typeof t?o=t:(s=360,n=t.split("_"),a=Number(n[0].replace(v,""))*(-1===t.indexOf("rad")?1:L)-("="===t.charAt(1)?0:e),n.length&&(r&&(r[i]=e+a),-1!==t.indexOf("short")&&(a%=s,a!==a%(s/2)&&(a=0>a?a+s:a-s)),-1!==t.indexOf("_cw")&&0>a?a=(a+9999999999*s)%s-(0|a/s)*s:-1!==t.indexOf("ccw")&&a>0&&(a=(a-9999999999*s)%s-(0|a/s)*s)),o=e+a),l>o&&o>-l&&(o=0),o},ne={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ae=function(t,e,i){return t=0>t?t+1:t>1?t-1:t,0|255*(1>6*t?e+6*(i-e)*t:.5>t?i:2>3*t?e+6*(i-e)*(2/3-t):e)+.5},oe=a.parseColor=function(t){var e,i,r,s,n,a;return t&&""!==t?"number"==typeof t?[t>>16,255&t>>8,255&t]:(","===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),ne[t]?ne[t]:"#"===t.charAt(0)?(4===t.length&&(e=t.charAt(1),i=t.charAt(2),r=t.charAt(3),t="#"+e+e+i+i+r+r),t=parseInt(t.substr(1),16),[t>>16,255&t>>8,255&t]):"hsl"===t.substr(0,3)?(t=t.match(d),s=Number(t[0])%360/360,n=Number(t[1])/100,a=Number(t[2])/100,i=.5>=a?a*(n+1):a+n-a*n,e=2*a-i,t.length>3&&(t[3]=Number(t[3])),t[0]=ae(s+1/3,e,i),t[1]=ae(s,e,i),t[2]=ae(s-1/3,e,i),t):(t=t.match(d)||ne.transparent,t[0]=Number(t[0]),t[1]=Number(t[1]),t[2]=Number(t[2]),t.length>3&&(t[3]=Number(t[3])),t)):ne.black},le="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b";for(l in ne)le+="|"+l+"\\b";le=RegExp(le+")","gi");var he=function(t,e,i,r){if(null==t)return function(t){return t};var s,n=e?(t.match(le)||[""])[0]:"",a=t.split(n).join("").match(g)||[],o=t.substr(0,t.indexOf(a[0])),l=")"===t.charAt(t.length-1)?")":"",h=-1!==t.indexOf(" ")?" ":",",u=a.length,f=u>0?a[0].replace(d,""):"";return u?s=e?function(t){var e,p,_,c;if("number"==typeof t)t+=f;else if(r&&D.test(t)){for(c=t.replace(D,"|").split("|"),_=0;c.length>_;_++)c[_]=s(c[_]);return c.join(",")}if(e=(t.match(le)||[n])[0],p=t.split(e).join("").match(g)||[],_=p.length,u>_--)for(;u>++_;)p[_]=i?p[0|(_-1)/2]:a[_];return o+p.join(h)+h+e+l+(-1!==t.indexOf("inset")?" inset":"")}:function(t){var e,n,p;if("number"==typeof t)t+=f;else if(r&&D.test(t)){for(n=t.replace(D,"|").split("|"),p=0;n.length>p;p++)n[p]=s(n[p]);return n.join(",")}if(e=t.match(g)||[],p=e.length,u>p--)for(;u>++p;)e[p]=i?e[0|(p-1)/2]:a[p];return o+e.join(h)+l}:function(t){return t}},ue=function(t){return t=t.split(","),function(e,i,r,s,n,a,o){var l,h=(i+"").split(" ");for(o={},l=0;4>l;l++)o[t[l]]=h[l]=h[l]||h[(l-1)/2>>0];return s.parse(e,o,n,a)}},fe=(E._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,r,s,n=this.data,a=n.proxy,o=n.firstMPT,l=1e-6;o;)e=a[o.v],o.r?e=Math.round(e):l>e&&e>-l&&(e=0),o.t[o.p]=e,o=o._next;if(n.autoRotate&&(n.autoRotate.rotation=a.rotation),1===t)for(o=n.firstMPT;o;){if(i=o.t,i.type){if(1===i.type){for(s=i.xs0+i.s+i.xs1,r=1;i.l>r;r++)s+=i["xn"+r]+i["xs"+(r+1)];i.e=s}}else i.e=i.s+i.xs0;o=o._next}},function(t,e,i,r,s){this.t=t,this.p=e,this.v=i,this.r=s,r&&(r._prev=this,this._next=r)}),pe=(E._parseToProxy=function(t,e,i,r,s,n){var a,o,l,h,u,f=r,p={},_={},c=i._transform,d=N;for(i._transform=null,N=e,r=u=i.parse(t,e,r,s),N=d,n&&(i._transform=c,f&&(f._prev=null,f._prev&&(f._prev._next=null)));r&&r!==f;){if(1>=r.type&&(o=r.p,_[o]=r.s+r.c,p[o]=r.s,n||(h=new fe(r,"s",o,h,r.r),r.c=0),1===r.type))for(a=r.l;--a>0;)l="xn"+a,o=r.p+"_"+l,_[o]=r.data[l],p[o]=r[l],n||(h=new fe(r,l,o,h,r.rxp[l]));r=r._next}return{proxy:p,end:_,firstMPT:h,pt:u}},E.CSSPropTween=function(t,e,r,s,a,o,l,h,u,f,p){this.t=t,this.p=e,this.s=r,this.c=s,this.n=l||e,t instanceof pe||n.push(this.n),this.r=h,this.type=o||0,u&&(this.pr=u,i=!0),this.b=void 0===f?r:f,this.e=void 0===p?r+s:p,a&&(this._next=a,a._prev=this)}),_e=a.parseComplex=function(t,e,i,r,s,n,a,o,l,u){i=i||n||"",a=new pe(t,e,0,0,a,u?2:1,null,!1,o,i,r),r+="";var f,p,_,c,g,v,y,x,T,w,P,S,R=i.split(", ").join(",").split(" "),C=r.split(", ").join(",").split(" "),k=R.length,O=h!==!1;for((-1!==r.indexOf(",")||-1!==i.indexOf(","))&&(R=R.join(" ").replace(D,", ").split(" "),C=C.join(" ").replace(D,", ").split(" "),k=R.length),k!==C.length&&(R=(n||"").split(" "),k=R.length),a.plugin=l,a.setRatio=u,f=0;k>f;f++)if(c=R[f],g=C[f],x=parseFloat(c),x||0===x)a.appendXtra("",x,ie(g,x),g.replace(m,""),O&&-1!==g.indexOf("px"),!0);else if(s&&("#"===c.charAt(0)||ne[c]||b.test(c)))S=","===g.charAt(g.length-1)?"),":")",c=oe(c),g=oe(g),T=c.length+g.length>6,T&&!Y&&0===g[3]?(a["xs"+a.l]+=a.l?" transparent":"transparent",a.e=a.e.split(C[f]).join("transparent")):(Y||(T=!1),a.appendXtra(T?"rgba(":"rgb(",c[0],g[0]-c[0],",",!0,!0).appendXtra("",c[1],g[1]-c[1],",",!0).appendXtra("",c[2],g[2]-c[2],T?",":S,!0),T&&(c=4>c.length?1:c[3],a.appendXtra("",c,(4>g.length?1:g[3])-c,S,!1)));else if(v=c.match(d)){if(y=g.match(m),!y||y.length!==v.length)return a;for(_=0,p=0;v.length>p;p++)P=v[p],w=c.indexOf(P,_),a.appendXtra(c.substr(_,w-_),Number(P),ie(y[p],P),"",O&&"px"===c.substr(w+P.length,2),0===p),_=w+P.length;a["xs"+a.l]+=c.substr(_)}else a["xs"+a.l]+=a.l?" "+c:c;if(-1!==r.indexOf("=")&&a.data){for(S=a.xs0+a.data.s,f=1;a.l>f;f++)S+=a["xs"+f]+a.data["xn"+f];a.e=S+a["xs"+f]}return a.l||(a.type=-1,a.xs0=a.e),a.xfirst||a},ce=9;for(l=pe.prototype,l.l=l.pr=0;--ce>0;)l["xn"+ce]=0,l["xs"+ce]="";l.xs0="",l._next=l._prev=l.xfirst=l.data=l.plugin=l.setRatio=l.rxp=null,l.appendXtra=function(t,e,i,r,s,n){var a=this,o=a.l;return a["xs"+o]+=n&&o?" "+t:t||"",i||0===o||a.plugin?(a.l++,a.type=a.setRatio?2:1,a["xs"+a.l]=r||"",o>0?(a.data["xn"+o]=e+i,a.rxp["xn"+o]=s,a["xn"+o]=e,a.plugin||(a.xfirst=new pe(a,"xn"+o,e,i,a.xfirst||a,0,a.n,s,a.pr),a.xfirst.xs0=0),a):(a.data={s:e+i},a.rxp={},a.s=e,a.c=i,a.r=s,a)):(a["xs"+o]+=e+(r||""),a)};var de=function(t,e){e=e||{},this.p=e.prefix?V(t)||t:t,o[t]=o[this.p]=this,this.format=e.formatter||he(e.defaultValue,e.color,e.collapsible,e.multi),e.parser&&(this.parse=e.parser),this.clrs=e.color,this.multi=e.multi,this.keyword=e.keyword,this.dflt=e.defaultValue,this.pr=e.priority||0},me=E._registerComplexSpecialProp=function(t,e,i){"object"!=typeof e&&(e={parser:i});var r,s,n=t.split(","),a=e.defaultValue;for(i=i||[a],r=0;n.length>r;r++)e.prefix=0===r&&e.prefix,e.defaultValue=i[r]||a,s=new de(n[r],e)},ge=function(t){if(!o[t]){var e=t.charAt(0).toUpperCase()+t.substr(1)+"Plugin";me(t,{parser:function(t,i,r,s,n,a,l){var h=(_gsScope.GreenSockGlobals||_gsScope).com.greensock.plugins[e];return h?(h._cssRegister(),o[r].parse(t,i,r,s,n,a,l)):(U("Error: "+e+" js file not loaded."),n)}})}};l=de.prototype,l.parseComplex=function(t,e,i,r,s,n){var a,o,l,h,u,f,p=this.keyword;if(this.multi&&(D.test(i)||D.test(e)?(o=e.replace(D,"|").split("|"),l=i.replace(D,"|").split("|")):p&&(o=[e],l=[i])),l){for(h=l.length>o.length?l.length:o.length,a=0;h>a;a++)e=o[a]=o[a]||this.dflt,i=l[a]=l[a]||this.dflt,p&&(u=e.indexOf(p),f=i.indexOf(p),u!==f&&(i=-1===f?l:o,i[a]+=" "+p));e=o.join(", "),i=l.join(", ")}return _e(t,this.p,e,i,this.clrs,this.dflt,r,this.pr,s,n)},l.parse=function(t,e,i,r,n,a){return this.parseComplex(t.style,this.format(H(t,this.p,s,!1,this.dflt)),this.format(e),n,a)},a.registerSpecialProp=function(t,e,i){me(t,{parser:function(t,r,s,n,a,o){var l=new pe(t,s,0,0,a,2,s,!1,i);return l.plugin=o,l.setRatio=e(t,r,n._tween,s),l},priority:i})};var ve,ye="scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent".split(","),xe=V("transform"),Te=j+"transform",we=V("transformOrigin"),be=null!==V("perspective"),Pe=E.Transform=function(){this.skewY=0},Se=window.SVGElement,Re=function(t,e,i){var r,s=z.createElementNS("http://www.w3.org/2000/svg",t),n=/([a-z])([A-Z])/g;for(r in i)s.setAttributeNS(null,r.replace(n,"$1-$2").toLowerCase(),i[r]);return e.appendChild(s),s},Ce=document.documentElement,ke=function(){var t,e,i,r=c||/Android/i.test(F)&&!window.chrome;return z.createElementNS&&!r&&(t=Re("svg",Ce),e=Re("rect",t,{width:100,height:50,x:100}),i=e.getBoundingClientRect().left,e.style[we]="50% 50%",e.style[xe]="scale(0.5,0.5)",r=i===e.getBoundingClientRect().left,Ce.removeChild(t)),r}(),Oe=function(t,e,i){var r=t.getBBox();e=ee(e).split(" "),i.xOrigin=(-1!==e[0].indexOf("%")?parseFloat(e[0])/100*r.width:parseFloat(e[0]))+r.x,i.yOrigin=(-1!==e[1].indexOf("%")?parseFloat(e[1])/100*r.height:parseFloat(e[1]))+r.y},Ae=E.getTransform=function(t,e,i,r){if(t._gsTransform&&i&&!r)return t._gsTransform;var n,o,l,h,u,f,p,_,c,d,m,g,v,y=i?t._gsTransform||new Pe:new Pe,x=0>y.scaleX,T=2e-5,w=1e5,b=179.99,P=b*M,S=be?parseFloat(H(t,we,e,!1,"0 0 0").split(" ")[2])||y.zOrigin||0:0,R=parseFloat(a.defaultTransformPerspective)||0;if(xe?n=H(t,Te,e,!0):t.currentStyle&&(n=t.currentStyle.filter.match(O),n=n&&4===n.length?[n[0].substr(4),Number(n[2].substr(4)),Number(n[1].substr(4)),n[3].substr(4),y.x||0,y.y||0].join(","):""),n&&"none"!==n&&"matrix(1, 0, 0, 1, 0, 0)"!==n){for(o=(n||"").match(/(?:\-|\b)[\d\-\.e]+\b/gi)||[],l=o.length;--l>-1;)h=Number(o[l]),o[l]=(u=h-(h|=0))?(0|u*w+(0>u?-.5:.5))/w+h:h;if(16===o.length){var C=o[8],k=o[9],A=o[10],D=o[12],N=o[13],z=o[14];if(y.zOrigin&&(z=-y.zOrigin,D=C*z-o[12],N=k*z-o[13],z=A*z+y.zOrigin-o[14]),!i||r||null==y.rotationX){var X,I,E,F,Y,B,U,j=o[0],W=o[1],V=o[2],q=o[3],G=o[4],Q=o[5],Z=o[6],$=o[7],K=o[11],J=Math.atan2(Z,A),te=-P>J||J>P;y.rotationX=J*L,J&&(F=Math.cos(-J),Y=Math.sin(-J),X=G*F+C*Y,I=Q*F+k*Y,E=Z*F+A*Y,C=G*-Y+C*F,k=Q*-Y+k*F,A=Z*-Y+A*F,K=$*-Y+K*F,G=X,Q=I,Z=E),J=Math.atan2(C,j),y.rotationY=J*L,J&&(B=-P>J||J>P,F=Math.cos(-J),Y=Math.sin(-J),X=j*F-C*Y,I=W*F-k*Y,E=V*F-A*Y,k=W*Y+k*F,A=V*Y+A*F,K=q*Y+K*F,j=X,W=I,V=E),J=Math.atan2(W,Q),y.rotation=J*L,J&&(U=-P>J||J>P,F=Math.cos(-J),Y=Math.sin(-J),j=j*F+G*Y,I=W*F+Q*Y,Q=W*-Y+Q*F,Z=V*-Y+Z*F,W=I),U&&te?y.rotation=y.rotationX=0:U&&B?y.rotation=y.rotationY=0:B&&te&&(y.rotationY=y.rotationX=0),y.scaleX=(0|Math.sqrt(j*j+W*W)*w+.5)/w,y.scaleY=(0|Math.sqrt(Q*Q+k*k)*w+.5)/w,y.scaleZ=(0|Math.sqrt(Z*Z+A*A)*w+.5)/w,y.skewX=0,y.perspective=K?1/(0>K?-K:K):0,y.x=D,y.y=N,y.z=z}}else if(!(be&&!r&&o.length&&y.x===o[4]&&y.y===o[5]&&(y.rotationX||y.rotationY)||void 0!==y.x&&"none"===H(t,"display",e))){var ee=o.length>=6,ie=ee?o[0]:1,re=o[1]||0,se=o[2]||0,ne=ee?o[3]:1;y.x=o[4]||0,y.y=o[5]||0,f=Math.sqrt(ie*ie+re*re),p=Math.sqrt(ne*ne+se*se),_=ie||re?Math.atan2(re,ie)*L:y.rotation||0,c=se||ne?Math.atan2(se,ne)*L+_:y.skewX||0,d=f-Math.abs(y.scaleX||0),m=p-Math.abs(y.scaleY||0),Math.abs(c)>90&&270>Math.abs(c)&&(x?(f*=-1,c+=0>=_?180:-180,_+=0>=_?180:-180):(p*=-1,c+=0>=c?180:-180)),g=(_-y.rotation)%180,v=(c-y.skewX)%180,(void 0===y.skewX||d>T||-T>d||m>T||-T>m||g>-b&&b>g&&false|g*w||v>-b&&b>v&&false|v*w)&&(y.scaleX=f,y.scaleY=p,y.rotation=_,y.skewX=c),be&&(y.rotationX=y.rotationY=y.z=0,y.perspective=R,y.scaleZ=1)}y.zOrigin=S;for(l in y)T>y[l]&&y[l]>-T&&(y[l]=0)}else y={x:0,y:0,z:0,scaleX:1,scaleY:1,scaleZ:1,skewX:0,skewY:0,perspective:R,rotation:0,rotationX:0,rotationY:0,zOrigin:0};return i&&(t._gsTransform=y),y.svg=Se&&t instanceof Se&&t.parentNode instanceof Se,y.svg&&(Oe(t,H(t,we,s,!1,"50% 50%")+"",y),ve=a.useSVGTransformAttr||ke),y.xPercent=y.yPercent=0,y},De=function(t){var e,i,r=this.data,s=-r.rotation*M,n=s+r.skewX*M,a=1e5,o=(0|Math.cos(s)*r.scaleX*a)/a,l=(0|Math.sin(s)*r.scaleX*a)/a,h=(0|Math.sin(n)*-r.scaleY*a)/a,u=(0|Math.cos(n)*r.scaleY*a)/a,f=this.t.style,p=this.t.currentStyle;if(p){i=l,l=-h,h=-i,e=p.filter,f.filter="";var _,d,m=this.t.offsetWidth,g=this.t.offsetHeight,v="absolute"!==p.position,T="progid:DXImageTransform.Microsoft.Matrix(M11="+o+", M12="+l+", M21="+h+", M22="+u,w=r.x+m*r.xPercent/100,b=r.y+g*r.yPercent/100;if(null!=r.ox&&(_=(r.oxp?.01*m*r.ox:r.ox)-m/2,d=(r.oyp?.01*g*r.oy:r.oy)-g/2,w+=_-(_*o+d*l),b+=d-(_*h+d*u)),v?(_=m/2,d=g/2,T+=", Dx="+(_-(_*o+d*l)+w)+", Dy="+(d-(_*h+d*u)+b)+")"):T+=", sizingMethod='auto expand')",f.filter=-1!==e.indexOf("DXImageTransform.Microsoft.Matrix(")?e.replace(A,T):T+" "+e,(0===t||1===t)&&1===o&&0===l&&0===h&&1===u&&(v&&-1===T.indexOf("Dx=0, Dy=0")||x.test(e)&&100!==parseFloat(RegExp.$1)||-1===e.indexOf("gradient("&&e.indexOf("Alpha"))&&f.removeAttribute("filter")),!v){var P,S,R,C=8>c?1:-1;for(_=r.ieOffsetX||0,d=r.ieOffsetY||0,r.ieOffsetX=Math.round((m-((0>o?-o:o)*m+(0>l?-l:l)*g))/2+w),r.ieOffsetY=Math.round((g-((0>u?-u:u)*g+(0>h?-h:h)*m))/2+b),ce=0;4>ce;ce++)S=J[ce],P=p[S],i=-1!==P.indexOf("px")?parseFloat(P):G(this.t,S,parseFloat(P),P.replace(y,""))||0,R=i!==r[S]?2>ce?-r.ieOffsetX:-r.ieOffsetY:2>ce?_-r.ieOffsetX:d-r.ieOffsetY,f[S]=(r[S]=Math.round(i-R*(0===ce||2===ce?1:C)))+"px"}}},Me=E.set3DTransformRatio=function(t){var e,i,r,s,n,a,o,l,h,u,f,_,c,d,m,g,v,y,x,T,w,b,P,S=this.data,R=this.t.style,C=S.rotation*M,k=S.scaleX,O=S.scaleY,A=S.scaleZ,D=S.x,L=S.y,N=S.z,z=S.perspective;if(!(1!==t&&0!==t||"auto"!==S.force3D||S.rotationY||S.rotationX||1!==A||z||N))return Le.call(this,t),void 0;if(p){var X=1e-4;X>k&&k>-X&&(k=A=2e-5),X>O&&O>-X&&(O=A=2e-5),!z||S.z||S.rotationX||S.rotationY||(z=0)}if(C||S.skewX)y=Math.cos(C),x=Math.sin(C),e=y,n=x,S.skewX&&(C-=S.skewX*M,y=Math.cos(C),x=Math.sin(C),"simple"===S.skewType&&(T=Math.tan(S.skewX*M),T=Math.sqrt(1+T*T),y*=T,x*=T)),i=-x,a=y;else{if(!(S.rotationY||S.rotationX||1!==A||z||S.svg))return R[xe]=(S.xPercent||S.yPercent?"translate("+S.xPercent+"%,"+S.yPercent+"%) translate3d(":"translate3d(")+D+"px,"+L+"px,"+N+"px)"+(1!==k||1!==O?" scale("+k+","+O+")":""),void 0;e=a=1,i=n=0}f=1,r=s=o=l=h=u=_=c=d=0,m=z?-1/z:0,g=S.zOrigin,v=1e5,C=S.rotationY*M,C&&(y=Math.cos(C),x=Math.sin(C),h=f*-x,c=m*-x,r=e*x,o=n*x,f*=y,m*=y,e*=y,n*=y),C=S.rotationX*M,C&&(y=Math.cos(C),x=Math.sin(C),T=i*y+r*x,w=a*y+o*x,b=u*y+f*x,P=d*y+m*x,r=i*-x+r*y,o=a*-x+o*y,f=u*-x+f*y,m=d*-x+m*y,i=T,a=w,u=b,d=P),1!==A&&(r*=A,o*=A,f*=A,m*=A),1!==O&&(i*=O,a*=O,u*=O,d*=O),1!==k&&(e*=k,n*=k,h*=k,c*=k),g&&(_-=g,s=r*_,l=o*_,_=f*_+g),S.svg&&(s+=S.xOrigin-(S.xOrigin*e+S.yOrigin*i),l+=S.yOrigin-(S.xOrigin*n+S.yOrigin*a)),s=(T=(s+=D)-(s|=0))?(0|T*v+(0>T?-.5:.5))/v+s:s,l=(T=(l+=L)-(l|=0))?(0|T*v+(0>T?-.5:.5))/v+l:l,_=(T=(_+=N)-(_|=0))?(0|T*v+(0>T?-.5:.5))/v+_:_,R[xe]=(S.xPercent||S.yPercent?"translate("+S.xPercent+"%,"+S.yPercent+"%) matrix3d(":"matrix3d(")+[(0|e*v)/v,(0|n*v)/v,(0|h*v)/v,(0|c*v)/v,(0|i*v)/v,(0|a*v)/v,(0|u*v)/v,(0|d*v)/v,(0|r*v)/v,(0|o*v)/v,(0|f*v)/v,(0|m*v)/v,s,l,_,z?1+-_/z:1].join(",")+")"},Le=E.set2DTransformRatio=function(t){var e,i,r,s,n,a,o,l,h,u,f,p=this.data,_=this.t,c=_.style,d=p.x,m=p.y;return!(p.rotationX||p.rotationY||p.z||p.force3D===!0||"auto"===p.force3D&&1!==t&&0!==t)||p.svg&&ve||!be?(s=p.scaleX,n=p.scaleY,p.rotation||p.skewX||p.svg?(e=p.rotation*M,i=e-p.skewX*M,r=1e5,a=Math.cos(e)*s,o=Math.sin(e)*s,l=Math.sin(i)*-n,h=Math.cos(i)*n,p.svg&&(d+=p.xOrigin-(p.xOrigin*a+p.yOrigin*l),m+=p.yOrigin-(p.xOrigin*o+p.yOrigin*h),f=1e-6,f>d&&d>-f&&(d=0),f>m&&m>-f&&(m=0)),u=(0|a*r)/r+","+(0|o*r)/r+","+(0|l*r)/r+","+(0|h*r)/r+","+d+","+m+")",p.svg&&ve?_.setAttribute("transform","matrix("+u):c[xe]=(p.xPercent||p.yPercent?"translate("+p.xPercent+"%,"+p.yPercent+"%) matrix(":"matrix(")+u):c[xe]=(p.xPercent||p.yPercent?"translate("+p.xPercent+"%,"+p.yPercent+"%) matrix(":"matrix(")+s+",0,0,"+n+","+d+","+m+")",void 0):(this.setRatio=Me,Me.call(this,t),void 0)};me("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent",{parser:function(t,e,i,r,n,o,l){if(r._transform)return n;var h,u,f,p,_,c,d,m=r._transform=Ae(t,s,!0,l.parseTransform),g=t.style,v=1e-6,y=ye.length,x=l,T={};if("string"==typeof x.transform&&xe)f=X.style,f[xe]=x.transform,f.display="block",f.position="absolute",z.body.appendChild(X),h=Ae(X,null,!1),z.body.removeChild(X);else if("object"==typeof x){if(h={scaleX:re(null!=x.scaleX?x.scaleX:x.scale,m.scaleX),scaleY:re(null!=x.scaleY?x.scaleY:x.scale,m.scaleY),scaleZ:re(x.scaleZ,m.scaleZ),x:re(x.x,m.x),y:re(x.y,m.y),z:re(x.z,m.z),xPercent:re(x.xPercent,m.xPercent),yPercent:re(x.yPercent,m.yPercent),perspective:re(x.transformPerspective,m.perspective)},d=x.directionalRotation,null!=d)if("object"==typeof d)for(f in d)x[f]=d[f];else x.rotation=d;"string"==typeof x.x&&-1!==x.x.indexOf("%")&&(h.x=0,h.xPercent=re(x.x,m.xPercent)),"string"==typeof x.y&&-1!==x.y.indexOf("%")&&(h.y=0,h.yPercent=re(x.y,m.yPercent)),h.rotation=se("rotation"in x?x.rotation:"shortRotation"in x?x.shortRotation+"_short":"rotationZ"in x?x.rotationZ:m.rotation,m.rotation,"rotation",T),be&&(h.rotationX=se("rotationX"in x?x.rotationX:"shortRotationX"in x?x.shortRotationX+"_short":m.rotationX||0,m.rotationX,"rotationX",T),h.rotationY=se("rotationY"in x?x.rotationY:"shortRotationY"in x?x.shortRotationY+"_short":m.rotationY||0,m.rotationY,"rotationY",T)),h.skewX=null==x.skewX?m.skewX:se(x.skewX,m.skewX),h.skewY=null==x.skewY?m.skewY:se(x.skewY,m.skewY),(u=h.skewY-m.skewY)&&(h.skewX+=u,h.rotation+=u)}for(be&&null!=x.force3D&&(m.force3D=x.force3D,c=!0),m.skewType=x.skewType||m.skewType||a.defaultSkewType,_=m.force3D||m.z||m.rotationX||m.rotationY||h.z||h.rotationX||h.rotationY||h.perspective,_||null==x.scale||(h.scaleZ=1);--y>-1;)i=ye[y],p=h[i]-m[i],(p>v||-v>p||null!=x[i]||null!=N[i])&&(c=!0,n=new pe(m,i,m[i],p,n),i in T&&(n.e=T[i]),n.xs0=0,n.plugin=o,r._overwriteProps.push(n.n));return p=x.transformOrigin,p&&m.svg&&(Oe(t,p,h),n=new pe(m,"xOrigin",m.xOrigin,h.xOrigin-m.xOrigin,n,-1,"transformOrigin"),n.b=m.xOrigin,n.e=n.xs0=h.xOrigin,n=new pe(m,"yOrigin",m.yOrigin,h.yOrigin-m.yOrigin,n,-1,"transformOrigin"),n.b=m.yOrigin,n.e=n.xs0=h.yOrigin,p="0px 0px"),(p||be&&_&&m.zOrigin)&&(xe?(c=!0,i=we,p=(p||H(t,i,s,!1,"50% 50%"))+"",n=new pe(g,i,0,0,n,-1,"transformOrigin"),n.b=g[i],n.plugin=o,be?(f=m.zOrigin,p=p.split(" "),m.zOrigin=(p.length>2&&(0===f||"0px"!==p[2])?parseFloat(p[2]):f)||0,n.xs0=n.e=p[0]+" "+(p[1]||"50%")+" 0px",n=new pe(m,"zOrigin",0,0,n,-1,n.n),n.b=f,n.xs0=n.e=m.zOrigin):n.xs0=n.e=p):ee(p+"",m)),c&&(r._transformType=m.svg&&ve||!_&&3!==this._transformType?2:3),n},prefix:!0}),me("boxShadow",{defaultValue:"0px 0px 0px 0px #999",prefix:!0,color:!0,multi:!0,keyword:"inset"}),me("borderRadius",{defaultValue:"0px",parser:function(t,e,i,n,a){e=this.format(e);var o,l,h,u,f,p,_,c,d,m,g,v,y,x,T,w,b=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],P=t.style;for(d=parseFloat(t.offsetWidth),m=parseFloat(t.offsetHeight),o=e.split(" "),l=0;b.length>l;l++)this.p.indexOf("border")&&(b[l]=V(b[l])),f=u=H(t,b[l],s,!1,"0px"),-1!==f.indexOf(" ")&&(u=f.split(" "),f=u[0],u=u[1]),p=h=o[l],_=parseFloat(f),v=f.substr((_+"").length),y="="===p.charAt(1),y?(c=parseInt(p.charAt(0)+"1",10),p=p.substr(2),c*=parseFloat(p),g=p.substr((c+"").length-(0>c?1:0))||""):(c=parseFloat(p),g=p.substr((c+"").length)),""===g&&(g=r[i]||v),g!==v&&(x=G(t,"borderLeft",_,v),T=G(t,"borderTop",_,v),"%"===g?(f=100*(x/d)+"%",u=100*(T/m)+"%"):"em"===g?(w=G(t,"borderLeft",1,"em"),f=x/w+"em",u=T/w+"em"):(f=x+"px",u=T+"px"),y&&(p=parseFloat(f)+c+g,h=parseFloat(u)+c+g)),a=_e(P,b[l],f+" "+u,p+" "+h,!1,"0px",a);return a},prefix:!0,formatter:he("0px 0px 0px 0px",!1,!0)}),me("backgroundPosition",{defaultValue:"0 0",parser:function(t,e,i,r,n,a){var o,l,h,u,f,p,_="background-position",d=s||q(t,null),m=this.format((d?c?d.getPropertyValue(_+"-x")+" "+d.getPropertyValue(_+"-y"):d.getPropertyValue(_):t.currentStyle.backgroundPositionX+" "+t.currentStyle.backgroundPositionY)||"0 0"),g=this.format(e);if(-1!==m.indexOf("%")!=(-1!==g.indexOf("%"))&&(p=H(t,"backgroundImage").replace(R,""),p&&"none"!==p)){for(o=m.split(" "),l=g.split(" "),I.setAttribute("src",p),h=2;--h>-1;)m=o[h],u=-1!==m.indexOf("%"),u!==(-1!==l[h].indexOf("%"))&&(f=0===h?t.offsetWidth-I.width:t.offsetHeight-I.height,o[h]=u?parseFloat(m)/100*f+"px":100*(parseFloat(m)/f)+"%");m=o.join(" ")}return this.parseComplex(t.style,m,g,n,a)},formatter:ee}),me("backgroundSize",{defaultValue:"0 0",formatter:ee}),me("perspective",{defaultValue:"0px",prefix:!0}),me("perspectiveOrigin",{defaultValue:"50% 50%",prefix:!0}),me("transformStyle",{prefix:!0}),me("backfaceVisibility",{prefix:!0}),me("userSelect",{prefix:!0}),me("margin",{parser:ue("marginTop,marginRight,marginBottom,marginLeft")}),me("padding",{parser:ue("paddingTop,paddingRight,paddingBottom,paddingLeft")}),me("clip",{defaultValue:"rect(0px,0px,0px,0px)",parser:function(t,e,i,r,n,a){var o,l,h;return 9>c?(l=t.currentStyle,h=8>c?" ":",",o="rect("+l.clipTop+h+l.clipRight+h+l.clipBottom+h+l.clipLeft+")",e=this.format(e).split(",").join(h)):(o=this.format(H(t,this.p,s,!1,this.dflt)),e=this.format(e)),this.parseComplex(t.style,o,e,n,a)}}),me("textShadow",{defaultValue:"0px 0px 0px #999",color:!0,multi:!0}),me("autoRound,strictUnits",{parser:function(t,e,i,r,s){return s}}),me("border",{defaultValue:"0px solid #000",parser:function(t,e,i,r,n,a){return this.parseComplex(t.style,this.format(H(t,"borderTopWidth",s,!1,"0px")+" "+H(t,"borderTopStyle",s,!1,"solid")+" "+H(t,"borderTopColor",s,!1,"#000")),this.format(e),n,a)},color:!0,formatter:function(t){var e=t.split(" ");return e[0]+" "+(e[1]||"solid")+" "+(t.match(le)||["#000"])[0]}}),me("borderWidth",{parser:ue("borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth")}),me("float,cssFloat,styleFloat",{parser:function(t,e,i,r,s){var n=t.style,a="cssFloat"in n?"cssFloat":"styleFloat";return new pe(n,a,0,0,s,-1,i,!1,0,n[a],e)}});var Ne=function(t){var e,i=this.t,r=i.filter||H(this.data,"filter")||"",s=0|this.s+this.c*t;100===s&&(-1===r.indexOf("atrix(")&&-1===r.indexOf("radient(")&&-1===r.indexOf("oader(")?(i.removeAttribute("filter"),e=!H(this.data,"filter")):(i.filter=r.replace(w,""),e=!0)),e||(this.xn1&&(i.filter=r=r||"alpha(opacity="+s+")"),-1===r.indexOf("pacity")?0===s&&this.xn1||(i.filter=r+" alpha(opacity="+s+")"):i.filter=r.replace(x,"opacity="+s))};me("opacity,alpha,autoAlpha",{defaultValue:"1",parser:function(t,e,i,r,n,a){var o=parseFloat(H(t,"opacity",s,!1,"1")),l=t.style,h="autoAlpha"===i;return"string"==typeof e&&"="===e.charAt(1)&&(e=("-"===e.charAt(0)?-1:1)*parseFloat(e.substr(2))+o),h&&1===o&&"hidden"===H(t,"visibility",s)&&0!==e&&(o=0),Y?n=new pe(l,"opacity",o,e-o,n):(n=new pe(l,"opacity",100*o,100*(e-o),n),n.xn1=h?1:0,l.zoom=1,n.type=2,n.b="alpha(opacity="+n.s+")",n.e="alpha(opacity="+(n.s+n.c)+")",n.data=t,n.plugin=a,n.setRatio=Ne),h&&(n=new pe(l,"visibility",0,0,n,-1,null,!1,0,0!==o?"inherit":"hidden",0===e?"hidden":"inherit"),n.xs0="inherit",r._overwriteProps.push(n.n),r._overwriteProps.push(i)),n}});var ze=function(t,e){e&&(t.removeProperty?("ms"===e.substr(0,2)&&(e="M"+e.substr(1)),t.removeProperty(e.replace(P,"-$1").toLowerCase())):t.removeAttribute(e))},Xe=function(t){if(this.t._gsClassPT=this,1===t||0===t){this.t.setAttribute("class",0===t?this.b:this.e);for(var e=this.data,i=this.t.style;e;)e.v?i[e.p]=e.v:ze(i,e.p),e=e._next;1===t&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.getAttribute("class")!==this.e&&this.t.setAttribute("class",this.e)};me("className",{parser:function(t,e,r,n,a,o,l){var h,u,f,p,_,c=t.getAttribute("class")||"",d=t.style.cssText;if(a=n._classNamePT=new pe(t,r,0,0,a,2),a.setRatio=Xe,a.pr=-11,i=!0,a.b=c,u=Z(t,s),f=t._gsClassPT){for(p={},_=f.data;_;)p[_.p]=1,_=_._next;f.setRatio(1)}return t._gsClassPT=a,a.e="="!==e.charAt(1)?e:c.replace(RegExp("\\s*\\b"+e.substr(2)+"\\b"),"")+("+"===e.charAt(0)?" "+e.substr(2):""),n._tween._duration&&(t.setAttribute("class",a.e),h=$(t,u,Z(t),l,p),t.setAttribute("class",c),a.data=h.firstMPT,t.style.cssText=d,a=a.xfirst=n.parse(t,h.difs,a,o)),a}});var Ie=function(t){if((1===t||0===t)&&this.data._totalTime===this.data._totalDuration&&"isFromStart"!==this.data.data){var e,i,r,s,n=this.t.style,a=o.transform.parse;if("all"===this.e)n.cssText="",s=!0;else for(e=this.e.split(" ").join("").split(","),r=e.length;--r>-1;)i=e[r],o[i]&&(o[i].parse===a?s=!0:i="transformOrigin"===i?we:o[i].p),ze(n,i);s&&(ze(n,xe),this.t._gsTransform&&delete this.t._gsTransform)}};for(me("clearProps",{parser:function(t,e,r,s,n){return n=new pe(t,r,0,0,n,2),n.setRatio=Ie,n.e=e,n.pr=-10,n.data=s._tween,i=!0,n}}),l="bezier,throwProps,physicsProps,physics2D".split(","),ce=l.length;ce--;)ge(l[ce]);l=a.prototype,l._firstPT=null,l._onInitTween=function(t,e,o){if(!t.nodeType)return!1;this._target=t,this._tween=o,this._vars=e,h=e.autoRound,i=!1,r=e.suffixMap||a.suffixMap,s=q(t,""),n=this._overwriteProps;var l,p,c,d,m,g,v,y,x,w=t.style;if(u&&""===w.zIndex&&(l=H(t,"zIndex",s),("auto"===l||""===l)&&this._addLazySet(w,"zIndex",0)),"string"==typeof e&&(d=w.cssText,l=Z(t,s),w.cssText=d+";"+e,l=$(t,l,Z(t)).difs,!Y&&T.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,w.cssText=d),this._firstPT=p=this.parse(t,e,null),this._transformType){for(x=3===this._transformType,xe?f&&(u=!0,""===w.zIndex&&(v=H(t,"zIndex",s),("auto"===v||""===v)&&this._addLazySet(w,"zIndex",0)),_&&this._addLazySet(w,"WebkitBackfaceVisibility",this._vars.WebkitBackfaceVisibility||(x?"visible":"hidden"))):w.zoom=1,c=p;c&&c._next;)c=c._next;y=new pe(t,"transform",0,0,null,2),this._linkCSSP(y,null,c),y.setRatio=x&&be?Me:xe?Le:De,y.data=this._transform||Ae(t,s,!0),n.pop()}if(i){for(;p;){for(g=p._next,c=d;c&&c.pr>p.pr;)c=c._next;(p._prev=c?c._prev:m)?p._prev._next=p:d=p,(p._next=c)?c._prev=p:m=p,p=g}this._firstPT=d}return!0},l.parse=function(t,e,i,n){var a,l,u,f,p,_,c,d,m,g,v=t.style;for(a in e)_=e[a],l=o[a],l?i=l.parse(t,_,a,this,i,n,e):(p=H(t,a,s)+"",m="string"==typeof _,"color"===a||"fill"===a||"stroke"===a||-1!==a.indexOf("Color")||m&&b.test(_)?(m||(_=oe(_),_=(_.length>3?"rgba(":"rgb(")+_.join(",")+")"),i=_e(v,a,p,_,!0,"transparent",i,0,n)):!m||-1===_.indexOf(" ")&&-1===_.indexOf(",")?(u=parseFloat(p),c=u||0===u?p.substr((u+"").length):"",(""===p||"auto"===p)&&("width"===a||"height"===a?(u=te(t,a,s),c="px"):"left"===a||"top"===a?(u=Q(t,a,s),c="px"):(u="opacity"!==a?0:1,c="")),g=m&&"="===_.charAt(1),g?(f=parseInt(_.charAt(0)+"1",10),_=_.substr(2),f*=parseFloat(_),d=_.replace(y,"")):(f=parseFloat(_),d=m?_.substr((f+"").length)||"":""),""===d&&(d=a in r?r[a]:c),_=f||0===f?(g?f+u:f)+d:e[a],c!==d&&""!==d&&(f||0===f)&&u&&(u=G(t,a,u,c),"%"===d?(u/=G(t,a,100,"%")/100,e.strictUnits!==!0&&(p=u+"%")):"em"===d?u/=G(t,a,1,"em"):"px"!==d&&(f=G(t,a,f,d),d="px"),g&&(f||0===f)&&(_=f+u+d)),g&&(f+=u),!u&&0!==u||!f&&0!==f?void 0!==v[a]&&(_||"NaN"!=_+""&&null!=_)?(i=new pe(v,a,f||u||0,0,i,-1,a,!1,0,p,_),i.xs0="none"!==_||"display"!==a&&-1===a.indexOf("Style")?_:p):U("invalid "+a+" tween value: "+e[a]):(i=new pe(v,a,u,f-u,i,0,a,h!==!1&&("px"===d||"zIndex"===a),0,p,_),i.xs0=d)):i=_e(v,a,p,_,!0,null,i,0,n)),n&&i&&!i.plugin&&(i.plugin=n); +return i},l.setRatio=function(t){var e,i,r,s=this._firstPT,n=1e-6;if(1!==t||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(t||this._tween._time!==this._tween._duration&&0!==this._tween._time||this._tween._rawPrevTime===-1e-6)for(;s;){if(e=s.c*t+s.s,s.r?e=Math.round(e):n>e&&e>-n&&(e=0),s.type)if(1===s.type)if(r=s.l,2===r)s.t[s.p]=s.xs0+e+s.xs1+s.xn1+s.xs2;else if(3===r)s.t[s.p]=s.xs0+e+s.xs1+s.xn1+s.xs2+s.xn2+s.xs3;else if(4===r)s.t[s.p]=s.xs0+e+s.xs1+s.xn1+s.xs2+s.xn2+s.xs3+s.xn3+s.xs4;else if(5===r)s.t[s.p]=s.xs0+e+s.xs1+s.xn1+s.xs2+s.xn2+s.xs3+s.xn3+s.xs4+s.xn4+s.xs5;else{for(i=s.xs0+e+s.xs1,r=1;s.l>r;r++)i+=s["xn"+r]+s["xs"+(r+1)];s.t[s.p]=i}else-1===s.type?s.t[s.p]=s.xs0:s.setRatio&&s.setRatio(t);else s.t[s.p]=e+s.xs0;s=s._next}else for(;s;)2!==s.type?s.t[s.p]=s.b:s.setRatio(t),s=s._next;else for(;s;)2!==s.type?s.t[s.p]=s.e:s.setRatio(t),s=s._next},l._enableTransforms=function(t){this._transform=this._transform||Ae(this._target,s,!0),this._transformType=this._transform.svg&&ve||!t&&3!==this._transformType?2:3};var Ee=function(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)};l._addLazySet=function(t,e,i){var r=this._firstPT=new pe(t,e,0,0,this._firstPT,2);r.e=i,r.setRatio=Ee,r.data=this},l._linkCSSP=function(t,e,i,r){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,r=!0),i?i._next=t:r||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},l._kill=function(e){var i,r,s,n=e;if(e.autoAlpha||e.alpha){n={};for(r in e)n[r]=e[r];n.opacity=1,n.autoAlpha&&(n.visibility=1)}return e.className&&(i=this._classNamePT)&&(s=i.xfirst,s&&s._prev?this._linkCSSP(s._prev,i._next,s._prev._prev):s===this._firstPT&&(this._firstPT=i._next),i._next&&this._linkCSSP(i._next,i._next._next,s._prev),this._classNamePT=null),t.prototype._kill.call(this,n)};var Fe=function(t,e,i){var r,s,n,a;if(t.slice)for(s=t.length;--s>-1;)Fe(t[s],e,i);else for(r=t.childNodes,s=r.length;--s>-1;)n=r[s],a=n.type,n.style&&(e.push(Z(n)),i&&i.push(n)),1!==a&&9!==a&&11!==a||!n.childNodes.length||Fe(n,e,i)};return a.cascadeTo=function(t,i,r){var s,n,a,o=e.to(t,i,r),l=[o],h=[],u=[],f=[],p=e._internals.reservedProps;for(t=o._targets||o.target,Fe(t,h,f),o.render(i,!0),Fe(t,u),o.render(0,!0),o._enabled(!0),s=f.length;--s>-1;)if(n=$(f[s],h[s],u[s]),n.firstMPT){n=n.difs;for(a in r)p[a]&&(n[a]=r[a]);l.push(e.to(f[s],i,n))}return l},t.activate([a]),a},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(t){"use strict";var e=function(){return(_gsScope.GreenSockGlobals||_gsScope)[t]};"function"==typeof define&&define.amd?define(["TweenLite"],e):"undefined"!=typeof module&&module.exports&&(require("../TweenLite.js"),module.exports=e())}("CSSPlugin"); + +/*! + * VERSION: beta 0.3.3 + * DATE: 2014-10-29 + * UPDATES AND DOCS AT: http://www.greensock.com + * + * @license Copyright (c) 2008-2014, GreenSock. All rights reserved. + * SplitText is a Club GreenSock membership benefit; You must have a valid membership to use + * this code without violating the terms of use. Visit http://www.greensock.com/club/ to sign up or get more details. + * This work is subject to the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(function(t){"use strict";var e=t.GreenSockGlobals||t,i=function(t){var i,s=t.split("."),r=e;for(i=0;s.length>i;i++)r[s[i]]=r=r[s[i]]||{};return r},s=i("com.greensock.utils"),r=function(t){var e=t.nodeType,i="";if(1===e||9===e||11===e){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)i+=r(t)}else if(3===e||4===e)return t.nodeValue;return i},n=document,a=n.defaultView?n.defaultView.getComputedStyle:function(){},o=/([A-Z])/g,h=function(t,e,i,s){var r;return(i=i||a(t,null))?(t=i.getPropertyValue(e.replace(o,"-$1").toLowerCase()),r=t||i.length?t:i[e]):t.currentStyle&&(i=t.currentStyle,r=i[e]),s?r:parseInt(r,10)||0},l=function(t){return t.length&&t[0]&&(t[0].nodeType&&t[0].style&&!t.nodeType||t[0].length&&t[0][0])?!0:!1},_=function(t){var e,i,s,r=[],n=t.length;for(e=0;n>e;e++)if(i=t[e],l(i))for(s=i.length,s=0;i.length>s;s++)r.push(i[s]);else r.push(i);return r},u=")eefec303079ad17405c",c=/(?:
||
)/gi,p=n.all&&!n.addEventListener,f="
":">")}},d=s.SplitText=e.SplitText=function(t,e){if("string"==typeof t&&(t=d.selector(t)),!t)throw"cannot split a null element.";this.elements=l(t)?_(t):[t],this.chars=[],this.words=[],this.lines=[],this._originals=[],this.vars=e||{},this.split(e)},g=function(t,e,i){var s=t.nodeType;if(1===s||9===s||11===s)for(t=t.firstChild;t;t=t.nextSibling)g(t,e,i);else(3===s||4===s)&&(t.nodeValue=t.nodeValue.split(e).join(i))},v=function(t,e){for(var i=e.length;--i>-1;)t.push(e[i])},y=function(t,e,i,s,o){c.test(t.innerHTML)&&(t.innerHTML=t.innerHTML.replace(c,u));var l,_,p,f,d,y,T,w,b,x,P,S,C,k,R=r(t),A=e.type||e.split||"chars,words,lines",O=-1!==A.indexOf("lines")?[]:null,D=-1!==A.indexOf("words"),M=-1!==A.indexOf("chars"),L="absolute"===e.position||e.absolute===!0,z=L?"­ ":" ",I=-999,E=a(t),N=h(t,"paddingLeft",E),F=h(t,"borderBottomWidth",E)+h(t,"borderTopWidth",E),X=h(t,"borderLeftWidth",E)+h(t,"borderRightWidth",E),U=h(t,"paddingTop",E)+h(t,"paddingBottom",E),B=h(t,"paddingLeft",E)+h(t,"paddingRight",E),j=h(t,"textAlign",E,!0),Y=t.clientHeight,q=t.clientWidth,G="
",V=m(e.wordsClass),Q=m(e.charsClass),W=-1!==(e.linesClass||"").indexOf("++"),H=e.linesClass,Z=-1!==R.indexOf("<"),$=!0,K=[],J=[],te=[];for(W&&(H=H.split("++").join("")),Z&&(R=R.split("<").join("{{LT}}")),l=R.length,f=V(),d=0;l>d;d++)if(T=R.charAt(d),")"===T&&R.substr(d,20)===u)f+=($?G:"")+"
",$=!1,d!==l-20&&R.substr(d+20,20)!==u&&(f+=" "+V(),$=!0),d+=19;else if(" "===T&&" "!==R.charAt(d-1)&&d!==l-1&&R.substr(d-20,20)!==u){for(f+=$?G:"",$=!1;" "===R.charAt(d+1);)f+=z,d++;(")"!==R.charAt(d+1)||R.substr(d+1,20)!==u)&&(f+=z+V(),$=!0)}else f+=M&&" "!==T?Q()+T+"
":T;for(t.innerHTML=f+($?G:""),Z&&g(t,"{{LT}}","<"),y=t.getElementsByTagName("*"),l=y.length,w=[],d=0;l>d;d++)w[d]=y[d];if(O||L)for(d=0;l>d;d++)b=w[d],p=b.parentNode===t,(p||L||M&&!D)&&(x=b.offsetTop,O&&p&&x!==I&&"BR"!==b.nodeName&&(_=[],O.push(_),I=x),L&&(b._x=b.offsetLeft,b._y=x,b._w=b.offsetWidth,b._h=b.offsetHeight),O&&(D!==p&&M||(_.push(b),b._x-=N),p&&d&&(w[d-1]._wordEnd=!0),"BR"===b.nodeName&&b.nextSibling&&"BR"===b.nextSibling.nodeName&&O.push([])));for(d=0;l>d;d++)b=w[d],p=b.parentNode===t,"BR"!==b.nodeName?(L&&(S=b.style,D||p||(b._x+=b.parentNode._x,b._y+=b.parentNode._y),S.left=b._x+"px",S.top=b._y+"px",S.position="absolute",S.display="block",S.width=b._w+1+"px",S.height=b._h+"px"),D?p&&""!==b.innerHTML?J.push(b):M&&K.push(b):p?(t.removeChild(b),w.splice(d--,1),l--):!p&&M&&(x=!O&&!L&&b.nextSibling,t.appendChild(b),x||t.appendChild(n.createTextNode(" ")),K.push(b))):O||L?(t.removeChild(b),w.splice(d--,1),l--):D||t.appendChild(b);if(O){for(L&&(P=n.createElement("div"),t.appendChild(P),C=P.offsetWidth+"px",x=P.offsetParent===t?0:t.offsetLeft,t.removeChild(P)),S=t.style.cssText,t.style.cssText="display:none;";t.firstChild;)t.removeChild(t.firstChild);for(k=!L||!D&&!M,d=0;O.length>d;d++){for(_=O[d],P=n.createElement("div"),P.style.cssText="display:block;text-align:"+j+";position:"+(L?"absolute;":"relative;"),H&&(P.className=H+(W?d+1:"")),te.push(P),l=_.length,y=0;l>y;y++)"BR"!==_[y].nodeName&&(b=_[y],P.appendChild(b),k&&(b._wordEnd||D)&&P.appendChild(n.createTextNode(" ")),L&&(0===y&&(P.style.top=b._y+"px",P.style.left=N+x+"px"),b.style.top="0px",x&&(b.style.left=b._x-x+"px")));0===l&&(P.innerHTML=" "),D||M||(P.innerHTML=r(P).split(String.fromCharCode(160)).join(" ")),L&&(P.style.width=C,P.style.height=b._h+"px"),t.appendChild(P)}t.style.cssText=S}L&&(Y>t.clientHeight&&(t.style.height=Y-U+"px",Y>t.clientHeight&&(t.style.height=Y+F+"px")),q>t.clientWidth&&(t.style.width=q-B+"px",q>t.clientWidth&&(t.style.width=q+X+"px"))),v(i,K),v(s,J),v(o,te)},T=d.prototype;T.split=function(t){this.isSplit&&this.revert(),this.vars=t||this.vars,this._originals.length=this.chars.length=this.words.length=this.lines.length=0;for(var e=this.elements.length;--e>-1;)this._originals[e]=this.elements[e].innerHTML,y(this.elements[e],this.vars,this.chars,this.words,this.lines);return this.chars.reverse(),this.words.reverse(),this.lines.reverse(),this.isSplit=!0,this},T.revert=function(){if(!this._originals)throw"revert() call wasn't scoped properly.";for(var t=this._originals.length;--t>-1;)this.elements[t].innerHTML=this._originals[t];return this.chars=[],this.words=[],this.lines=[],this.isSplit=!1,this},d.selector=t.$||t.jQuery||function(e){var i=t.$||t.jQuery;return i?(d.selector=i,i(e)):"undefined"==typeof document?e:document.querySelectorAll?document.querySelectorAll(e):document.getElementById("#"===e.charAt(0)?e.substr(1):e)},d.version="0.3.3"})(_gsScope),function(t){"use strict";var e=function(){return(_gsScope.GreenSockGlobals||_gsScope)[t]};"function"==typeof define&&define.amd?define(["TweenLite"],e):"undefined"!=typeof module&&module.exports&&(module.exports=e())}("SplitText"); + + +try{ + window.GreenSockGlobals = null; + window._gsQueue = null; + window._gsDefine = null; + + delete(window.GreenSockGlobals); + delete(window._gsQueue); + delete(window._gsDefine); + } catch(e) {} + +try{ + window.GreenSockGlobals = oldgs; + window._gsQueue = oldgs_queue; + } catch(e) {} + +if (window.tplogs==true) + try { + console.groupEnd(); + } catch(e) {} + + + + + +(function(e,t){ + e.waitForImages={hasImageProperties:["backgroundImage","listStyleImage","borderImage","borderCornerImage"]};e.expr[":"].uncached=function(t){var n=document.createElement("img");n.src=t.src;return e(t).is('img[src!=""]')&&!n.complete};e.fn.waitForImages=function(t,n,r){if(e.isPlainObject(arguments[0])){n=t.each;r=t.waitForAll;t=t.finished}t=t||e.noop;n=n||e.noop;r=!!r;if(!e.isFunction(t)||!e.isFunction(n)){throw new TypeError("An invalid callback was supplied.")}return this.each(function(){var i=e(this),s=[];if(r){var o=e.waitForImages.hasImageProperties||[],u=/url\((['"]?)(.*?)\1\)/g;i.find("*").each(function(){var t=e(this);if(t.is("img:uncached")){s.push({src:t.attr("src"),element:t[0]})}e.each(o,function(e,n){var r=t.css(n);if(!r){return true}var i;while(i=u.exec(r)){s.push({src:i[2],element:t[0]})}})})}else{i.find("img:uncached").each(function(){s.push({src:this.src,element:this})})}var f=s.length,l=0;if(f==0){t.call(i[0])}e.each(s,function(r,s){var o=new Image;e(o).bind("load error",function(e){l++;n.call(s.element,l,f,e.type=="load");if(l==f){t.call(i[0]);return false}});o.src=s.src})})}; +})(jQuery) diff --git a/src/main/resources/static/lib/user/home/rs-plugin/rs.home.js b/src/main/resources/static/lib/user/home/rs-plugin/rs.home.js new file mode 100644 index 0000000..2ffd7a0 --- /dev/null +++ b/src/main/resources/static/lib/user/home/rs-plugin/rs.home.js @@ -0,0 +1,84 @@ +(function() { + + "use strict"; + + // Hone page one Revolution Slider Initialize + jQuery('.fullwidthbanner').show().revolution( + { + dottedOverlay:"none", + delay:9000, + startwidth:1920, + startheight:800, + hideThumbs:200, + + thumbWidth:100, + thumbHeight:50, + thumbAmount:2, + + simplifyAll:"off", + + navigationType:"bullet", + navigationArrows:"solo", + navigationStyle:"preview1", + + touchenabled:"on", + onHoverStop:"on", + nextSlideOnWindowFocus:"off", + + swipe_threshold: 75, + swipe_velocity: 0.7, + swipe_min_touches: 1, + swipe_max_touches: 1, + drag_block_vertical: false, + + keyboardNavigation:"off", + + navigationHAlign:"center", + navigationVAlign:"bottom", + navigationHOffset:0, + navigationVOffset:20, + + soloArrowLeftHalign:"left", + soloArrowLeftValign:"center", + soloArrowLeftHOffset:20, + soloArrowLeftVOffset:0, + + soloArrowRightHalign:"right", + soloArrowRightValign:"center", + soloArrowRightHOffset:20, + soloArrowRightVOffset:0, + + shadow:0, + fullWidth:"on", + fullScreen:"on", + + spinner:"spinner0", + + stopLoop:"off", + stopAfterLoops:-1, + stopAtSlide:-1, + + hideTimerBar:"on", + + shuffle:"off", + + autoHeight:"off", + forceFullWidth:"off", + + hideThumbsOnMobile:"off", + hideNavDelayOnMobile:1500, + hideBulletsOnMobile:"off", + hideArrowsOnMobile:"off", + hideThumbsUnderResolution:0, + + hideSliderAtLimit:0, + hideCaptionAtLimit:0, + hideAllCaptionAtLilmit:0, + startWithSlide:0, + videoJsPath:"rs-plugin/videojs/", + fullScreenOffsetContainer: "" + }); + + + +})(); \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysAccessMapping.xml b/src/main/resources/static/mapping/SysAccessMapping.xml new file mode 100644 index 0000000..71c9b6f --- /dev/null +++ b/src/main/resources/static/mapping/SysAccessMapping.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + insert into sys_access(id,name,url,status) values(default,#{name},#{url},default); + + + + delete from sys_access where id = #{id}; + + + + update sys_access set status = #{status} where id = #{id}; + + + + update sys_access set name = #{name},url = #{url} where id = #{id}; + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysAdminMapping.xml b/src/main/resources/static/mapping/SysAdminMapping.xml new file mode 100644 index 0000000..649124a --- /dev/null +++ b/src/main/resources/static/mapping/SysAdminMapping.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + update sys_admin set mark = #{mark} where id = #{id}; + + + + update sys_admin set mark = #{mark} where email = #{email}; + + + + update sys_admin set name = #{name},password = #{password} where email = #{email}; + + + + insert into sys_admin(id,name,password,email,mark) values(default,#{name},#{password},#{email},#{mark}); + + + + delete from sys_admin where id = #{id}; + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysAdminRoleMapping.xml b/src/main/resources/static/mapping/SysAdminRoleMapping.xml new file mode 100644 index 0000000..d524d0f --- /dev/null +++ b/src/main/resources/static/mapping/SysAdminRoleMapping.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + insert into sys_admin_role(id,admin_id,role_id,status) values(default,#{adminId},#{roleId},default); + + + + delete from sys_admin_role where id = #{id}; + + + + update sys_admin_role set status = #{status} where id = #{id}; + + + + delete from sys_admin_role where admin_id = #{adminId}; + + + + delete from sys_admin_role where role_id = #{roleId}; + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysCartMapping.xml b/src/main/resources/static/mapping/SysCartMapping.xml new file mode 100644 index 0000000..84e4ca8 --- /dev/null +++ b/src/main/resources/static/mapping/SysCartMapping.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + insert into sys_cart values(default,#{goodsId},#{userId},#{goodsNum}); + + + + delete from sys_cart where id = #{id}; + + + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysCommentMapping.xml b/src/main/resources/static/mapping/SysCommentMapping.xml new file mode 100644 index 0000000..703e357 --- /dev/null +++ b/src/main/resources/static/mapping/SysCommentMapping.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + insert into sys_comment values(default,#{user},#{goods},#{merchant},#{context},#{createTime}); + + + + delete from sys_comment where id = #{id}; + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysGoodsMapping.xml b/src/main/resources/static/mapping/SysGoodsMapping.xml new file mode 100644 index 0000000..69d08ed --- /dev/null +++ b/src/main/resources/static/mapping/SysGoodsMapping.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into sys_goods values(default,#{name},#{describe},default,#{price},default,#{merchant},#{stock}); + + + + update sys_goods set state = #{state} where id = #{id}; + + + + update sys_goods set stock = stock + #{stock} where id = #{id}; + + + + update sys_goods set stock = stock - #{stock} where id = #{id}; + + + + update sys_goods set name = #{name}, `describe` = #{describe}, price = #{price},merchant = #{merchant}, stock = #{stock} where id = #{id}; + + + + update sys_goods set name = #{name}, `describe` = #{describe},price = #{price},merchant = #{merchant}, stock = #{stock}, img = #{imgUrl} where id = #{id}; + + + + insert into sys_goods values(default,#{name},#{describe},#{img},#{price},default,#{merchant},#{stock}); + + + + delete from sys_goods where id = #{id}; + + + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysMtMapping.xml b/src/main/resources/static/mapping/SysMtMapping.xml new file mode 100644 index 0000000..fd84290 --- /dev/null +++ b/src/main/resources/static/mapping/SysMtMapping.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + delete from sys_mt where id = #{id}; + + + + + + + + + + + + insert into sys_mt(id,name,email,password,ratio,state) values(default,#{name},#{email},#{password},#{ratio},#{state}); + + + + update sys_mt set name = #{name},password = #{password} where email = #{email}; + + + + update sys_mt set ratio = #{ratio} where id = #{id}; + + + + update sys_mt set state = #{state} where email = #{email}; + + + + update sys_mt set header = #{header} where id = #{id}; + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysMtUiMapping.xml b/src/main/resources/static/mapping/SysMtUiMapping.xml new file mode 100644 index 0000000..186dea5 --- /dev/null +++ b/src/main/resources/static/mapping/SysMtUiMapping.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + insert into sys_mt_ui(id,url,width,height,merchant) values(default,#{url},#{width},#{height},#{merchant}); + + + + delete from sys_mt_ui where width = #{width} and height = #{height} and merchant = #{merchant}; + + + + delete from sys_mt_ui where id = #{id}; + + + + update sys_mt_ui set url = #{url} where width = #{width} and height = #{height} and merchant = #{merchant}; + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysNoticeMapping.xml b/src/main/resources/static/mapping/SysNoticeMapping.xml new file mode 100644 index 0000000..77bc015 --- /dev/null +++ b/src/main/resources/static/mapping/SysNoticeMapping.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + delete from sys_notice where id = #{id}; + + + + insert into sys_notice(id,title,context,type,receive,create_time) + values(default,#{title},#{context},#{type},#{receive},#{createTime}); + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysOrderMapping.xml b/src/main/resources/static/mapping/SysOrderMapping.xml new file mode 100644 index 0000000..5922b41 --- /dev/null +++ b/src/main/resources/static/mapping/SysOrderMapping.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_order set pay_code_url = #{codeUrl} where order_mark = #{orderMark}; + + + + delete from sys_order where id = #{id} and order_state = 0; + + + + + + + + update sys_order set pay_time = #{pay_time},order_state = 1 where order_mark = #{orderMark}; + + + + insert into sys_order(order_id,create_time,goods_num,order_mark,order_user,order_merchant,order_price, + goods_id,order_notes,user_address,user_name,user_phone,coupon_code,pay_way,merchant_ratio) values(#{orderId}, + #{createTime},#{goodsNum},#{orderMark},#{orderUser},#{orderMerchant},#{orderPrice},#{goodsId}, + #{orderNotes},#{userAddress},#{userName},#{userPhone},#{couponCode},#{payWay},#{merchantRatio}); + + + + insert into sys_order(order_id,create_time,goods_num,order_mark,order_user,order_merchant,order_price, + goods_id,order_notes,user_address,user_name,user_phone,coupon_code,pay_way,cart_id,merchant_ratio) values(#{orderId}, + #{createTime},#{goodsNum},#{orderMark},#{orderUser},#{orderMerchant},#{orderPrice},#{goodsId}, + #{orderNotes},#{userAddress},#{userName},#{userPhone},#{couponCode},#{payWay},#{cartId},#{merchantRatio}); + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysRoleAccessMapping.xml b/src/main/resources/static/mapping/SysRoleAccessMapping.xml new file mode 100644 index 0000000..888a4a3 --- /dev/null +++ b/src/main/resources/static/mapping/SysRoleAccessMapping.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + insert into sys_role_access(id,access_id,role_id,status) values(default,#{accessId},#{roleId},default); + + + + delete from sys_role_access where id = #{id}; + + + + update sys_role_access set status = #{status} where id = #{id}; + + + + delete from sys_role_access where access_id = #{accessId}; + + + + delete from sys_role_access where role_id = #{roleId}; + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysRoleMapping.xml b/src/main/resources/static/mapping/SysRoleMapping.xml new file mode 100644 index 0000000..7468ace --- /dev/null +++ b/src/main/resources/static/mapping/SysRoleMapping.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + insert into sys_role(id,name,status) values(default,#{name},default); + + + + delete from sys_role where id = #{id}; + + + + update sys_role set status = #{status} where id = #{id}; + + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysUiMapping.xml b/src/main/resources/static/mapping/SysUiMapping.xml new file mode 100644 index 0000000..f1773b2 --- /dev/null +++ b/src/main/resources/static/mapping/SysUiMapping.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + insert into sys_ui(id,url,width,height) values(default,#{url},#{width},#{height}); + + + + delete from sys_ui where width = #{width} and height = #{height}; + + + + update sys_ui set url = #{url} where width = #{width} and height = #{height}; + + \ No newline at end of file diff --git a/src/main/resources/static/mapping/SysUserMapping.xml b/src/main/resources/static/mapping/SysUserMapping.xml new file mode 100644 index 0000000..0773c15 --- /dev/null +++ b/src/main/resources/static/mapping/SysUserMapping.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_user set mark = #{mark} where email = #{email}; + + + + update sys_user set username = #{username},password = #{password} where email = #{email}; + + + + update sys_user set username = #{username},password = #{password}, email = #{email},header = #{header} where id = #{id}; + + + + insert into sys_user(id,username,password,email,mark,header) values(default,#{username},#{password},#{email},#{mark},default); + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/common/model.html b/src/main/resources/templates/admin/common/model.html new file mode 100644 index 0000000..33325fa --- /dev/null +++ b/src/main/resources/templates/admin/common/model.html @@ -0,0 +1,112 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/home/index.html b/src/main/resources/templates/admin/home/index.html new file mode 100644 index 0000000..46ddc33 --- /dev/null +++ b/src/main/resources/templates/admin/home/index.html @@ -0,0 +1,226 @@ + + + + + + 捷阅网后台主页 + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ import_export +
+
+
+

¥[[${profit}]]

+
+
+ 商城总收益 +
+
+
+ +
+
+ +
+
+ shopping_cart +
+
+
+

[[${orderCount}]]

+
+
+ 成交订单量 +
+
+
+
+
+ +
+
+ equalizer +
+
+
+

[[${goodsCount}]]

+
+
+ 商品总数 +
+
+
+ +
+
+ +
+
+ supervisor_account +
+
+
+

[[${userCount}]]

+
+
+ 会员总数 +
+
+
+
+
+
+
+
+
+
+

月盈利

+
+
+ + +
+
+
+
+
+

日盈利

+
+
+ +
+
+
+
+
+

年盈利

+
+
+ +
+
+
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/login/index.html b/src/main/resources/templates/admin/login/index.html new file mode 100644 index 0000000..ef38c47 --- /dev/null +++ b/src/main/resources/templates/admin/login/index.html @@ -0,0 +1,41 @@ + + + + + 捷阅网后台登陆 + + + + + + + + + + +
+
+

捷阅网后台登陆

+
+
+
+
+
+ + + + +

已注册账号? 登录

+
+ +
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/merchant/index.html b/src/main/resources/templates/admin/merchant/index.html new file mode 100644 index 0000000..1d6fc47 --- /dev/null +++ b/src/main/resources/templates/admin/merchant/index.html @@ -0,0 +1,159 @@ + + + + + + 商户相关 + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+

+ 这里还没有任何商户信息!! +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
商户logoID商户名称商户邮箱状态费率操作
+ + [[${mt.getId()}]][[${mt.getName()}]][[${mt.getEmail()}]]已启用未启用 +
+
+ + + +
+
+
+ +
+
+ +
+
+ +
+
+
+ + + +
+
+ + + +
+
+


+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/notice/index.html b/src/main/resources/templates/admin/notice/index.html new file mode 100644 index 0000000..d4b37f1 --- /dev/null +++ b/src/main/resources/templates/admin/notice/index.html @@ -0,0 +1,85 @@ + + + + + + 系统消息 + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ +
+

群发系统消息功能

+

+ + + + + + +
+


+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/order/index.html b/src/main/resources/templates/admin/order/index.html new file mode 100644 index 0000000..8086a31 --- /dev/null +++ b/src/main/resources/templates/admin/order/index.html @@ -0,0 +1,178 @@ + + + + + + 订单列表 + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ +
+ + +
+

+ 这里还没有任何订单信息!! +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
订单编号总额创建时间订单状态支付方式支付时间商品数量商品ID商户ID会员ID收件人联系方式
已支付未支付支付宝微信支付未支付
+ + [[${page}]]/[[${allPage}]] + +
+ + +
+


+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/rbac/index.html b/src/main/resources/templates/admin/rbac/index.html new file mode 100644 index 0000000..4a9be76 --- /dev/null +++ b/src/main/resources/templates/admin/rbac/index.html @@ -0,0 +1,300 @@ + + + + + + 权限管理 + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + +
ID昵称邮箱角色操作
+
+ +
+
+ 删除 +    /    + 启用 + 停用 +
+

+
+
+ + +
+ + +
+
+ + + + + + + + + + + + + + +
ID角色名状态操作
已启用未启用 + 删除 +    /    + 启用 + 停用 +    /    + 设置权限 +
+
+

暂无角色信息

+
+

+
+
+ + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + +
ID权限地址状态操作
+ + + + 已启用未启用 + 删除 +    /    + 启用 + 停用 +    /    + +
+
+

暂无权限信息

+
+

+
+
+
+
+
+ +
+
+ +


+ +


+ +
+


+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/rbac/role-access.html b/src/main/resources/templates/admin/rbac/role-access.html new file mode 100644 index 0000000..ca38613 --- /dev/null +++ b/src/main/resources/templates/admin/rbac/role-access.html @@ -0,0 +1,165 @@ + + + + + + 权限管理 + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+ +
+ +
+ +
+

暂无权限信息

+
+

+
+
+
+
+
+ +
+
+
+


+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/ui/index.html b/src/main/resources/templates/admin/ui/index.html new file mode 100644 index 0000000..7764221 --- /dev/null +++ b/src/main/resources/templates/admin/ui/index.html @@ -0,0 +1,244 @@ + + + + + + 广告设置 + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

推荐尺寸:1920x737

+
+ + + + +
+
+ + + +
+
+ + + +
+
+
+
+

推荐尺寸:1230x535

+
+ + + + +
+
+ + + +
+
+ + + +
+
+
+
+

推荐尺寸:315x282

+
+ + + + +
+
+ + + +
+
+ + +
+
+
+
+

推荐尺寸:315x282

+
+ + + + +
+
+ + + +
+
+ + +
+
+
+
+

推荐尺寸:475x570

+
+ + + + +
+
+ + + +
+
+ + +
+
+
+
+

推荐尺寸:674x264

+
+ + + + +
+
+ + + +
+
+ + +
+
+


+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/user/index.html b/src/main/resources/templates/admin/user/index.html new file mode 100644 index 0000000..dc812cf --- /dev/null +++ b/src/main/resources/templates/admin/user/index.html @@ -0,0 +1,141 @@ + + + + + + 会员列表 + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+

+ 这里还没有任何会员信息!! +

+
+ + + + + + + + + + + + + + + + + + +
会员头像会员ID会员名称会员邮箱会员标记
+ +
+ + [[${page}]]/[[${allPage}]] + +
+ +
+


+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/error.html b/src/main/resources/templates/error.html new file mode 100644 index 0000000..0f92fec --- /dev/null +++ b/src/main/resources/templates/error.html @@ -0,0 +1,44 @@ + + + + + + + 出错啦! + + + + + +
+
+
+ +
+
+
+
+ 4 + 0 + 4 +
+

Page Not Found


+ 点击此处返回至商城主页面 +

+ We're sorry, the page you requested could not be found, Please go back to the + homepage or contact us. +

+
+
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/merchant/common/model.html b/src/main/resources/templates/merchant/common/model.html new file mode 100644 index 0000000..e0b41aa --- /dev/null +++ b/src/main/resources/templates/merchant/common/model.html @@ -0,0 +1,131 @@ + + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/merchant/goods/index.html b/src/main/resources/templates/merchant/goods/index.html new file mode 100644 index 0000000..308b882 --- /dev/null +++ b/src/main/resources/templates/merchant/goods/index.html @@ -0,0 +1,349 @@ + + + + 商品列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
商品ID(状态)图示(点击选择)商品名称商品描述商品库存单品价格操作
+

+ 在此栏添加商品👉 +

+
+ + + + + + + + + + + + +
+ [[${goods.getId()}]] +

(售卖中)

+
+ [[${goods.getId()}]] +

(已下架)

+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + [[${page}]]/[[${allPage}]] + + +
+
+


+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/merchant/home/index.html b/src/main/resources/templates/merchant/home/index.html new file mode 100644 index 0000000..e4fc28b --- /dev/null +++ b/src/main/resources/templates/merchant/home/index.html @@ -0,0 +1,295 @@ + + + + 捷阅网商户主页 + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
+
+ +
+
+
+
+ +
+
+

总盈利

+

¥[[${profit}]]

+

本店铺的总盈利

+
+
+
+
+
+
+
+ +
+
+

评论总数

+

[[${commentCount}]]

+

本店商品的总评论条数

+
+
+
+
+
+
+
+ +
+
+

会员总数

+

[[${userCount}]]

+

本店铺的会员总数

+
+
+
+
+
+
+
+ +
+
+

成交量

+

[[${orderCount}]]

+

本店铺总成交数量

+
+
+
+
+
+
+ + +
+
+
+
+

月盈利

+
+
+ + +
+
+
+
+
+

日盈利

+
+
+ +
+
+
+
+
+

年盈利

+
+
+ + +
+
+
+
+
+ + + +
+ +
+ + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/merchant/login/index.html b/src/main/resources/templates/merchant/login/index.html new file mode 100644 index 0000000..243c62f --- /dev/null +++ b/src/main/resources/templates/merchant/login/index.html @@ -0,0 +1,85 @@ + + + + + 捷阅网商户登录 + + + + + + + + + + + + + + +
+ +
+ +
+
+

捷阅网商户登录

+

欢迎进入登录页面

+ +
+
+ +
+
+

商户注册

+

请使用您的电子邮箱进行注册

+
+
+ +
+
+ +
+
+ +
+ +
+
+ +
+ + + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/merchant/order/index.html b/src/main/resources/templates/merchant/order/index.html new file mode 100644 index 0000000..51b8348 --- /dev/null +++ b/src/main/resources/templates/merchant/order/index.html @@ -0,0 +1,276 @@ + + + + 订单列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+
+ +
+ + +
+

+ 这里还没有任何订单信息!! +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
订单编号总额创建时间订单状态支付方式支付时间商品数量商品ID商户ID会员ID收件人联系方式
已支付未支付支付宝微信支付未支付
+ + [[${page}]]/[[${allPage}]] + +
+ + +
+


+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/merchant/ui/index.html b/src/main/resources/templates/merchant/ui/index.html new file mode 100644 index 0000000..1fb6a77 --- /dev/null +++ b/src/main/resources/templates/merchant/ui/index.html @@ -0,0 +1,215 @@ + + + + 店铺设计 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
+
+ + + + + + + + +
+

商户头像(推荐logo长宽比例1:1)

+
+ + + +
+ +
+
+

商城首页的店铺推荐海报(推荐400x320)

+
+ + + + + + +
+ + 删除 +
+
+

商城首页的店铺推荐海报(推荐600x310,点击图片选择)

+
+ + + + + + +
+ + 删除 +
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/merchant/user/index.html b/src/main/resources/templates/merchant/user/index.html new file mode 100644 index 0000000..a8104af --- /dev/null +++ b/src/main/resources/templates/merchant/user/index.html @@ -0,0 +1,221 @@ + + + + 商品列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+
+

+ 这里还没有任何会员信息!! +

+
+ + + + + + + + + + + + + + + + + + +
会员头像会员ID会员名称会员邮箱会员标记
+ +
+ + [[${page}]]/[[${allPage}]] + +
+ +
+


+
+
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/test/footer.html b/src/main/resources/templates/test/footer.html new file mode 100644 index 0000000..a89bbf1 --- /dev/null +++ b/src/main/resources/templates/test/footer.html @@ -0,0 +1,6 @@ + + +
+ © 2016 +
+ \ No newline at end of file diff --git a/src/main/resources/templates/test/index.html b/src/main/resources/templates/test/index.html new file mode 100644 index 0000000..23ed11e --- /dev/null +++ b/src/main/resources/templates/test/index.html @@ -0,0 +1,19 @@ + + + + TEST + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/user/about/index.html b/src/main/resources/templates/user/about/index.html new file mode 100644 index 0000000..94a525e --- /dev/null +++ b/src/main/resources/templates/user/about/index.html @@ -0,0 +1,219 @@ + + + + + + + 关于作者 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+
+ +
+
+ + +
+
+

We are Jieyue-shop

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque elementum sit amet nibh eget interdum. Nullam ligula risus, efficitur id posuere nec, pulvinar at tellus. Morbi ut tortor nibh. Pellentesque accumsan nisl nulla, et vehicula libero iaculis eu. Cras faucibus, sem et imperdiet cursus, libero risus commodo elit, euismod tempor Donec aliquet, nibh ut imperdiet venenatis, arcu lectus bibendum velit, et gravida sapien justo a libero. Suspendisse ornare, urna id finibus vestibulum.

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque elementum sit amet nibh eget interdum. Nullam ligula risus, efficitur id posuere nec, pulvinar at tellus. Morbi ut tortor nibh. Pellentesque accumsan nisl nulla.

+

Donec aliquet, nibh ut imperdiet venenatis, arcu lectus bibendum velit, et gravida sapien justo a libero. Suspendisse ornare, urna id finibus vestibulum.

+
+
+ +
+
+
+ + + +
+
+
+ +
+
+
+ +
+
+

BOSEN ONCE

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu nisi ac mi malesuada vestibulum.

+
+
+
+ + +
+
+
+ +
+
+

BOSEN ONCE

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu nisi ac mi malesuada vestibulum.

+
+
+
+ + +
+
+
+ +
+
+

BOSEN ONCE

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu nisi ac mi malesuada vestibulum.

+
+
+
+ + + + +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/user/cart/index.html b/src/main/resources/templates/user/cart/index.html new file mode 100644 index 0000000..be72c2b --- /dev/null +++ b/src/main/resources/templates/user/cart/index.html @@ -0,0 +1,326 @@ + + + + + + + 购物车 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+

购物车

+
+
+
+
+
+ + + +
+
+
+
+
+ +
+ + + + +
+ 您的购物车还是空的,快去浏览你喜欢的商品吧~~ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 商品图示商品名称单品价格所属商户库存数量移除
+ + + + + + + + [[${cart.get("goodsName")}]] +

+ (已下架) +

+
+
+ + ¥[[${cart.get("goodsPrice")}]] + + + [[${cart.get("goodsMerchant")}]] + + + + [[${cart.get("goodsStock")}]] + + + + + + +
+
+
+ +
+
+

购物车结算

+
+ + + + + + + +
总计: + ¥0.00 +
+

+ +
+
+
+
+
+
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/user/checkout/index.html b/src/main/resources/templates/user/checkout/index.html new file mode 100644 index 0000000..d46a3b2 --- /dev/null +++ b/src/main/resources/templates/user/checkout/index.html @@ -0,0 +1,373 @@ + + + + + + + 订单信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+ +

拥有优惠卷?点此输入优惠卷代码

+
+
+

+ +

+
+
+ +
+
+
+
+
+ +
+
+

+

结算明细

+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ + + + + + +
+
+
+
+

您的订单

+
+ + + + + + + + + + + + + + + + + + + + +
+ [[${goods.getName()}]] + + + × [[${goodsMap.get(goods)}]] + + + + + + + + + ¥[[${goods.getPrice()}*${goodsMap.get(goods)}]] +
快递运输费 +
    +
  • + + +
  • +
  • +
+
+ + + ¥[[${allPrice}]] + + +
+
+
+
+ +

直接银行转帐

+
+

将款项直接存入我们的银行帐户。请使用您的订单ID作为付款参考。在我们的帐户中的资金清除后,您的订单才会发货。(暂不支持此支付方式)

+
+ + +

支票付款

+
+

请将支票发送到商店名称,商店街道,商店镇,商店州/县,商店邮政编码。(暂不支持此支付方式)

+
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+
+
+


+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/user/common/model.html b/src/main/resources/templates/user/common/model.html new file mode 100644 index 0000000..e4bd3e4 --- /dev/null +++ b/src/main/resources/templates/user/common/model.html @@ -0,0 +1,303 @@ + + +
+ + + + +
+
+
+ +
+ +
+ +
+ +
+ +
+ + + + +
+
+
+
+ + + + +
+ +
+
+ +
+
+
+

我们的品牌

+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+
+


+
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/user/home/index.html b/src/main/resources/templates/user/home/index.html new file mode 100644 index 0000000..3bea93a --- /dev/null +++ b/src/main/resources/templates/user/home/index.html @@ -0,0 +1,2039 @@ + + + + + + + 捷阅网 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
    +
  • + + slide + slide +
    + fashion men's +
    +
    +
    +
    + collection +
    +
    + Lorem ipsum dolor sit amet, consectetuer adipiscing elit +
    + +
  • + +
  • + + slide + slide + +
    + fashion women’s +
    +
    +
    +
    + Latest collection +
    +
    + Lorem ipsum dolor sit amet, consectetuer adipiscing elit +
    + +
  • +
+
+
+
+ + + + + +
+
+ +
+
+
+

新品推荐

+
+ +
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+ 特卖 + +
+

+ + [[${descGoodsMap.get('0').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${descGoodsMap.get('0').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${descGoodsMap.get('1').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${descGoodsMap.get('1').getPrice()}]] +
+
+
+
+ + +
+
+ +
+

+ + [[${descGoodsMap.get('2').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${descGoodsMap.get('2').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${descGoodsMap.get('3').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${descGoodsMap.get('3').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${descGoodsMap.get('4').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${descGoodsMap.get('4').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${descGoodsMap.get('5').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${descGoodsMap.get('5').getPrice()}]] +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+
+

好评如潮

+
+ +
+
+
+
+ +
+
+ +
+
+ 特卖 + +
+

+ + [[${escGoodsMap.get('0').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('0').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${escGoodsMap.get('1').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('1').getPrice()}]] +
+
+
+
+ + +
+
+ +
+

+ + [[${escGoodsMap.get('2').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('2').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${escGoodsMap.get('3').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('3').getPrice()}]] +
+
+
+
+ + +
+
+ +
+

+ + [[${escGoodsMap.get('4').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('4').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${escGoodsMap.get('5').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('5').getPrice()}]] +
+
+
+
+ + +
+
+ +
+

+ + [[${escGoodsMap.get('6').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('6').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${escGoodsMap.get('7').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('7').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${escGoodsMap.get('8').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('8').getPrice()}]] +
+
+
+
+ + +
+
+ +
+

+ + [[${escGoodsMap.get('9').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('9').getPrice()}]] +
+
+
+
+ + +
+
+ +
+

+ + [[${escGoodsMap.get('10').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('10').getPrice()}]] +
+
+
+
+ + +
+
+ +
+

+ + [[${escGoodsMap.get('11').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('11').getPrice()}]] +
+
+
+
+ + +
+
+ 特卖 + +
+

+ + [[${escGoodsMap.get('12').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${escGoodsMap.get('12').getPrice()}]] +
+
+
+
+ +
+
+
+
+ + + + + +
+
+ +
+
+
+

猜你喜欢

+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+

+ + [[${randGoodsMap.get('0').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('0').getPrice()}]] +
+
+
+ +
+
+
+
+ +
+
+

+ + [[${randGoodsMap.get('1').getName()}]] + + + product-name + +

+
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('1').getPrice()}]] +
+
+
+ +
+
+
+
+ + +
+
+ +
+
+ + [[${randGoodsMap.get('2').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('2').getPrice()}]] +
+
+
+ +
+
+
+
+ +
+
+ + [[${randGoodsMap.get('3').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('3').getPrice()}]] +
+
+
+ +
+
+
+
+ + +
+
+ +
+
+ + [[${randGoodsMap.get('4').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('4').getPrice()}]] +
+
+
+ +
+
+
+
+ +
+
+ + [[${randGoodsMap.get('5').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('5').getPrice()}]] +
+
+
+ +
+
+
+
+ + +
+
+ +
+
+ + [[${randGoodsMap.get('6').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('6').getPrice()}]] +
+
+
+ +
+
+
+
+ +
+
+ + [[${randGoodsMap.get('7').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('7').getPrice()}]] +
+
+
+ +
+
+
+
+ + +
+
+ +
+
+ + [[${randGoodsMap.get('8').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('8').getPrice()}]] +
+
+
+ +
+
+
+
+ +
+
+ + [[${randGoodsMap.get('9').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('9').getPrice()}]] +
+
+
+ +
+
+
+
+ + +
+
+ +
+
+ + [[${randGoodsMap.get('10').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('10').getPrice()}]] +
+
+
+ +
+
+
+
+ +
+
+ + [[${randGoodsMap.get('11').getName()}]] + + + product-name + +
+ + + + + +
+
+ ¥0.00 + ¥[[${randGoodsMap.get('11').getPrice()}]] +
+
+
+ +
+
+
+
+ +
+
+
+
+ + +
+
+ +
+
+
+

店铺推荐

+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+
+
+ + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/user/info/index.html b/src/main/resources/templates/user/info/index.html new file mode 100644 index 0000000..6d08f10 --- /dev/null +++ b/src/main/resources/templates/user/info/index.html @@ -0,0 +1,254 @@ + + + + + + + 我的账户 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+

我的信息

+
+
+
+
+
+ + + +
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ 点击头像上传图片 + +
+ 名          称: + +
+ 邮          箱: + +
+ 修改密码 +
+ 输入原密码: +
+ 输入新密码: +
+ 确认原密码: +
+ +            + + +
+
+
+
+
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/user/login/index.html b/src/main/resources/templates/user/login/index.html new file mode 100644 index 0000000..54e78e6 --- /dev/null +++ b/src/main/resources/templates/user/login/index.html @@ -0,0 +1,62 @@ + + + + +捷阅网用户登陆 + + + + + + +
+
+ +
+
+ + + + + diff --git a/src/main/resources/templates/user/notice/index.html b/src/main/resources/templates/user/notice/index.html new file mode 100644 index 0000000..520f18c --- /dev/null +++ b/src/main/resources/templates/user/notice/index.html @@ -0,0 +1,233 @@ + + + + + + + 系统消息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+

系统消息

+
+
+
+
+
+ + + +
+
+
+
+ + + + +
+

暂无系统消息通知!

+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + × + + +
+
+
+
+
+
+
+
+
+















+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/user/order/index.html b/src/main/resources/templates/user/order/index.html new file mode 100644 index 0000000..fbccc28 --- /dev/null +++ b/src/main/resources/templates/user/order/index.html @@ -0,0 +1,290 @@ + + + + + + + 捷阅网 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+

购买记录

+
+
+
+
+
+ + + +
+
+
+
+
+
+ + + + +
+ 您还未在本网站购买任何商品 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
图示商品名称数量订单总额支付时间订单编号
+ + + + + + + + [[${order.getGoodsNum()}]] + ¥[[${order.getOrderPrice()}]] + + + + + 未支付(点击跳转支付) + +
+ + [[${page}]]/[[${allPage}]] + +
+
+

Share on:

+
    +
  • +
  • +
  • +
  • +
  • +
+
+
+ +
+
+
+
+
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/user/pay/wx.html b/src/main/resources/templates/user/pay/wx.html new file mode 100644 index 0000000..7579fe1 --- /dev/null +++ b/src/main/resources/templates/user/pay/wx.html @@ -0,0 +1,41 @@ + + + + + 微信支付页面 + + + + +
+

请使用微信扫描以下二维码完成支付

+ +
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/user/product/index.html b/src/main/resources/templates/user/product/index.html new file mode 100644 index 0000000..8e1b3af --- /dev/null +++ b/src/main/resources/templates/user/product/index.html @@ -0,0 +1,696 @@ + + + + + + + [[${goods.getName()}]] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+
+
+
+
+ +
+
+ + +
+
+
+
+
+
+
+ +

+
+ + ¥9999.99 +
+
+ + + + + +
+
+

+
+
+ : +   热销中 +   已下架 +            + :   [[${goods.getStock()}]] +
+
+
+ + + + +
+
+ +
+ +
+ +
+
+
+
+
+ +
+
+
+
+
+
+ + + +
+
+
+
+
+ + + + +
+ 该商品还未有评论,赶紧评论抢占沙发吧! +
+ + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ +
+ +

+ + + + +
+ +
+ + + + +
+
+
+
+
+
+
+
+
+
+
+

商品推荐

+
+ +
+
+
+ +
+
+ 特卖 + +
+
+

+ + [[${randGoodsMap.get('0').getName()}]] +

+
+ ¥[[${randGoodsMap.get('0').getPrice()}]] +
+
+
+
+
+

product-name

+
+ ¥0.00 +
+
+
+
+
+ + +
+
+ 特卖 + +
+
+

+ + [[${randGoodsMap.get('1').getName()}]] +

+
+ ¥[[${randGoodsMap.get('1').getPrice()}]] +
+
+
+
+
+

product-name

+
+ ¥0.00 +
+
+
+
+
+ + +
+
+ +
+
+

+ + [[${randGoodsMap.get('2').getName()}]] +

+
+ ¥[[${randGoodsMap.get('2').getPrice()}]] +
+
+
+
+
+

product-name

+
+ ¥0.00 +
+
+
+
+
+ + + + +
+
+
+
+ + + +
+
+
+
+ + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/user/search/index.html b/src/main/resources/templates/user/search/index.html new file mode 100644 index 0000000..01a2f4c --- /dev/null +++ b/src/main/resources/templates/user/search/index.html @@ -0,0 +1,206 @@ + + + + + + + 搜索结果 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+

搜索结果

+
+ +
+
+
+ + + + +
+ !!暂未找到与关键字匹配的商品!! +
+ +
+
+ +
+
+

+ + [[${goods.getName()}]] + +

+
+ ¥[[${goods.getPrice()}]] +
+
+
+
+
+ +
+
+
+
+
+
+


+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/user/shop/index.html b/src/main/resources/templates/user/shop/index.html new file mode 100644 index 0000000..6a1c3ff --- /dev/null +++ b/src/main/resources/templates/user/shop/index.html @@ -0,0 +1,325 @@ + + + + + + + [[${merchant.getName()}]] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+

+ + [[${merchant.getName()}]] +

+
+ +
+
+
+
+
+
+ + + + + +
+
+
+ +
+ + + +
+ +
+ +
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ + + + +
+ 这里是空的!!! +
+
+ +
+
+ +
+

+ + [[${goods.getName()}]] + +

+
+ + + + + +
+
+ ¥[[${goods.getPrice()}]] + ¥9999.99 +
+
+
+
+
+
+ + + +
+
+
+
+













+ + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +