HJL 5 months ago
parent d80bbd12a1
commit 261dbb4083

@ -0,0 +1,3 @@
*.js linguist-language=java
*.css linguist-language=java
*.html linguist-language=java

@ -0,0 +1,25 @@
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
/log/

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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
http://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.

@ -0,0 +1,90 @@
#!/bin/sh
# description: Auto-starts boot
# $API_HOME/bin/boot.sh
#启动命令: boot.sh start
#重启命令: boot.sh restart
#关闭命令: boot.sh stop
#是否运行: boot.sh status
CURRENT_DIR=`dirname $0`
API_HOME=`cd "$CURRENT_DIR/.." >/dev/null; pwd`
# 应用名
Tag="mall"
cd $API_HOME
# 要执行的jar包
Jar="$API_HOME/mall.jar"
RETVAL="0"
# See how we were called.
start()
{
echo $$ > $API_HOME/api.pid
nohup java \
-XX:-UseGCOverheadLimit \
-verbose:gc -Xloggc:jvm-gc.log \
-Dappliction=$Tag \
-jar $Jar --spring.config.location=$API_HOME/config > $API_HOME/log/api_stdout.log 2>&1 &
echo "$Tag started!"
# 这句是启动后查看控制台输出
tail -f -n 0 $API_HOME/log/api_stdout.log
}
stop()
{
pid=$(ps -ef | grep -v 'grep' | egrep "$Jar"| awk '{printf $2 " "}')
if [ "$pid" != "" ]; then
echo -n "$Tag ( pid: $pid) is running"
echo
echo -n "Shutting down $Tag..."
echo
kill -9 "$pid" > /dev/null 2>&1
fi
status
}
status()
{
pid=$(ps -ef | grep -v 'grep' | egrep "$Jar"| awk '{printf $2 " "}')
#echo "$pid"
if [ "$pid" != "" ]; then
echo "$Tag is running,pid is $pid"
else
echo "$Tag is stopped"
fi
}
usage()
{
echo "Usage: $0 {start|stop|restart|status}"
RETVAL="2"
}
# See how we were called.
RETVAL="0"
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
RETVAL="3"
;;
status)
status
;;
*)
usage
;;
esac
exit $RETVAL

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

@ -0,0 +1,155 @@
/*
Navicat MySQL Data Transfer
Source Server : jesse_root
Source Server Version : 50713
Source Host : localhost:3306
Source Database : mall
Target Server Type : MYSQL
Target Server Version : 50713
File Encoding : 65001
Date: 2017-11-26 16:23:18
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for admin_user
-- ----------------------------
DROP TABLE IF EXISTS `admin_user`;
CREATE TABLE `admin_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`password` varchar(255) DEFAULT NULL,
`username` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of admin_user
-- ----------------------------
INSERT INTO `admin_user` VALUES ('1', 'admin', 'admin');
-- ----------------------------
-- Table structure for classification
-- ----------------------------
DROP TABLE IF EXISTS `classification`;
CREATE TABLE `classification` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cname` varchar(255) DEFAULT NULL,
`parent_id` int(11) DEFAULT NULL,
`type` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of classification
-- ----------------------------
INSERT INTO `classification` VALUES ('1', '服装', '0', '1');
INSERT INTO `classification` VALUES ('2', '电脑', null, '1');
INSERT INTO `classification` VALUES ('3', '手机', null, '1');
INSERT INTO `classification` VALUES ('4', '食品', null, '1');
INSERT INTO `classification` VALUES ('5', '笔记本', '2', '2');
INSERT INTO `classification` VALUES ('6', '平板', '2', '2');
INSERT INTO `classification` VALUES ('7', '台式机', '2', '2');
INSERT INTO `classification` VALUES ('9', '家居', '0', '1');
INSERT INTO `classification` VALUES ('10', '饮料', '4', '2');
INSERT INTO `classification` VALUES ('11', '智能手机', '3', '2');
-- ----------------------------
-- Table structure for order
-- ----------------------------
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`addr` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`order_time` datetime DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
`state` int(11) DEFAULT NULL,
`total` double DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of order
-- ----------------------------
INSERT INTO `order` VALUES ('1', 'fjsdakl', '小明', '2017-11-25 19:23:48', '12345654', '4', '8888', '1');
INSERT INTO `order` VALUES ('2', 'kdls;ajfklafkasld', 'tom', '2017-11-25 22:10:39', '123456894', '2', '17998', '1');
INSERT INTO `order` VALUES ('3', 'ffggghhhhfdfhjhff', 'Catalina', '2017-11-25 22:52:44', '1234322313', '2', '6077', '1');
INSERT INTO `order` VALUES ('4', 'fdsakldfjasl;', 'tomcat', '2017-11-25 23:35:01', '1234567878', '4', '8999', '1');
INSERT INTO `order` VALUES ('5', 'Gggggggg', 'Hfb', '2017-11-26 02:53:14', '18679658549', '1', '5999', '1');
-- ----------------------------
-- Table structure for order_item
-- ----------------------------
DROP TABLE IF EXISTS `order_item`;
CREATE TABLE `order_item` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`count` int(11) DEFAULT NULL,
`order_id` int(11) DEFAULT NULL,
`product_id` int(11) DEFAULT NULL,
`sub_total` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of order_item
-- ----------------------------
INSERT INTO `order_item` VALUES ('1', '1', '1', '10', '8888');
INSERT INTO `order_item` VALUES ('2', '2', '2', '9', '17998');
INSERT INTO `order_item` VALUES ('3', '2', '3', '11', '78');
INSERT INTO `order_item` VALUES ('4', '1', '3', '13', '5999');
INSERT INTO `order_item` VALUES ('5', '1', '4', '9', '8999');
INSERT INTO `order_item` VALUES ('6', '1', '5', '13', '5999');
-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`csid` int(11) DEFAULT NULL,
`desc` varchar(1000) DEFAULT NULL,
`image` varchar(255) DEFAULT NULL,
`is_hot` int(11) DEFAULT NULL,
`market_price` double DEFAULT NULL,
`pdate` datetime DEFAULT NULL,
`shop_price` bigint(20) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of product
-- ----------------------------
INSERT INTO `product` VALUES ('9', '5', '新一代 Surface Pro 比以往更出色,它不仅仅是一台笔记本,还能在工作室模式和平板间灵活切换.\r\n\r\n随心所欲百变菁英 震撼的 PixelSense™ 显示屏支持触控笔* 和触摸操作,设计方面也有所改进,与 Surface Pro 4 相比,速度和性能都得到了进一步提升,电池续航能力有较大提高。\r\n\r\n无风扇更安静 灵感随意 随手拈来 \r\n\r\n快捷刷脸登陆 保护隐私 轻松唤醒刷脸登陆 充分保护您的私人数据**** 无论您喜欢摄影、绘画、音乐或创作\r\n\r\n精彩视频\r\nSurface Pro总能满足您诸多创作需求 Surface Pro 酷睿 m3 和 i5 型号配备全新无风扇冷却系统***\r\ni7 型号改进了混合冷却系统,您可以更安静地工作或播放喜欢的节目。', '/mall/admin/product/img/0B1CDC0C82A79A25A4BA159D88D8AC.jpg', '1', '9999', '2017-11-25 00:37:57', '8999', '微软Microsoft新Surface Pro 二合一平板电脑 12.3英寸Intel Core i5 8G内存 256G存储 ');
INSERT INTO `product` VALUES ('10', '11', '一直以来,我们都心存一个设想,期待着能够打造出这样一部 iPhone它有整面的屏幕能让你在使用时完全沉浸其中仿佛忘记了它的存在。它是如此智能你的一触、一碰、一言、一语哪怕是轻轻一瞥都会得到它心有灵犀的回应。而这个设想终于随着 iPhone X 的到来成为了现实。现在,就跟未来见个面吧。', '/mall/admin/product/img/E98ECEAC9E68BE31BB623419FD0C9E.png', '1', '9999', '2017-11-24 22:17:54', '8888', 'Apple iPhone X (A1865) 64GB 银色 移动联通电信4G手机');
INSERT INTO `product` VALUES ('11', '10', '京东价:京东价为商品的销售价,是您最终决定是否购买商品的依据。\r\n划线价商品展示的划横线价格为参考价该价格可能是品牌专柜标价、商品吊牌价或由品牌供应商提供的正品零售价如厂商指导价、建议零售价等或该商品在京东平台上曾经展示过的销售价由于地区、时间的差异性和市场行情波动品牌专柜标价、商品吊牌价等可能会与您购物时展示的不一致该价格仅供您参考。\r\n折扣如无特殊说明折扣指销售商在原价、或划线价如品牌专柜标价、商品吊牌价、厂商指导价、厂商建议零售价等某一价格基础上计算出的优惠比例或优惠金额如有疑问您可在购买前联系销售商进行咨询。\r\n异常问题商品促销信息以商品详情页“促销”栏中的信息为准商品的具体售价以订单结算页价格为准如您发现活动商品售价或促销信息有异常建议购买前先联系销售商咨询。', '/mall/admin/product/img/EA03D40CEC55463A958B3629511493.jpg', '0', '40.9', '2017-11-25 22:37:23', '39', '可口可乐330ml*24听整箱装');
INSERT INTO `product` VALUES ('12', '7', '搭载NVIDIA GeForce GTX1060 3G独立显卡强大的图像显示和处理功能\r\n既可以高画质下流畅运行工作软件也支持主流大型游戏工作游戏左右兼顾。\r\n并支持兼容主流VR眼镜设备为你带来身临其境的沉浸体验。', '/mall/admin/product/img/3E1E590D6BD2ED1CF047045C83B313.jpg', '1', '4999', '2017-11-25 22:39:01', '3999', '惠普HP光影精灵580 吃鸡游戏主机i5-7400 8G 128GSSD+1T GTX1060');
INSERT INTO `product` VALUES ('13', '7', '原本就拥有强劲的基础性能能够轻松通吃时下的主流电竞游戏外观方面整机采用多面切割搭配碳纤铠甲风格搭配“胜利之眼”游戏氛围灯凸显电竞元素最主要的是这是一款UIY电竞主机机箱内部已经给升级留足了接口和空间在官方配置的基础上我们还可以进行性能和外观方面的额升级而且官方配件仍然能在保修范围内。品牌PC厂商参与到PC个性化定制和部件升级服务中来同时提供品牌厂商一贯的服务优势完全解决了DIY模式下遇到的种种痛点。不得不说联想拯救者刃 7000的出现开启了PC UIY时代。', '/mall/admin/product/img/9F6B955F4C732FF96793FC8BB2F244.jpg', '1', '6499', '2017-11-25 22:41:06', '5999', '联想Lenovo拯救者刃7000 UIY主机( i7-7700 8G 128G SSD 1T硬盘 GTX1060 Win10)');
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`addr` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
`username` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'wew6698888', '89****96@qq.com', 'skywalker', '123456', '17688970006', 'hfb');
INSERT INTO `user` VALUES ('2', '1235645645646', '89***96@qq.com', 'hfb', '123456', '18645954845', 'jesse');
INSERT INTO `user` VALUES ('3', '江西省 吉安市 泰和县', '8976677657@qq.com', '曾涛涛', '123456', '12345678941', 'ztt');

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>priv.jesse</groupId>
<artifactId>mall</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>mall</name>
<description>shopping mall project</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!--H2-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!--spring data jpa 数据持久化组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--druid连接池 mybatis-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.3</version>
</dependency>
<!--aop 切面-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--html模板引擎 类似jsp-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!--热加载代码方便调试用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--测试框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!--打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,29 @@
package priv.jesse.mall;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
*
*
* @ServletComponentScan springservletfilter, Druid
* @MapperScan("com.imlaidian.springbootdemo.dao") mybatis Mapper
* @EnableScheduling
* @EnableTransactionManagement
*
* @author hfb
* @date 2017/9/18 11:13
*/
@ServletComponentScan
@EnableConfigurationProperties
@EnableTransactionManagement
@SpringBootApplication
public class MallApplication {
public static void main(String[] args) {
SpringApplication.run(MallApplication.class, args);
}
}

@ -0,0 +1,82 @@
package priv.jesse.mall.aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartException;
import priv.jesse.mall.entity.pojo.ResultBean;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.io.Serializable;
import java.util.Set;
/**
*
* ControllerGlobalExceptionHandler
*
*
* @author hfb
* @date 2017/9/18
*/
@ControllerAdvice
public class GlobalExceptionHandler implements Serializable{
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
*
*
* @param req
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultBean<String> defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
//记录日志
LOGGER.error(e.getMessage(), e);
e.printStackTrace();
ResultBean<String> r = new ResultBean<>(e);
r.setData(req.getRequestURI());
return r;
}
@ExceptionHandler(value = RuntimeException.class)
public void runtimeExceptionHandler(HttpServletRequest req, HttpServletResponse res, Exception e) throws Exception {
//记录日志
LOGGER.error(e.getMessage(), e);
req.setAttribute("msg", e.getMessage());
//转发到error页面
req.getRequestDispatcher("/mall/user/error.html").forward(req, res);
}
/**
* validation
*
* @param req
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = ConstraintViolationException.class)
@ResponseBody
public ResultBean<String> validationExceptionHandler(HttpServletRequest req, ConstraintViolationException e) throws Exception {
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
StringBuilder strBuilder = new StringBuilder();
for (ConstraintViolation<?> violation : violations) {
strBuilder.append(violation.getMessage() + ",");
}
LOGGER.error(strBuilder.toString(), e);
ResultBean<String> r = new ResultBean(strBuilder.toString());
r.setData(req.getRequestURI());
return r;
}
}

@ -0,0 +1,61 @@
package priv.jesse.mall.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
/**
* WEB,
*/
@Aspect
@Order(5)
@Component
public class WebLogAspect {
private static final Logger LOGGER = LoggerFactory.getLogger(WebLogAspect.class);
ThreadLocal<Long> startTime = new ThreadLocal<>();
@Pointcut("execution(public * priv.jesse.mall.controller.*.*(..))")//切入点
public void webLog() {
}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
startTime.set(System.currentTimeMillis());
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 记录下请求内容
LOGGER.info("**************Start API Request**************");
LOGGER.info("URL : " + request.getRequestURI().toString());
LOGGER.info("HTTP_METHOD : " + request.getMethod());
LOGGER.info("IP : " + request.getRemoteAddr());
LOGGER.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
LOGGER.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));
}
@AfterReturning(returning = "ret", pointcut = "webLog()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
LOGGER.info("RESPONSE : " + ret);
LOGGER.info("SPEND TIME : " + (System.currentTimeMillis() - startTime.get()));
LOGGER.info("***************End API Request***************");
}
}

@ -0,0 +1,8 @@
package priv.jesse.mall.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import priv.jesse.mall.entity.AdminUser;
public interface AdminUserDao extends JpaRepository<AdminUser, Integer> {
AdminUser findByUsernameAndPassword(String username, String pwd);
}

@ -0,0 +1,16 @@
package priv.jesse.mall.dao;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import priv.jesse.mall.entity.Classification;
import java.util.List;
public interface ClassificationDao extends JpaRepository<Classification, Integer> {
List<Classification> findByType(int type);
Page<Classification> findByType(int type, Pageable pageable);
List<Classification> findByParentId(int cid);
}

@ -0,0 +1,29 @@
package priv.jesse.mall.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import priv.jesse.mall.entity.Order;
import javax.transaction.Transactional;
import java.util.List;
public interface OrderDao extends JpaRepository<Order, Integer> {
/**
*
* @param state
* @param id
*/
@Modifying
@Transactional
@Query(value = "update `order` o set o.state=?1 where o.id=?2",nativeQuery = true)
void updateState(int state,int id);
/**
*
* @param userId
* @return
*/
List<Order> findByUserId(int userId);
}

@ -0,0 +1,15 @@
package priv.jesse.mall.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import priv.jesse.mall.entity.OrderItem;
import java.util.List;
public interface OrderItemDao extends JpaRepository<OrderItem, Integer> {
/**
* Id
* @param orderId
* @return
*/
List<OrderItem> findByOrderId(int orderId);
}

@ -0,0 +1,56 @@
package priv.jesse.mall.dao;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import priv.jesse.mall.entity.Product;
import java.util.Date;
import java.util.List;
public interface ProductDao extends JpaRepository<Product, Integer> {
/**
*
*
* @param csid
* @param pageable
* @return
*/
List<Product> findByCsid(int csid, Pageable pageable);
List<Product> findByCsidIn(List<Integer> csids,Pageable pageable);
/**
*
*
* @param keyword
* @param pageable
* @return
*/
List<Product> findByTitleIsLike(String keyword, Pageable pageable);
/**
*
* @param date
* @param pageable
* @return
*/
List<Product> findByPdateAfter(Date date, Pageable pageable);
/**
*
* @param isHot
* @param pageable
* @return
*/
List<Product> findByIsHot(int isHot,Pageable pageable);
/**
* 24
* @param pageable
* @return
*/
@Query(value = "SELECT * FROM (SELECT * FROM product ORDER BY pdate DESC limit 0,24) a /*#pageable*/",nativeQuery = true)
List<Product> findNew(Pageable pageable);
}

@ -0,0 +1,23 @@
package priv.jesse.mall.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import priv.jesse.mall.entity.User;
import java.util.List;
public interface UserDao extends JpaRepository<User, Integer> {
/**
*
* @param username
* @param password
* @return
*/
User findByUsernameAndPassword(String username, String password);
/**
*
* @param username
* @return
*/
List<User> findByUsername(String username);
}

@ -0,0 +1,96 @@
package priv.jesse.mall.entity;
import javax.persistence.*;
import java.io.Serializable;
/**
*
*/
@Entity
public class AdminUser implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column
private Integer id;
@Column(nullable = false)
private String username;
@Column
private String password;
public AdminUser(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public AdminUser() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
AdminUser other = (AdminUser) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getUsername() == null ? other.getUsername() == null : this.getUsername().equals(other.getUsername()))
&& (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getUsername() == null) ? 0 : getUsername().hashCode());
result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", username=").append(username);
sb.append(", password=").append(password);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -0,0 +1,122 @@
package priv.jesse.mall.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
/**
*
*/
@Entity
public class Classification implements Serializable {
@Id
@GeneratedValue
@Column
private Integer id;
/**
* Id
*/
@Column
private Integer parentId;
/**
*
*/
@Column
private String cname;
/**
* 1 2
*/
@Column
private Integer type;
private static final long serialVersionUID = 1L;
public Classification(Integer id, Integer parentId, String cname, Integer type) {
this.id = id;
this.parentId = parentId;
this.cname = cname;
this.type = type;
}
public Classification() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname == null ? null : cname.trim();
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
Classification other = (Classification) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getParentId() == null ? other.getParentId() == null : this.getParentId().equals(other.getParentId()))
&& (this.getCname() == null ? other.getCname() == null : this.getCname().equals(other.getCname()))
&& (this.getType() == null ? other.getType() == null : this.getType().equals(other.getType()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getParentId() == null) ? 0 : getParentId().hashCode());
result = prime * result + ((getCname() == null) ? 0 : getCname().hashCode());
result = prime * result + ((getType() == null) ? 0 : getType().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", parentId=").append(parentId);
sb.append(", cname=").append(cname);
sb.append(", type=").append(type);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -0,0 +1,189 @@
package priv.jesse.mall.entity;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
*
*/
@Entity
@Table(name = "`order`")
public class Order implements Serializable {
@Id
@GeneratedValue
@Column
private Integer id;
/**
*
*/
@Column
private Double total;
/**
* 1: 2: 3: 4:
*/
@Column
private Integer state;
/**
*
*/
@Column
private Date orderTime;
/**
*
*/
@Column(name = "`name`")
private String name;
/**
*
*/
@Column
private String phone;
/**
*
*/
@Column
private String addr;
/**
* Id
*/
@Column
private Integer userId;
private static final long serialVersionUID = 1L;
public Order(Integer id, Double total, Integer state, Date orderTime, String name, String phone, String addr, Integer userId) {
this.id = id;
this.total = total;
this.state = state;
this.orderTime = orderTime;
this.name = name;
this.phone = phone;
this.addr = addr;
this.userId = userId;
}
public Order() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
this.total = total;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public Date getOrderTime() {
return orderTime;
}
public void setOrderTime(Date orderTime) {
this.orderTime = orderTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone == null ? null : phone.trim();
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr == null ? null : addr.trim();
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
Order other = (Order) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getTotal() == null ? other.getTotal() == null : this.getTotal().equals(other.getTotal()))
&& (this.getState() == null ? other.getState() == null : this.getState().equals(other.getState()))
&& (this.getOrderTime() == null ? other.getOrderTime() == null : this.getOrderTime().equals(other.getOrderTime()))
&& (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
&& (this.getPhone() == null ? other.getPhone() == null : this.getPhone().equals(other.getPhone()))
&& (this.getAddr() == null ? other.getAddr() == null : this.getAddr().equals(other.getAddr()))
&& (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getTotal() == null) ? 0 : getTotal().hashCode());
result = prime * result + ((getState() == null) ? 0 : getState().hashCode());
result = prime * result + ((getOrderTime() == null) ? 0 : getOrderTime().hashCode());
result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
result = prime * result + ((getPhone() == null) ? 0 : getPhone().hashCode());
result = prime * result + ((getAddr() == null) ? 0 : getAddr().hashCode());
result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", total=").append(total);
sb.append(", state=").append(state);
sb.append(", orderTime=").append(orderTime);
sb.append(", name=").append(name);
sb.append(", phone=").append(phone);
sb.append(", addr=").append(addr);
sb.append(", userId=").append(userId);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -0,0 +1,147 @@
package priv.jesse.mall.entity;
import javax.persistence.*;
import java.io.Serializable;
/**
*
*/
@Entity
public class OrderItem implements Serializable {
@Id
@GeneratedValue
@Column
private Integer id;
/**
* Id
*/
@Column
private Integer orderId;
/**
* Id
*/
@Column
private Integer productId;
/**
*
*/
@Column
private Integer count;
/**
*
*/
@Column
private Double subTotal;
@Transient
private Product product;
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
private static final long serialVersionUID = 1L;
public OrderItem(Integer id, Integer orderId, Integer productId, Integer count, Double subTotal) {
this.id = id;
this.orderId = orderId;
this.productId = productId;
this.count = count;
this.subTotal = subTotal;
}
public OrderItem() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getOrderId() {
return orderId;
}
public void setOrderId(Integer orderId) {
this.orderId = orderId;
}
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public Double getSubTotal() {
return subTotal;
}
public void setSubTotal(Double subTotal) {
this.subTotal = subTotal;
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
OrderItem other = (OrderItem) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getOrderId() == null ? other.getOrderId() == null : this.getOrderId().equals(other.getOrderId()))
&& (this.getProductId() == null ? other.getProductId() == null : this.getProductId().equals(other.getProductId()))
&& (this.getCount() == null ? other.getCount() == null : this.getCount().equals(other.getCount()))
&& (this.getSubTotal() == null ? other.getSubTotal() == null : this.getSubTotal().equals(other.getSubTotal()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getOrderId() == null) ? 0 : getOrderId().hashCode());
result = prime * result + ((getProductId() == null) ? 0 : getProductId().hashCode());
result = prime * result + ((getCount() == null) ? 0 : getCount().hashCode());
result = prime * result + ((getSubTotal() == null) ? 0 : getSubTotal().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", orderId=").append(orderId);
sb.append(", productId=").append(productId);
sb.append(", count=").append(count);
sb.append(", subTotal=").append(subTotal);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -0,0 +1,215 @@
package priv.jesse.mall.entity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Entity
@JsonIgnoreProperties({ "handler","hibernateLazyInitializer" })
public class Product implements Serializable {
@Id
@GeneratedValue
@Column
private Integer id;
/**
*
*/
@Column
private String title;
/**
*
*/
@Column
private Double marketPrice;
/**
*
*/
@Column
private Double shopPrice;
/**
*
*/
@Column
private String image;
/**
*
*/
@Column(name = "`desc`", columnDefinition = "text")
private String desc;
/**
*
*/
@Column
private Integer isHot;
/**
* Id
*/
@Column
private Integer csid;
/**
*
*/
@Column
private Date pdate;
@Transient
private Classification categorySec;
public Classification getCategorySec() {
return categorySec;
}
public void setCategorySec(Classification categorySec) {
this.categorySec = categorySec;
}
private static final long serialVersionUID = 1L;
public Product(Integer id, String title, Double marketPrice, Double shopPrice, String image, String desc, Integer isHot, Integer csid, Date pdate) {
this.id = id;
this.title = title;
this.marketPrice = marketPrice;
this.shopPrice = shopPrice;
this.image = image;
this.desc = desc;
this.isHot = isHot;
this.csid = csid;
this.pdate = pdate;
}
public Product() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title == null ? null : title.trim();
}
public Double getMarketPrice() {
return marketPrice;
}
public void setMarketPrice(Double marketPrice) {
this.marketPrice = marketPrice;
}
public Double getShopPrice() {
return shopPrice;
}
public void setShopPrice(Double shopPrice) {
this.shopPrice = shopPrice;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image == null ? null : image.trim();
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc == null ? null : desc.trim();
}
public Integer getIsHot() {
return isHot;
}
public void setIsHot(Integer isHot) {
this.isHot = isHot;
}
public Integer getCsid() {
return csid;
}
public void setCsid(Integer csid) {
this.csid = csid;
}
public Date getPdate() {
return pdate;
}
public void setPdate(Date pdate) {
this.pdate = pdate;
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
Product other = (Product) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getTitle() == null ? other.getTitle() == null : this.getTitle().equals(other.getTitle()))
&& (this.getMarketPrice() == null ? other.getMarketPrice() == null : this.getMarketPrice().equals(other.getMarketPrice()))
&& (this.getShopPrice() == null ? other.getShopPrice() == null : this.getShopPrice().equals(other.getShopPrice()))
&& (this.getImage() == null ? other.getImage() == null : this.getImage().equals(other.getImage()))
&& (this.getDesc() == null ? other.getDesc() == null : this.getDesc().equals(other.getDesc()))
&& (this.getIsHot() == null ? other.getIsHot() == null : this.getIsHot().equals(other.getIsHot()))
&& (this.getCsid() == null ? other.getCsid() == null : this.getCsid().equals(other.getCsid()))
&& (this.getPdate() == null ? other.getPdate() == null : this.getPdate().equals(other.getPdate()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getTitle() == null) ? 0 : getTitle().hashCode());
result = prime * result + ((getMarketPrice() == null) ? 0 : getMarketPrice().hashCode());
result = prime * result + ((getShopPrice() == null) ? 0 : getShopPrice().hashCode());
result = prime * result + ((getImage() == null) ? 0 : getImage().hashCode());
result = prime * result + ((getDesc() == null) ? 0 : getDesc().hashCode());
result = prime * result + ((getIsHot() == null) ? 0 : getIsHot().hashCode());
result = prime * result + ((getCsid() == null) ? 0 : getCsid().hashCode());
result = prime * result + ((getPdate() == null) ? 0 : getPdate().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", title=").append(title);
sb.append(", marketPrice=").append(marketPrice);
sb.append(", shopPrice=").append(shopPrice);
sb.append(", image=").append(image);
sb.append(", desc=").append(desc);
sb.append(", isHot=").append(isHot);
sb.append(", csid=").append(csid);
sb.append(", pdate=").append(pdate);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -0,0 +1,171 @@
package priv.jesse.mall.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
@Entity
public class User implements Serializable {
@Id
@GeneratedValue
@Column
private Integer id;
/**
*
*/
@Column
private String username;
/**
*
*/
@Column
private String password;
/**
*
*/
@Column
private String name;
/**
*
*/
@Column
private String email;
/**
*
*/
@Column
private String phone;
/**
*
*/
@Column
private String addr;
private static final long serialVersionUID = 1L;
public User(Integer id, String username, String password, String name, String email, String phone, String addr, String code, Integer state) {
this.id = id;
this.username = username;
this.password = password;
this.name = name;
this.email = email;
this.phone = phone;
this.addr = addr;
}
public User() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email == null ? null : email.trim();
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone == null ? null : phone.trim();
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr == null ? null : addr.trim();
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
User other = (User) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getUsername() == null ? other.getUsername() == null : this.getUsername().equals(other.getUsername()))
&& (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword()))
&& (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
&& (this.getEmail() == null ? other.getEmail() == null : this.getEmail().equals(other.getEmail()))
&& (this.getPhone() == null ? other.getPhone() == null : this.getPhone().equals(other.getPhone()))
&& (this.getAddr() == null ? other.getAddr() == null : this.getAddr().equals(other.getAddr()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getUsername() == null) ? 0 : getUsername().hashCode());
result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());
result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
result = prime * result + ((getEmail() == null) ? 0 : getEmail().hashCode());
result = prime * result + ((getPhone() == null) ? 0 : getPhone().hashCode());
result = prime * result + ((getAddr() == null) ? 0 : getAddr().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", username=").append(username);
sb.append(", password=").append(password);
sb.append(", name=").append(name);
sb.append(", email=").append(email);
sb.append(", phone=").append(phone);
sb.append(", addr=").append(addr);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -0,0 +1,96 @@
package priv.jesse.mall.entity.pojo;
import java.io.Serializable;
/**
*
*
* @author hfb
* @date 2017/9/18
*/
public class ResultBean<T> implements Serializable {
private static final long serialVersionUID = -6248298306422072592L;
/**
*
*/
public static final int SUCCESS = 0;
/**
*
*/
public static final int FAIL = 1;
/**
*
*/
public static final int NO_PERMISSION = 2;
public static final String NO_LOGIN_MSG = "未登录";
public static final String NO_PERMISSION_MSG = "没有权限";
public static final String SUCC_MSG = "成功";
public static final String FAIL_MSG = "失败";
private String message = SUCC_MSG;
private int state = SUCCESS;
/**
*
*/
private T data;
public ResultBean() {
super();
}
public ResultBean(T data) {
super();
this.data = data;
}
/**
*
*
* @param e
*/
public ResultBean(Throwable e) {
super();
this.message = e.getMessage();
this.state = FAIL;
}
public ResultBean(String message) {
super();
this.message = message;
this.state = FAIL;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@Override
public String toString() {
return "ResultBean{" +
"message='" + message + '\'' +
", state=" + state +
", data=" + data +
'}';
}
}

@ -0,0 +1,131 @@
package priv.jesse.mall.filter;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
/**
*
*
* @author hfb
* @date 2017/9/18
*/
@WebFilter
public class AuthorizationFilter implements Filter {
public AuthorizationFilter() {
}
private static final Logger LOGGER = LoggerFactory.getLogger(AuthorizationFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
// 支持跨域访问
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,X-Custom-Header");
response.setHeader("X-Powered-By", "SpringBoot");
if ("option".equalsIgnoreCase(request.getMethod())) {
responseJSON(response, new HashMap<>());
return;
}
//除了拦截login.html 其他html都拦截
StringBuffer url = request.getRequestURL();
//System.out.println(url);
String path = url.toString();
// 只拦截这些类型请求
if (path.endsWith(".do") || path.endsWith(".html")) {
// 登录,图片不拦截
if (path.endsWith("toLogin.html")
|| path.endsWith("toRegister.html")
|| path.endsWith("register.do")
|| path.endsWith("login.do")
|| path.endsWith("logout.do")
|| path.endsWith("error.html")
|| path.endsWith("checkUsername.do")
|| path.contains("/mall/admin/product/img/")
|| path.endsWith("index.html")
|| path.endsWith("classification/list.do")
|| path.contains("product")
|| path.contains("/mall/h2-console")) {
chain.doFilter(request, response);
} else {
processAccessControl(request, response, chain);
}
} else {
//其他静态资源都不拦截
chain.doFilter(request, response);
}
}
/**
* @param request
* @param response
* @param chain
* @throws IOException
* @throws ServletException
*/
private void processAccessControl(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
Object adminUser = request.getSession().getAttribute("login_user");
Object user = request.getSession().getAttribute("user");
String url = request.getRequestURL().toString();
if (url.indexOf("admin") != -1){
if (adminUser == null) {
response.sendRedirect("/mall/admin/toLogin.html");
}else {
chain.doFilter(request, response);
}
}else {
if (user == null) {
response.sendRedirect("/mall/user/toLogin.html");
}else {
chain.doFilter(request, response);
}
}
}
@Override
public void destroy() {
}
/**
* JOSN
*
* @param response
* @param object
* @throws IOException
*/
public static void responseJSON(HttpServletResponse response, Object object) throws IOException {
response.setContentType("application/json;charset=utf-8");
response.setCharacterEncoding("UTF-8");
ObjectMapper mapper = new ObjectMapper();
if (object == null)
return;
String jsonStr = mapper.writeValueAsString(object);
OutputStream out = response.getOutputStream();
out.write(jsonStr.getBytes("UTF-8"));
out.flush();
}
}

@ -0,0 +1,70 @@
package priv.jesse.mall.service;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpRequest;
import priv.jesse.mall.entity.AdminUser;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
public interface AdminUserService {
/**
* id
*
* @param id
* @return
*/
AdminUser findById(int id);
/**
*
*
* @param pageable
* @return
*/
Page<AdminUser> findAll(Pageable pageable);
/**
*
*
* @param example
* @return
*/
List<AdminUser> findAllExample(Example<AdminUser> example);
/**
*
*
* @param adminUser
* @return
*/
void update(AdminUser adminUser);
/**
*
*
* @param adminUser
* @return
*/
int create(AdminUser adminUser);
/**
* Id
*
* @param id
* @return
*/
void delById(int id);
/**
*
* @param request
* @param username
* @param pwd
* @return
*/
AdminUser checkLogin(HttpServletRequest request,String username, String pwd);
}

@ -0,0 +1,73 @@
package priv.jesse.mall.service;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import priv.jesse.mall.entity.Classification;
import java.util.List;
public interface ClassificationService {
/**
* id
*
* @param id
* @return
*/
Classification findById(int id);
/**
*
*
* @param type
* @return
*/
List<Classification> findAll(int type);
/**
*
*
* @param pageable
* @return
*/
Page<Classification> findAll(int type,Pageable pageable);
/**
*
*
* @param example
* @return
*/
List<Classification> findAllExample(Example<Classification> example);
/**
*
*
* @param Classification
* @return
*/
void update(Classification Classification);
/**
*
*
* @param Classification
* @return
*/
int create(Classification Classification);
/**
* Id
*
* @param id
* @return
*/
void delById(int id);
/**
* id
* @param cid
* @return
*/
List<Classification> findByParentId(int cid);
}

@ -0,0 +1,117 @@
package priv.jesse.mall.service;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import priv.jesse.mall.entity.Order;
import priv.jesse.mall.entity.OrderItem;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface OrderService {
/**
* 1: 2: 3: 4:
*/
int STATE_NO_PAY = 1;
int STATE_WAITE_SEND = 2;
int STATE_WAITE_RECEIVE = 3;
int STATE_COMPLETE = 4;
/**
* id
*
* @param id
* @return
*/
Order findById(int id);
/**
*
*
* @param pageable
* @return
*/
Page<Order> findAll(Pageable pageable);
/**
*
*
* @param example
* @return
*/
List<Order> findAllExample(Example<Order> example);
/**
*
*
* @param order
* @return
*/
void update(Order order);
/**
*
*
* @param order
* @return
*/
int create(Order order);
/**
* Id
*
* @param id
* @return
*/
void delById(int id);
/**
*
*
* @param orderId
* @return
*/
List<OrderItem> findItems(int orderId);
/**
*
*
* @param id
* @param status
*/
void updateStatus(int id, int status);
/**
*
*
* @param request
* @return
*/
List<Order> findUserOrder(HttpServletRequest request);
/**
*
* @param orderId
*/
void pay(int orderId);
/**
*
* @param name
* @param phone
* @param addr
* @param request
* @param response
*/
void submit(String name, String phone, String addr, HttpServletRequest request, HttpServletResponse response) throws Exception;
/**
*
* @param orderId
*/
void receive(int orderId);
}

@ -0,0 +1,78 @@
package priv.jesse.mall.service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import priv.jesse.mall.entity.Product;
import java.util.List;
public interface ProductService {
/**
* id
*
* @param id
* @return
*/
Product findById(int id);
/**
*
*
* @param pageable
* @return
*/
Page<Product> findAll(Pageable pageable);
/**
*
* @return
*/
List<Product> findHotProduct();
/**
*
* @param pageable
* @return
*/
List<Product> findNewProduct(Pageable pageable);
/**
*
* @param cid
* @param pageable
* @return
*/
List<Product> findByCid(int cid,Pageable pageable);
/**
*
* @param csid
* @param pageable
* @return
*/
List<Product> findByCsid(int csid,Pageable pageable);
/**
*
*
* @param product
* @return
*/
void update(Product product);
/**
*
*
* @param product
* @return
*/
int create(Product product);
/**
* Id
*
* @param id
* @return
*/
void delById(int id);
}

@ -0,0 +1,34 @@
package priv.jesse.mall.service;
import priv.jesse.mall.entity.OrderItem;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
*
*/
public interface ShopCartService {
String NAME_PREFIX = "shop_cart_";
/**
*
* @param
*/
void addCart(int productId, HttpServletRequest request) throws Exception;
/**
*
* @param productId
* @param request
*/
void remove(int productId, HttpServletRequest request) throws Exception;
/**
*
* @param request
* @return
*/
List<OrderItem> listCart(HttpServletRequest request) throws Exception;
}

@ -0,0 +1,75 @@
package priv.jesse.mall.service;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import priv.jesse.mall.entity.User;
import java.util.List;
public interface UserService {
/**
* id
*
* @param id
* @return
*/
User findById(int id);
/**
*
*
* @param pageable
* @return
*/
Page<User> findAll(Pageable pageable);
/**
*
*
* @param example
* @return
*/
List<User> findAllExample(Example<User> example);
/**
*
*
* @param user
* @return
*/
void update(User user);
/**
*
*
* @param user
* @return
*/
int create(User user);
/**
* Id
*
* @param id
* @return
*/
void delById(int id);
/**
*
* @param username
* @return
*/
List<User> findByUsername(String username);
/**
*
* @param username
* @param password
* @return
*/
User checkLogin(String username,String password);
}

@ -0,0 +1,22 @@
package priv.jesse.mall.service.exception;
public class LoginException extends RuntimeException {
public LoginException() {
}
public LoginException(String message) {
super(message);
}
public LoginException(String message, Throwable cause) {
super(message, cause);
}
public LoginException(Throwable cause) {
super(cause);
}
public LoginException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

@ -0,0 +1,62 @@
package priv.jesse.mall.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import priv.jesse.mall.dao.AdminUserDao;
import priv.jesse.mall.entity.AdminUser;
import priv.jesse.mall.service.AdminUserService;
import priv.jesse.mall.service.exception.LoginException;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Service
public class AdminUserServiceImpl implements AdminUserService {
@Autowired
private AdminUserDao adminUserDao;
@Override
public AdminUser findById(int id) {
return adminUserDao.getOne(id);
}
@Override
public Page<AdminUser> findAll(Pageable pageable) {
return adminUserDao.findAll(pageable);
}
@Override
public List<AdminUser> findAllExample(Example<AdminUser> example) {
return adminUserDao.findAll(example);
}
@Override
public void update(AdminUser adminUser) {
adminUserDao.save(adminUser);
}
@Override
public int create(AdminUser adminUser) {
AdminUser adminUser1 = adminUserDao.save(adminUser);
return adminUser.getId();
}
@Override
public void delById(int id) {
adminUserDao.delete(id);
}
@Override
public AdminUser checkLogin(HttpServletRequest request, String username, String pwd) {
AdminUser adminUser = adminUserDao.findByUsernameAndPassword(username, pwd);
if (adminUser != null) {
request.getSession().setAttribute("login_user", adminUser);
} else {
throw new LoginException("用户名或密码错误");
}
return adminUser;
}
}

@ -0,0 +1,71 @@
package priv.jesse.mall.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import priv.jesse.mall.dao.ClassificationDao;
import priv.jesse.mall.entity.Classification;
import priv.jesse.mall.service.ClassificationService;
import java.util.List;
@Service
public class ClassificationServiceImpl implements ClassificationService {
@Autowired
private ClassificationDao classificationDao;
@Override
public Classification findById(int id) {
return classificationDao.getOne(id);
}
@Override
public List<Classification> findAll(int type) {
return classificationDao.findByType(type);
}
/**
*
*
* @param pageable
* @return
*/
@Override
public Page<Classification> findAll(int type, Pageable pageable) {
return classificationDao.findByType(type, pageable);
}
@Override
public List<Classification> findAllExample(Example<Classification> example) {
return classificationDao.findAll(example);
}
@Override
public void update(Classification classification) {
classificationDao.save(classification);
}
@Override
public int create(Classification classification) {
Classification classification1 = classificationDao.save(classification);
return classification.getId();
}
@Override
public void delById(int id) {
classificationDao.delete(id);
}
/**
* id
*
* @param cid
* @return
*/
@Override
public List<Classification> findByParentId(int cid) {
return classificationDao.findByParentId(cid);
}
}

@ -0,0 +1,177 @@
package priv.jesse.mall.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import priv.jesse.mall.dao.OrderDao;
import priv.jesse.mall.dao.OrderItemDao;
import priv.jesse.mall.dao.ProductDao;
import priv.jesse.mall.entity.Order;
import priv.jesse.mall.entity.OrderItem;
import priv.jesse.mall.entity.Product;
import priv.jesse.mall.entity.User;
import priv.jesse.mall.service.OrderService;
import priv.jesse.mall.service.ShopCartService;
import priv.jesse.mall.service.exception.LoginException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private OrderItemDao orderItemDao;
@Autowired
private ProductDao productDao;
@Autowired
private ShopCartService shopCartService;
@Override
public Order findById(int id) {
return orderDao.getOne(id);
}
@Override
public Page<Order> findAll(Pageable pageable) {
return orderDao.findAll(pageable);
}
@Override
public List<Order> findAllExample(Example<Order> example) {
return orderDao.findAll(example);
}
@Override
public void update(Order order) {
orderDao.save(order);
}
@Override
public int create(Order order) {
Order order1 = orderDao.save(order);
return order1.getId();
}
@Override
public void delById(int id) {
orderDao.delete(id);
}
/**
*
* @param orderId
* @return
*/
@Override
public List<OrderItem> findItems(int orderId) {
List<OrderItem> list = orderItemDao.findByOrderId(orderId);
for (OrderItem orderItem : list) {
Product product = productDao.findOne(orderItem.getProductId());
orderItem.setProduct(product);
}
return list;
}
/**
*
*
* @param id
* @param status
*/
@Override
public void updateStatus(int id, int status) {
Order order = orderDao.findOne(id);
order.setState(status);
orderDao.save(order);
}
/**
*
*
* @param request
* @return
*/
@Override
public List<Order> findUserOrder(HttpServletRequest request) {
//从session中获取登录用户的id查找他的订单
Object user = request.getSession().getAttribute("user");
if (user == null)
throw new LoginException("请登录!");
User loginUser = (User) user;
List<Order> orders = orderDao.findByUserId(loginUser.getId());
return orders;
}
/**
*
*
* @param orderId
*/
@Override
public void pay(int orderId) {
//具体逻辑就不实现了,直接更改状态为 待发货
Order order = orderDao.findOne(orderId);
if (order == null)
throw new RuntimeException("订单不存在");
orderDao.updateState(STATE_WAITE_SEND,order.getId());
}
/**
*
*
* @param name
* @param phone
* @param addr
* @param request
* @param response
*/
@Override
@Transactional
public void submit(String name, String phone, String addr, HttpServletRequest request, HttpServletResponse response) throws Exception {
Object user = request.getSession().getAttribute("user");
if (user == null)
throw new LoginException("请登录!");
User loginUser = (User) user;
Order order = new Order();
order.setName(name);
order.setPhone(phone);
order.setAddr(addr);
order.setOrderTime(new Date());
order.setUserId(loginUser.getId());
order.setState(STATE_NO_PAY);
List<OrderItem> orderItems = shopCartService.listCart(request);
Double total = 0.0;
order.setTotal(total);
order = orderDao.save(order);
for (OrderItem orderItem : orderItems) {
orderItem.setOrderId(order.getId());
total += orderItem.getSubTotal();
orderItemDao.save(orderItem);
}
order.setTotal(total);
orderDao.save(order);
//重定向到订单列表页面
response.sendRedirect("/mall/order/toList.html");
}
/**
*
*
* @param orderId
*/
@Override
public void receive(int orderId) {
Order order = orderDao.findOne(orderId);
if (order == null)
throw new RuntimeException("订单不存在");
orderDao.updateState(STATE_COMPLETE,order.getId());
}
}

@ -0,0 +1,102 @@
package priv.jesse.mall.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import priv.jesse.mall.dao.ClassificationDao;
import priv.jesse.mall.dao.ProductDao;
import priv.jesse.mall.entity.Classification;
import priv.jesse.mall.entity.Product;
import priv.jesse.mall.service.ProductService;
import java.util.ArrayList;
import java.util.List;
@Service
public class ProductServiceImpl implements ProductService {
@Autowired
private ProductDao productDao;
@Autowired
private ClassificationDao classificationDao;
@Override
public Product findById(int id) {
return productDao.getOne(id);
}
@Override
public Page<Product> findAll(Pageable pageable) {
return productDao.findAll(pageable);
}
/**
*
*
* @return
*/
@Override
public List<Product> findHotProduct() {
return productDao.findByIsHot(1, null);
}
/**
*
*
* @param pageable
* @return
*/
@Override
public List<Product> findNewProduct(Pageable pageable) {
// 查找两周内上架的商品
// Calendar calendar = Calendar.getInstance();
// calendar.add(Calendar.DAY_OF_MONTH, -14);
return productDao.findNew(pageable);
}
/**
*
*
* @param cid
* @param pageable
* @return
*/
@Override
public List<Product> findByCid(int cid, Pageable pageable) {
//查找出所有二级分类
List<Classification> sec = classificationDao.findByParentId(cid);
List<Integer> secIds = new ArrayList<>();
for (Classification classification : sec) {
secIds.add(classification.getId());
}
return productDao.findByCsidIn(secIds,pageable);
}
/**
*
*
* @param csid
* @param pageable
* @return
*/
@Override
public List<Product> findByCsid(int csid, Pageable pageable) {
return productDao.findByCsid(csid,pageable);
}
@Override
public void update(Product product) {
productDao.save(product);
}
@Override
public int create(Product product) {
return productDao.save(product).getId();
}
@Override
public void delById(int id) {
productDao.delete(id);
}
}

@ -0,0 +1,110 @@
package priv.jesse.mall.service.impl;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import priv.jesse.mall.entity.OrderItem;
import priv.jesse.mall.entity.Product;
import priv.jesse.mall.entity.User;
import priv.jesse.mall.service.ProductService;
import priv.jesse.mall.service.ShopCartService;
import priv.jesse.mall.service.exception.LoginException;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@Service
public class ShopCartServiceImpl implements ShopCartService {
@Autowired
private ProductService productService;
/**
*
* idSessionList<Integer>
*
* @param productId
* @param request
*/
@Override
public void addCart(int productId, HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
if (productIds == null) {
productIds = new ArrayList<>();
request.getSession().setAttribute(NAME_PREFIX + loginUser.getId(), productIds);
}
productIds.add(productId);
}
/**
*
*
* session ListId
*
* @param productId
* @param request
*/
@Override
public void remove(int productId, HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
Iterator<Integer> iterator = productIds.iterator();
while (iterator.hasNext()) {
if (productId == iterator.next()) {
iterator.remove();
}
}
}
/**
*
*
* sessionListId,List<OrderItem>
*
* @param request
* @return
*/
@Override
public List<OrderItem> listCart(HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
// key: productId value:OrderItem
Map<Integer, OrderItem> productMap = new HashMap<>();
if (productIds == null){
return new ArrayList<>();
}
// 遍历List中的商品id每个商品Id对应一个OrderItem
for (Integer productId : productIds) {
if (productMap.get(productId) == null) {
Product product = productService.findById(productId);
OrderItem orderItem = new OrderItem();
orderItem.setProduct(product);
orderItem.setProductId(productId);
orderItem.setCount(1);
orderItem.setSubTotal(product.getShopPrice());
productMap.put(productId, orderItem);
} else {
OrderItem orderItem = productMap.get(productId);
int count = orderItem.getCount();
orderItem.setCount(++count);
Double subTotal = orderItem.getSubTotal();
orderItem.setSubTotal(orderItem.getSubTotal()+subTotal);
productMap.put(productId, orderItem);
}
}
List<OrderItem> orderItems = new ArrayList<>(productMap.values());
return orderItems;
}
}

@ -0,0 +1,71 @@
package priv.jesse.mall.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import priv.jesse.mall.dao.UserDao;
import priv.jesse.mall.entity.User;
import priv.jesse.mall.service.UserService;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public User findById(int id) {
return userDao.getOne(id);
}
@Override
public Page<User> findAll(Pageable pageable) {
return userDao.findAll(pageable);
}
@Override
public List<User> findAllExample(Example<User> example) {
return userDao.findAll(example);
}
@Override
public void update(User user) {
userDao.save(user);
}
@Override
public int create(User user) {
return userDao.save(user).getId();
}
@Override
public void delById(int id) {
userDao.delete(id);
}
/**
*
*
* @param username
* @return
*/
@Override
public List<User> findByUsername(String username) {
return userDao.findByUsername(username);
}
/**
*
*
* @param username
* @param password
* @return
*/
@Override
public User checkLogin(String username, String password) {
return userDao.findByUsernameAndPassword(username, password);
}
}

@ -0,0 +1,114 @@
package priv.jesse.mall.utils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.io.IOException;
import java.security.SecureRandom;
/**
*
* @author hfb
* @date 2017/9/29
*/
public class DesUtil {
private final static String DES = "DES";
public static void main(String[] args) throws Exception {
String data = "123 456";
String key = "wow!@#$%";
System.err.println(encrypt(data, key));
System.err.println(decrypt(encrypt(data, key), key));
}
/**
* Description
* @param data
* @param key byte
* @return
* @throws Exception
*/
public static String encrypt(String data, String key) throws Exception {
byte[] bt = encrypt(data.getBytes(), key.getBytes());
String strs = new BASE64Encoder().encode(bt);
return strs;
}
/**
* Description
* @param data
* @param key byte
* @return
* @throws IOException
* @throws Exception
*/
public static String decrypt(String data, String key) throws IOException,
Exception {
if (data == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
byte[] buf = decoder.decodeBuffer(data);
byte[] bt = decrypt(buf,key.getBytes());
return new String(bt);
}
/**
* Description
* @param data
* @param key byte
* @return
* @throws Exception
*/
private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
/**
* Description
* @param data
* @param key byte
* @return
* @throws Exception
*/
private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
}

@ -0,0 +1,52 @@
package priv.jesse.mall.utils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.security.MessageDigest;
public class FileUtil {
/**
*
*
* @param file
* @return url
* @throws Exception
*/
public static String saveFile(MultipartFile file) throws Exception {
if (file == null || file.isEmpty())
return "";
File target = new File("file");
if (!target.isDirectory()) {
target.mkdirs();
}
String originalFilename = file.getOriginalFilename();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(file.getBytes());
String fileName = (Helper.bytesToHex(md.digest(),0,md.digest().length-1)) + "." + getPostfix(originalFilename);
File file1 = new File(target.getPath() + "/" + fileName);
Files.write(Paths.get(file1.toURI()), file.getBytes(), StandardOpenOption.CREATE_NEW);
return "/mall/admin/product/img/" + fileName;
}
/**
*
*
* @param fileName
* @return
*/
public static String getPostfix(String fileName) {
if (fileName == null || "".equals(fileName.trim())) {
return "";
}
if (fileName.contains(".")) {
return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
}
return "";
}
}

@ -0,0 +1,60 @@
package priv.jesse.mall.utils;
/**
* @author hfb
* @date 2017/9/29
*/
public class Helper {
private static String key = "wow!@#$%";
public static boolean isStringInArray(String str, String[] array){
for (String val:array){
if(str.equals(val)){
return true;
}
}
return false;
}
public static String encode(String str){
String enStr = "";
try {
enStr = DesUtil.encrypt(str, key);
} catch (Exception e) {
e.printStackTrace();
}
return enStr;
}
public static String decode(String str) {
String deStr = "";
try {
deStr = DesUtil.decrypt(str, key);
} catch (Exception e) {
e.printStackTrace();
}
return deStr;
}
public static String bytesToHex(byte bytes[], int start, int end) {
StringBuilder sb = new StringBuilder();
for (int i = start; i < start + end; i++) {
sb.append(byteToHex(bytes[i]));
}
return sb.toString();
}
/**
* 16
*/
private static final char HEX_DIGITS[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
/**
* 16 * @param bt * @return
*/
public static String byteToHex(byte bt) {
return HEX_DIGITS[(bt & 0xf0) >> 4] + "" + HEX_DIGITS[bt & 0xf];
}
}

@ -0,0 +1,133 @@
package priv.jesse.mall.web.admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import priv.jesse.mall.entity.Classification;
import priv.jesse.mall.entity.pojo.ResultBean;
import priv.jesse.mall.service.ClassificationService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/admin/classification")
public class AdminClassificationController {
@Autowired
private ClassificationService classificationService;
/**
*
*
* @param type
* @return
*/
@RequestMapping("/toList.html")
public String toList(int type) {
if (type == 1) {// 一级分类页面
return "admin/category/list";
} else if (type == 2) {// 二级分类页面
return "admin/categorysec/list";
} else {
return "";
}
}
/**
*
*
* @param type
* @return
*/
@RequestMapping("/toAdd.html")
public String toAdd(int type) {
if (type == 1) {// 一级分类页面
return "admin/category/add";
} else if (type == 2) {// 二级分类页面
return "admin/categorysec/add";
} else {
return "";
}
}
/**
*
*
* @param id
* @param type
* @param map
* @return
*/
@RequestMapping("/toEdit.html")
public String toEdit(int id, int type, Map<String, Object> map) {
Classification classification = classificationService.findById(id);
map.put("cate", classification);
if (type == 1) {// 一级分类页面
return "admin/category/edit";
} else if (type == 2) {// 二级分类页面
Classification classification1 = classificationService.findById(classification.getParentId());
map.put("cate", classification1);
map.put("catese",classification);
return "admin/categorysec/edit";
} else {
return "";
}
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/add.do")
public ResultBean<Boolean> add(String cname, int parentId, int type) {
Classification classification = new Classification();
classification.setCname(cname);
classification.setParentId(parentId);
classification.setType(type);
classificationService.create(classification);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/update.do")
public ResultBean<Boolean> update(int id, String cname, int parentId, int type) {
Classification classification = classificationService.findById(id);
classification.setCname(cname);
classification.setParentId(parentId);
classification.setType(type);
classificationService.update(classification);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping("/del.do")
public ResultBean<Boolean> del(int id) {
classificationService.delById(id);
return new ResultBean<>(true);
}
@RequestMapping("/list.do")
@ResponseBody
public ResultBean<List<Classification>> findAll(int type,
int pageindex, @RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
List<Classification> list = new ArrayList<>();
if (pageindex == -1)
list = classificationService.findAll(type);
else {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
list = classificationService.findAll(type, pageable).getContent();
}
return new ResultBean<>(list);
}
@ResponseBody
@RequestMapping("/getTotal.do")
public ResultBean<Integer> getTotal(int type) {
Pageable pageable = new PageRequest(1, 15, null);
int count = (int) classificationService.findAll(type, pageable).getTotalElements();
return new ResultBean<>(count);
}
}

@ -0,0 +1,66 @@
package priv.jesse.mall.web.admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import priv.jesse.mall.entity.AdminUser;
import priv.jesse.mall.entity.pojo.ResultBean;
import priv.jesse.mall.service.AdminUserService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminUserService adminUserService;
/**
* 访
*
* @return
*/
@RequestMapping("/toIndex.html")
public String toIndex() {
return "admin/index";
}
/**
* 访
*
* @return
*/
@RequestMapping("/toLogin.html")
public String toLogin() {
return "admin/login";
}
/**
*
*
* @param username
* @param password
*/
//@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/login.do")
public void login(String username, String password, HttpServletRequest request, HttpServletResponse response) throws IOException {
AdminUser adminUser = adminUserService.checkLogin(request, username, password);
response.sendRedirect("/mall/admin/toIndex.html");
}
/**
* 退
* @param request
* @param response
* @throws IOException
*/
@RequestMapping("/logout.do")
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.getSession().removeAttribute("login_user");
response.sendRedirect("toLogin.html");
}
}

@ -0,0 +1,82 @@
package priv.jesse.mall.web.admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import priv.jesse.mall.entity.Order;
import priv.jesse.mall.entity.OrderItem;
import priv.jesse.mall.entity.pojo.ResultBean;
import priv.jesse.mall.service.OrderService;
import java.util.List;
@Controller
@RequestMapping("/admin/order")
public class AdminOrderController {
@Autowired
private OrderService orderService;
/**
*
* @return
*/
@RequestMapping("/toList.html")
public String toList() {
return "admin/order/list";
}
/**
*
* @return
*/
@ResponseBody
@RequestMapping("/getTotal.do")
public ResultBean<Integer> getTotal() {
Pageable pageable = new PageRequest(1, 15, null);
int total = (int) orderService.findAll(pageable).getTotalElements();
return new ResultBean<>(total);
}
/**
*
* @param pageindex
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/list.do")
public ResultBean<List<Order>> listData(int pageindex,
@RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
List<Order> list = orderService.findAll(pageable).getContent();
return new ResultBean<>(list);
}
/**
*
* @param orderId
* @return
*/
@ResponseBody
@RequestMapping("/getDetail.do")
public ResultBean<List<OrderItem>> getDetail(int orderId) {
List<OrderItem> list = orderService.findItems(orderId);
return new ResultBean<>(list);
}
/**
*
* @param id
* @return
*/
@ResponseBody
@RequestMapping("/send.do")
public ResultBean<Boolean> send(int id) {
orderService.updateStatus(id,3);
return new ResultBean<>(true);
}
}

@ -0,0 +1,158 @@
package priv.jesse.mall.web.admin;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import priv.jesse.mall.entity.Classification;
import priv.jesse.mall.entity.Product;
import priv.jesse.mall.entity.pojo.ResultBean;
import priv.jesse.mall.service.ClassificationService;
import priv.jesse.mall.service.ProductService;
import priv.jesse.mall.utils.FileUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/admin/product")
public class AdminProductController {
@Autowired
private ProductService productService;
@Autowired
private ClassificationService classificationService;
@RequestMapping("/toList.html")
public String toList() {
return "admin/product/list";
}
@RequestMapping("/toAdd.html")
public String toAdd() {
return "admin/product/add";
}
@RequestMapping("/toEdit.html")
public String toEdit(int id, Map<String, Object> map) {
Product product = productService.findById(id);
Classification classification = classificationService.findById(product.getCsid());
product.setCategorySec(classification);
map.put("product", product);
return "admin/product/edit";
}
@ResponseBody
@RequestMapping("/list.do")
public ResultBean<List<Product>> listProduct(int pageindex,
@RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
List<Product> list = productService.findAll(pageable).getContent();
return new ResultBean<>(list);
}
@ResponseBody
@RequestMapping("/getTotal")
public ResultBean<Integer> getTotal() {
Pageable pageable = new PageRequest(1, 15, null);
int total = (int) productService.findAll(pageable).getTotalElements();
return new ResultBean<>(total);
}
@RequestMapping("/del.do")
@ResponseBody
public ResultBean<Boolean> del(int id) {
productService.delById(id);
return new ResultBean<>(true);
}
@RequestMapping(method = RequestMethod.POST, value = "/add.do")
public void add(MultipartFile image,
String title,
Double marketPrice,
Double shopPrice,
int isHot,
String desc,
int csid,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
Product product = new Product();
product.setTitle(title);
product.setMarketPrice(marketPrice);
product.setShopPrice(shopPrice);
product.setDesc(desc);
product.setIsHot(isHot);
product.setCsid(csid);
product.setPdate(new Date());
String imgUrl = FileUtil.saveFile(image);
product.setImage(imgUrl);
int id = productService.create(product);
if (id <= 0) {
request.setAttribute("message", "添加失败!");
request.getRequestDispatcher("toAdd.html").forward(request, response);
} else {
request.getRequestDispatcher("toEdit.html?id=" + id).forward(request, response);
}
}
@RequestMapping(method = RequestMethod.POST, value = "/update.do")
public void update(int id,
String title,
Double marketPrice,
Double shopPrice,
String desc,
int csid,
int isHot,
MultipartFile image,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
Product product = productService.findById(id);
product.setTitle(title);
product.setMarketPrice(marketPrice);
product.setShopPrice(shopPrice);
product.setDesc(desc);
product.setIsHot(isHot);
product.setCsid(csid);
product.setPdate(new Date());
String imgUrl = FileUtil.saveFile(image);
if (StringUtils.isNotBlank(imgUrl)) {
product.setImage(imgUrl);
}
boolean flag = false;
try {
productService.update(product);
flag = true;
} catch (Exception e) {
throw new Exception(e);
}
if (!flag) {
request.setAttribute("message", "更新失败!");
}
response.sendRedirect("toList.html");
}
@RequestMapping(method = RequestMethod.GET, value = "/img/{filename:.+}")
public void getImage(@PathVariable(name = "filename", required = true) String filename,
HttpServletResponse res) throws IOException {
File file = new File("file/" + filename);
if (file != null && file.exists()) {
res.setHeader("content-type", "application/octet-stream");
res.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
res.setContentLengthLong(file.length());
Files.copy(Paths.get(file.toURI()), res.getOutputStream());
}
}
}

@ -0,0 +1,91 @@
package priv.jesse.mall.web.admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import priv.jesse.mall.entity.User;
import priv.jesse.mall.entity.pojo.ResultBean;
import priv.jesse.mall.service.UserService;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/admin/user")
public class AdminUserController {
@Autowired
private UserService userService;
/**
*
* @return
*/
@RequestMapping("/toList.html")
public String toList() {
return "admin/user/list";
}
/**
*
* @param id
* @param map
* @return
*/
@RequestMapping("/toEdit.html")
public String toEdit(int id, Map<String, Object> map) {
User user = userService.findById(id);
map.put("user", user);
return "admin/user/edit";
}
/**
*
*
* @param pageindex
* @return
*/
@ResponseBody
@RequestMapping("/list.do")
public ResultBean<List<User>> findAllUser(int pageindex,
@RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
List<User> users = userService.findAll(pageable).getContent();
return new ResultBean<>(users);
}
@ResponseBody
@RequestMapping("/getTotal.do")
public ResultBean<Integer> geTotal() {
Pageable pageable = new PageRequest(1, 15, null);
int total = (int) userService.findAll(pageable).getTotalElements();
return new ResultBean<>(total);
}
@ResponseBody
@RequestMapping("/del.do")
public ResultBean<Boolean> del(int id) {
userService.delById(id);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/update.do")
public ResultBean<Boolean> update(int id,String username,
String password,String name,
String phone,String email,
String addr) {
// 更新前先查询
User user = userService.findById(id);
user.setId(id);
user.setName(name);
user.setUsername(username);
user.setPassword(password);
user.setAddr(addr);
user.setEmail(email);
user.setPhone(phone);
userService.update(user);
return new ResultBean<>(true);
}
}

@ -0,0 +1,9 @@
package priv.jesse.mall.web.user;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/classification")
public class ClassificationController {
}

@ -0,0 +1,28 @@
package priv.jesse.mall.web.user;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
@Controller
public class IndexController {
/**
*
* @return
*/
@RequestMapping("/index.html")
public String toIndex() {
return "mall/index";
}
/**
* 访
* @return
*/
@RequestMapping("/")
public String index(){
return "forward:/index.html";
}
}

@ -0,0 +1,104 @@
package priv.jesse.mall.web.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import priv.jesse.mall.entity.Order;
import priv.jesse.mall.entity.OrderItem;
import priv.jesse.mall.entity.pojo.ResultBean;
import priv.jesse.mall.service.OrderService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@Controller
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
/**
*
*
* @return
*/
@RequestMapping("/toList.html")
public String toOrderList() {
return "mall/order/list";
}
/**
*
*
* @param request
* @return
*/
@RequestMapping("/list.do")
@ResponseBody
public ResultBean<List<Order>> listData(HttpServletRequest request) {
List<Order> orders = orderService.findUserOrder(request);
return new ResultBean<>(orders);
}
/**
*
*
* @param orderId
* @return
*/
@RequestMapping("/getDetail.do")
@ResponseBody
public ResultBean<List<OrderItem>> getDetail(int orderId) {
List<OrderItem> orderItems = orderService.findItems(orderId);
return new ResultBean<>(orderItems);
}
/**
*
*
* @param name
* @param phone
* @param addr
* @param request
* @param response
*/
@RequestMapping("/submit.do")
public void submit(String name,
String phone,
String addr,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
orderService.submit(name, phone, addr, request, response);
}
/**
*
*
* @param orderId
*/
@RequestMapping("pay.do")
@ResponseBody
public ResultBean<Boolean> pay(int orderId, HttpServletResponse response) throws IOException {
orderService.pay(orderId);
return new ResultBean<>(true);
}
/**
*
* @param orderId
* @param response
* @return
* @throws IOException
*/
@RequestMapping("receive.do")
@ResponseBody
public ResultBean<Boolean> receive(int orderId, HttpServletResponse response) throws IOException {
orderService.receive(orderId);
return new ResultBean<>(true);
}
}

@ -0,0 +1,186 @@
package priv.jesse.mall.web.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import priv.jesse.mall.entity.Classification;
import priv.jesse.mall.entity.OrderItem;
import priv.jesse.mall.entity.Product;
import priv.jesse.mall.entity.pojo.ResultBean;
import priv.jesse.mall.service.ClassificationService;
import priv.jesse.mall.service.ProductService;
import priv.jesse.mall.service.ShopCartService;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@Autowired
private ClassificationService classificationService;
@Autowired
private ShopCartService shopCartService;
/**
*
*
* @param id
* @return
*/
@RequestMapping("/get.do")
public ResultBean<Product> getProduct(int id) {
Product product = productService.findById(id);
return new ResultBean<>(product);
}
/**
*
*
* @param id
* @param map
* @return
*/
@RequestMapping("/get.html")
public String toProductPage(int id, Map<String, Object> map) {
Product product = productService.findById(id);
map.put("product", product);
return "mall/product/info";
}
/**
*
*
* @return
*/
@ResponseBody
@RequestMapping("/hot.do")
public ResultBean<List<Product>> getHotProduct() {
List<Product> products = productService.findHotProduct();
return new ResultBean<>(products);
}
/**
*
*
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/new.do")
public ResultBean<List<Product>> getNewProduct(int pageNo, int pageSize) {
Pageable pageable = new PageRequest(pageNo, pageSize);
List<Product> products = productService.findNewProduct(pageable);
return new ResultBean<>(products);
}
/**
*
*
* @return
*/
@RequestMapping("/category.html")
public String toCatePage(int cid, Map<String, Object> map) {
Classification classification = classificationService.findById(cid);
map.put("category", classification);
return "mall/product/category";
}
@RequestMapping("/toCart.html")
public String toCart(){
return "mall/product/cart";
}
/**
*
*
* @param cid
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/category.do")
public ResultBean<List<Product>> getCategoryProduct(int cid, int pageNo, int pageSize) {
Pageable pageable = new PageRequest(pageNo, pageSize);
List<Product> products = productService.findByCid(cid, pageable);
return new ResultBean<>(products);
}
/**
*
*
* @param csId
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/categorySec.do")
public ResultBean<List<Product>> getCategorySecProduct(int csId, int pageNo, int pageSize) {
Pageable pageable = new PageRequest(pageNo, pageSize);
List<Product> products = productService.findByCsid(csId, pageable);
return new ResultBean<>(products);
}
/**
*
* @param cid
* @return
*/
@ResponseBody
@RequestMapping("/getCategorySec.do")
public ResultBean<List<Classification>> getCategorySec(int cid){
List<Classification> list = classificationService.findByParentId(cid);
return new ResultBean<>(list);
}
/**
*
*
* @param productId
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/addCart.do")
public ResultBean<Boolean> addToCart(int productId, HttpServletRequest request) throws Exception {
shopCartService.addCart(productId, request);
return new ResultBean<>(true);
}
/**
*
*
* @param productId
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/delCart.do")
public ResultBean<Boolean> delToCart(int productId, HttpServletRequest request) throws Exception {
shopCartService.remove(productId, request);
return new ResultBean<>(true);
}
/**
*
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/listCart.do")
public ResultBean<List<OrderItem>> listCart(HttpServletRequest request) throws Exception {
List<OrderItem> orderItems = shopCartService.listCart(request);
return new ResultBean<>(orderItems);
}
}

@ -0,0 +1,123 @@
package priv.jesse.mall.web.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import priv.jesse.mall.entity.User;
import priv.jesse.mall.entity.pojo.ResultBean;
import priv.jesse.mall.service.UserService;
import priv.jesse.mall.service.exception.LoginException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
*
*
* @return
*/
@RequestMapping("/toRegister.html")
public String toRegister() {
return "mall/user/register";
}
/**
*
*
* @return
*/
@RequestMapping("/toLogin.html")
public String toLogin() {
return "mall/user/login";
}
/**
*
*
* @param username
* @param password
*/
@RequestMapping("/login.do")
public void login(String username,
String password,
HttpServletRequest request,
HttpServletResponse response) throws IOException {
User user = userService.checkLogin(username, password);
if (user != null) {
//登录成功 重定向到首页
request.getSession().setAttribute("user", user);
response.sendRedirect("/mall/index.html");
} else {
throw new LoginException("登录失败! 用户名或者密码错误");
}
}
/**
*
*/
@RequestMapping("/register.do")
public void register(String username,
String password,
String name,
String phone,
String email,
String addr,
HttpServletResponse response) throws IOException {
User user = new User();
user.setUsername(username);
user.setPhone(phone);
user.setPassword(password);
user.setName(name);
user.setEmail(email);
user.setAddr(addr);
userService.create(user);
// 注册完成后重定向到登录页面
response.sendRedirect("/mall/user/toLogin.html");
}
/**
*
*/
@RequestMapping("/logout.do")
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.getSession().removeAttribute("user");
response.sendRedirect("/mall/index.html");
}
/**
*
* @param username
* @return
*/
@ResponseBody
@RequestMapping("/checkUsername.do")
public ResultBean<Boolean> checkUsername(String username){
List<User> users = userService.findByUsername(username);
if (users==null||users.isEmpty()){
return new ResultBean<>(true);
}
return new ResultBean<>(false);
}
/**
*
*
* @param response
* @param request
* @return
*/
@RequestMapping("/error.html")
public String error(HttpServletResponse response, HttpServletRequest request) {
return "error";
}
}

@ -0,0 +1,89 @@
# \u8BBF\u95EE\u8DEF\u5F84\uFF0C\u7AEF\u53E3\u914D\u7F6E
server.context-path=/mall
server.port=8081
# \u6587\u4EF6\u4E0A\u4F20\u914D\u7F6E
spring.http.multipart.enabled=true
spring.http.multipart.max-file-size=100MB
spring.http.multipart.max-request-size=100MB
logging.level.priv.jesse.mall=DEBUG
# \u914D\u7F6E\u8F6Cjson\u7684\u65F6\u95F4\u683C\u5F0F
spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
# jdbc\u8FDE\u63A5\u914D\u7F6E
# mysql
spring.datasource.url=jdbc:mysql://localhost:3306/mall?useSSL=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#thymeleaf \u6A21\u677F\u5F15\u64CE\u8BBE\u7F6E
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
##\u5F00\u53D1\u65F6\u5173\u95ED\u7F13\u5B58,\u4E0D\u7136\u6CA1\u6CD5\u770B\u5230\u5B9E\u65F6\u9875\u9762
spring.thymeleaf.cache=false
##################### jpa hibernate \u914D\u7F6E #########################
spring.jpa.show-sql=false
spring.jpa.database=mysql
spring.jpa.properties.hibernate.format_sql=false
spring.jpa.generate-ddl=true
# \u6700\u5E38\u7528\u7684\u5C5E\u6027\uFF0C\u7B2C\u4E00\u6B21\u52A0\u8F7Dhibernate\u65F6\u6839\u636Emodel\u7C7B\u4F1A\u81EA\u52A8\u5EFA\u7ACB\u8D77\u8868\u7684\u7ED3\u6784\uFF08\u524D\u63D0\u662F\u5148\u5EFA\u7ACB\u597D\u6570\u636E\u5E93\uFF09\uFF0C
# \u4EE5\u540E\u52A0\u8F7Dhibernate\u65F6\u6839\u636Emodel\u7C7B\u81EA\u52A8\u66F4\u65B0\u8868\u7ED3\u6784\uFF0C\u5373\u4F7F\u8868\u7ED3\u6784\u6539\u53D8\u4E86\u4F46\u8868\u4E2D\u7684\u884C\u4ECD\u7136\u5B58\u5728\u4E0D\u4F1A\u5220\u9664\u4EE5\u524D\u7684\u884C\u3002
# \u8981\u6CE8\u610F\u7684\u662F\u5F53\u90E8\u7F72\u5230\u670D\u52A1\u5668\u540E\uFF0C\u8868\u7ED3\u6784\u662F\u4E0D\u4F1A\u88AB\u9A6C\u4E0A\u5EFA\u7ACB\u8D77\u6765\u7684\uFF0C\u662F\u8981\u7B49\u5E94\u7528\u7B2C\u4E00\u6B21\u8FD0\u884C\u8D77\u6765\u540E\u624D\u4F1A\u3002
spring.jpa.hibernate.ddl-auto=update
##################################################################
##################druid\u6570\u636E\u5E93\u8FDE\u63A5\u6C60\u914D\u7F6E############################
#\u914D\u7F6E\u521D\u59CB\u5316\u5927\u5C0F\uFF0C\u6700\u5C0F\uFF0C\u6700\u5927
spring.datasource.druid.initial-size=1
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=1
#\u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4
spring.datasource.druid.max-wait=60000
#\u914D\u7F6E\u95F4\u9694\u591A\u4E45\u624D\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
spring.datasource.druid.time-between-eviction-runs-millis=60000
#\u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u6C60\u4E2D\u6700\u5C0F\u751F\u5B58\u7684\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 'x'
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
#\u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F
#\u5982\u679C\u7528Oracle\uFF0C\u5219\u628ApoolPreparedStatements\u914D\u7F6E\u4E3Atrue\uFF0Cmysql\u53EF\u4EE5\u914D\u7F6E\u4E3Afalse\u3002\u5206\u5E93\u5206\u8868\u8F83\u591A\u7684\u6570\u636E\u5E93\uFF0C\u5EFA\u8BAE\u914D\u7F6E\u4E3Afalse\u3002
spring.datasource.druid.pool-prepared-statements=false
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
#druid\u76D1\u63A7\u914D\u7F6E
spring.datasource.druid.filters=stat,slf4j
# WebStatFilter\u914D\u7F6E\uFF0C\u8BF4\u660E\u8BF7\u53C2\u8003Druid Wiki\uFF0C\u914D\u7F6E_\u914D\u7F6EWebStatFilter
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
# StatViewServlet\u914D\u7F6E\uFF0C\u8BF4\u660E\u8BF7\u53C2\u8003Druid Wiki\uFF0C\u914D\u7F6E_StatViewServlet\u914D\u7F6E
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=true
spring.datasource.druid.stat-view-servlet.login-username=druid
spring.datasource.druid.stat-view-servlet.login-password=123456
# Spring\u76D1\u63A7\u914D\u7F6E\uFF0C\u8BF4\u660E\u8BF7\u53C2\u8003Druid Github Wiki\uFF0C\u914D\u7F6E_Druid\u548CSpring\u5173\u8054\u76D1\u63A7\u914D\u7F6E
spring.datasource.druid.aop-patterns=priv.jesse.mall.service.impl.*
# druid\u65E5\u5FD7\u8F93\u51FA
spring.datasource.druid.filter.slf4j.enabled=true
spring.datasource.druid.filter.slf4j.result-set-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-create-after-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-close-after-log-enabled=false
spring.datasource.druid.filter.slf4j.result-set-open-after-log-enabled=false
spring.datasource.druid.filter.slf4j.result-set-close-after-log-enabled=false
##################druid\u8FDE\u63A5\u6C60\u914D\u7F6E\u7ED3\u675F############################

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别日志输出时级别高于root默认的级别时 会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面会出现高级别文件依然出现低级别的日志信息通过filter 过滤只记录本级别的日志-->
<!-- 属性描述 scan性设置为true时配置文件如果发生改变将会被重新加载默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,
默认单位是毫秒。当scan为true时此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时将打印出logback内部日志信息实时查看logback运行状态。默认值为false。 -->
<!-- 定义日志文件 输入位置 -->
<property name="log_dir" value="log" />
<!-- 日志最大的历史 30天 -->
<property name="maxHistory" value="30"/>
<!-- ConsoleAppender 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 对日志进行格式化 -->
<encoder>
<pattern>%highlight(%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger) -%msg%n</pattern>
</encoder>
</appender>
<!-- 文件日志 -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器只记录WARN级别的日志 -->
<!--<filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--<level>ERROR</level>-->
<!--<onMatch>ACCEPT</onMatch>-->
<!--<onMismatch>DENY</onMismatch>-->
<!--</filter>-->
<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志输出位置 可相对、和绝对路径 -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/log.log</fileNamePattern>
<!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6
则只保存最近6个月的文件删除之前的旧文件。注意删除旧文件是那些为了归档而创建的目录也会被删除-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<!-- 按照固定窗口模式生成日志文件当文件大于20MB时生成新的日志文件。窗口大小是1到3当保存了3个归档文件后将覆盖最早的日志。
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy> -->
<!-- 查看当前活动文件的大小如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy> -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<logger name="springfox.documentation" level="WARN" />
<logger name="org.springframework" level="WARN" />
<!--<logger name="org.hibernate" level="WARN" />-->
<!--记录druid-sql的记录-->
<logger name="druid.sql.Statement" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<!-- root级别 DEBUG -->
<root level="INFO">
<!-- 控制台输出 -->
<appender-ref ref="STDOUT" />
<!-- 文件输出 -->
<appender-ref ref="FILE" />
</root>
</configuration>

@ -0,0 +1,178 @@
div.dataTables_length label {
float: left;
text-align: left;
}
div.dataTables_length select {
width: 75px;
}
div.dataTables_filter label {
float: right;
}
div.dataTables_info {
padding-top: 8px;
}
div.dataTables_paginate {
float: right;
margin: 0;
}
table.table {
clear: both;
margin-bottom: 6px !important;
max-width: none !important;
}
table.table thead .sorting,
table.table thead .sorting_asc,
table.table thead .sorting_desc,
table.table thead .sorting_asc_disabled,
table.table thead .sorting_desc_disabled {
cursor: pointer;
*cursor: hand;
}
table.table thead .sorting { background: url('../image/sort_both.png') no-repeat center right; }
table.table thead .sorting_asc { background: url('../image/sort_asc.png') no-repeat center right; }
table.table thead .sorting_desc { background: url('../image/sort_desc.png') no-repeat center right; }
table.table thead .sorting_asc_disabled { background: url('../image/sort_asc_disabled.png') no-repeat center right; }
table.table thead .sorting_desc_disabled { background: url('../image/sort_desc_disabled.png') no-repeat center right; }
table.dataTable th:active {
outline: none;
}
/* Scrolling */
div.dataTables_scrollHead table {
margin-bottom: 0 !important;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
div.dataTables_scrollHead table thead tr:last-child th:first-child,
div.dataTables_scrollHead table thead tr:last-child td:first-child {
border-bottom-left-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
div.dataTables_scrollBody table {
border-top: none;
margin-bottom: 0 !important;
}
div.dataTables_scrollBody tbody tr:first-child th,
div.dataTables_scrollBody tbody tr:first-child td {
border-top: none;
}
div.dataTables_scrollFoot table {
border-top: none;
}
/*
* TableTools styles
*/
.table tbody tr.active td,
.table tbody tr.active th {
background-color: #08C;
color: white;
}
.table tbody tr.active:hover td,
.table tbody tr.active:hover th {
background-color: #0075b0 !important;
}
.table-striped tbody tr.active:nth-child(odd) td,
.table-striped tbody tr.active:nth-child(odd) th {
background-color: #017ebc;
}
table.DTTT_selectable tbody tr {
cursor: pointer;
*cursor: hand;
}
div.DTTT .btn {
color: #333 !important;
font-size: 12px;
}
div.DTTT .btn:hover {
text-decoration: none !important;
}
ul.DTTT_dropdown.dropdown-menu a {
color: #333 !important; /* needed only when demo_page.css is included */
}
ul.DTTT_dropdown.dropdown-menu li:hover a {
background-color: #0088cc;
color: white !important;
}
/* TableTools information display */
div.DTTT_print_info.modal {
height: 150px;
margin-top: -75px;
text-align: center;
}
div.DTTT_print_info h6 {
font-weight: normal;
font-size: 28px;
line-height: 28px;
margin: 1em;
}
div.DTTT_print_info p {
font-size: 14px;
line-height: 20px;
}
/*
* FixedColumns styles
*/
div.DTFC_LeftHeadWrapper table,
div.DTFC_LeftFootWrapper table,
table.DTFC_Cloned tr.even {
background-color: white;
}
div.DTFC_LeftHeadWrapper table {
margin-bottom: 0 !important;
border-top-right-radius: 0 !important;
border-bottom-left-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,
div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {
border-bottom-left-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
div.DTFC_LeftBodyWrapper table {
border-top: none;
margin-bottom: 0 !important;
}
div.DTFC_LeftBodyWrapper tbody tr:first-child th,
div.DTFC_LeftBodyWrapper tbody tr:first-child td {
border-top: none;
}
div.DTFC_LeftFootWrapper table {
border-top: none;
}

@ -0,0 +1,20 @@
/***
Anout Us Page
***/
.meet-our-team h3 {
margin-bottom: 0;
padding: 0 10px 10px;
background: #fcfcfc;
}
.meet-our-team small {
display:block;
font-size:12px;
}
.meet-our-team .team-info {
padding: 10px;
overflow: hidden;
background: #fafafa;
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,163 @@
/***
Blog Page
***/
/*--Block Article--*/
.blog-page {
padding-bottom: 20px;
}
.blog-page h1 {
margin-bottom: 20px;
}
.blog-page h2 a {
color: #000;
}
.blog-page h2 a:hover {
color: #0d638f;
text-decoration: none;
}
.blog-page hr {
margin-top: 30px !important;
}
.blog-page .article-block {
padding-bottom: 20px;
}
.blog-page .news-img img {
margin-top: 9px;
}
.blog-page .blog-tag-data ul {
margin-bottom: 5px;
}
.blog-page .blog-tag-data li {
padding: 0;
}
.blog-page .blog-tag-data li i {
color: #78cff8;
}
.blog-page .blog-tag-data li a {
padding: 0;
color: #555;
margin-right: 8px;
}
.blog-page .blog-tag-data {
margin-bottom: 10px;
}
.blog-page .blog-tag-data ul.blog-tags a {
background: #eee;
padding: 1px 4px;
margin: 0 4px 4px 0;
display: inline-block;
}
.blog-page .blog-tag-data ul.blog-tags a:hover {
background: #ddd;
text-decoration: none;
}
.blog-page .blog-tag-data .blog-tag-data-inner {
text-align: right;
}
.blog-page .blog-tag-data img {
margin-bottom: 12px;
}
.blog-page .blog-article {
padding-bottom: 20px;
}
.blog-page .blog-article h2 {
margin-top: 0;
}
/*--Block Sidebar--*/
.blog-sidebar h2 {
font-size: 38.5px;
margin-bottom: 20px;
}
/*Twitter block*/
.blog-twitter-block {
padding: 5px;
position: relative;
margin-bottom: 10px;
border-right: solid 2px #ddd;
}
.blog-twitter-block:hover {
background: #fafafa;
border-color: #35aa47;
}
.blog-twitter-block a {
color: #4d90fe;
}
.blog-twitter-block p {
margin-bottom: 0;
}
.blog-twitter-block span {
color: #555;
display: block;
font-size: 12px;
}
.blog-twitter-block i.blog-twiiter-icon {
color: #eee;
right: 10px;
bottom: 10px;
font-size: 30px;
position: absolute;
}
/***
Blog & News Item Page
***/
/*--Media Object--*/
.blog-page .media img {
height: 54px;
position: relative;
top: 3px;
width: 54px;
}
.blog-page h4.media-heading {
position: relative;
}
.blog-page h4.media-heading span {
color: #777777;
font-size: 12px;
position: absolute;
right: 0;
top: 3px;
}
.blog-page h4.media-heading span a {
color: #78cff8;
}
/*Post Comment*/
.blog-page .post-comment .color-red {
color: #f00;
}
/*For Responsive*/
@media (max-width: 768px) {
.blog-page .blog-tag-data .blog-tag-data-inner {
text-align: left;
}
}

@ -0,0 +1,287 @@
/***
Blue theme
***/
/***
Reset and overrides
***/
body {
background-color: #1570a6 !important;
}
/***
Page header
***/
.header .navbar-inner {
filter: none !important;
background-image: none !important;
background-color: #0f4e74 !important;
}
.header .btn-navbar {
background-color: #0f4e74 !important;
}
.header .nav .dropdown-toggle:hover,
.header .nav .dropdown.open .dropdown-toggle {
background-color: #146a9d !important;
}
.header .nav li.dropdown .dropdown-toggle i {
color: #68bbec !important;
}
/***
Page sidebar
***/
.page-sidebar {
background-color: #1570a6;
}
ul.page-sidebar-menu > li > a {
border-top: 1px solid #1c95dc !important;
color: #ffffff !important;
}
ul.page-sidebar-menu > li:last-child > a {
border-bottom: 1px solid transparent !important;
}
ul.page-sidebar-menu > li a i {
color: #7fc5ef;
}
ul.page-sidebar-menu > li.open > a,
ul.page-sidebar-menu > li > a:hover,
ul.page-sidebar-menu > li:hover > a {
background: #12618f;
}
ul.page-sidebar-menu > li.active > a {
background: #cc1d1d !important;
border-top-color: transparent !important;
color: #ffffff;
}
ul.page-sidebar-menu > li.active > a i {
color: #ffffff;
}
ul.page-sidebar-menu > li > ul.sub-menu > li:first-child > a {
border-top: 0px !important;
}
ul.page-sidebar-menu > li > ul.sub-menu > li.active > a,
ul.page-sidebar-menu > li > ul.sub-menu > li > a:hover {
color: #ffffff !important;
background: #1b8fd3 !important;
}
ul.page-sidebar-menu > li > ul.sub-menu > li > a:hover {
background: #1b8fd3 !important;
}
/* 3rd level sub menu */
ul.page-sidebar-menu > li > ul.sub-menu li > ul.sub-menu > li.active > a,
ul.page-sidebar-menu > li > ul.sub-menu li > ul.sub-menu > li > a:hover,
ul.page-sidebar-menu > li > ul.sub-menu li.open > a {
color: #ffffff !important;
background: #1b8fd3 !important;
}
/* font color for all sub menu links*/
ul.page-sidebar-menu li > ul.sub-menu > li > a {
color: #c3e4f7;
}
/* menu arrows */
ul.page-sidebar-menu > li > a .arrow:before,
ul.page-sidebar-menu > li > a .arrow.open:before {
color: #51b1e9 !important;
}
ul.page-sidebar-menu > li > ul.sub-menu a .arrow:before,
ul.page-sidebar-menu > li > ul.sub-menu a .arrow.open:before {
color: #3ba6e6 !important;
}
ul.page-sidebar-menu > li > a > .arrow.open:before {
color: #68bbec !important;
}
ul.page-sidebar-menu > li.active > a .arrow:before,
ul.page-sidebar-menu > li.active > a .arrow.open:before {
color: #ffffff !important;
}
/* sidebar search */
.page-sidebar .sidebar-search input {
background-color: #0f5179 !important;
color: #51b1e9;
}
.page-sidebar .sidebar-search input::-webkit-input-placeholder {
color: #51b1e9 !important;
}
.page-sidebar .sidebar-search input:-moz-placeholder {
color: #51b1e9 !important;
}
.page-sidebar .sidebar-search input:-ms-input-placeholder {
color: #51b1e9 !important;
}
.page-sidebar .sidebar-search input {
background-color: #1570a6 !important;
color: #bfbfbf !important;
}
.page-sidebar .sidebar-search .input-box {
border-bottom: 1px solid #51b1e9 !important;
}
.page-sidebar .sidebar-search .submit {
background-image: url(../../img/search-icon-blue.png);
}
/***
Sidebar toggler
***/
.sidebar-toggler {
background-image: url(../../img/sidebar-toggler-blue.jpg);
background-color: #0f5179;
}
/* search box bg color on expanded */
.page-sidebar-closed .page-sidebar .sidebar-search.open {
background-color: #1570a6 !important;
}
.page-sidebar-closed .page-sidebar .sidebar-search.open .remove {
background-image: url("../../img/sidebar-search-close-blue.png");
}
/* sub menu bg color on hover menu item */
.page-sidebar-closed ul.page-sidebar-menu > li:hover .sub-menu {
background-color: #1570a6;
}
/***
Horizontal Menu(new in v1.2)
***/
/*search*/
.header .hor-menu .hor-menu-search-form-toggler.hide {
background: #000000 url(../../img/hor-menu-search-close.png) no-repeat center;
}
.header .hor-menu .search-form {
background: #000000;
}
.header .hor-menu .search-form .btn {
color: #f0f8fd;
background: #04141e url(../../img/search-icon.png) no-repeat center;
}
.header .hor-menu .search-form form input {
color: #f0f8fd;
}
.header .hor-menu .search-form form input::-webkit-input-placeholder {
/* WebKit browsers */
color: #f0f8fd;
}
.header .hor-menu .search-form form input:-moz-placeholder {
/* Mozilla Firefox 4 to 18 */
color: #f0f8fd;
}
.header .hor-menu .search-form form input::-moz-placeholder {
/* Mozilla Firefox 19+ */
color: #f0f8fd;
}
.header .hor-menu .search-form form input:-ms-input-placeholder {
/* Internet Explorer 10+ */
color: #f0f8fd;
}
/***
Footer
***/
.footer .footer-inner {
color: #68bbec;
}
.footer .footer-tools .go-top {
background-color: #1985c6;
}
.footer .footer-tools .go-top:hover {
opacity: 0.7;
filter: alpha(opacity=70);
}
.footer .footer-tools .go-top i {
color: #68bbec;
}
/***
Footer Layouts (new in v1.3)
***/
/* begin:fixed footer */
.page-footer-fixed .footer {
background-color: #0f5179;
}
.page-footer-fixed .footer .footer-inner {
color: #68bbec;
}
.page-footer-fixed .footer .footer-tools .go-top {
background-color: #1985c6;
}
.page-footer-fixed .footer .footer-tools .go-top i {
color: #68bbec;
}
/* end:fixed footer */
/***
Gritter Notifications
***/
.gritter-top {
background: url(../../plugins/gritter/images/gritter-blue.png) no-repeat left -30px !important;
}
.gritter-bottom {
background: url(../../plugins/gritter/images/gritter-blue.png) no-repeat left bottom !important;
}
.gritter-item {
display: block;
background: url(../../plugins/gritter/images/gritter-blue.png) no-repeat left -40px !important;
}
.gritter-close {
background: url(../../plugins/gritter/images/gritter-blue.png) no-repeat left top !important;
}
.gritter-title {
text-shadow: none !important;
/* Not supported by IE :( */
}
/* for the light (white) version of the gritter notice */
.gritter-light .gritter-item,
.gritter-light .gritter-bottom,
.gritter-light .gritter-top,
.gritter-light .gritter-close {
background-image: url(../../plugins/gritter/images/gritter-light.png) !important;
}
.gritter-item-wrapper a {
color: #18a5ed;
}
.gritter-item-wrapper a:hover {
color: #0b6694;
}
/* begin: boxed page */
@media (min-width: 980px) {
.page-boxed {
background-color: #125e8b !important;
}
.page-boxed .page-container {
background-color: #1570a6;
border-left: 1px solid #1c98e1;
border-bottom: 1px solid #1c98e1;
}
.page-boxed.page-sidebar-fixed .page-container {
border-left: 0;
border-bottom: 0;
}
.page-boxed.page-sidebar-fixed .page-sidebar {
border-left: 1px solid #1c98e1;
}
.page-boxed.page-sidebar-fixed.page-footer-fixed .footer {
background-color: #125e8b !important;
}
}
/* end: boxed page */
/***
Landscape phone to portrait tablet
***/
@media (max-width: 979px) {
/***
page sidebar
***/
.page-sidebar {
background-color: #105882 !important;
}
ul.page-sidebar-menu > li > a {
border-top: 1px solid #187fbd !important;
}
ul.page-sidebar-menu > li:last-child > a {
border-bottom: 0 !important;
}
.page-sidebar .sidebar-search input {
background-color: #105882 !important;
}
ul.page-sidebar-menu > li.open > a,
ul.page-sidebar-menu > li > a:hover,
ul.page-sidebar-menu > li:hover > a {
background: #0e4b70;
}
}

@ -0,0 +1,116 @@
.btn-file {
position: relative;
overflow: hidden;
vertical-align: middle;
}
.btn-file > input {
position: absolute;
top: 0;
right: 0;
margin: 0;
font-size: 23px;
cursor: pointer;
opacity: 0;
filter: alpha(opacity=0);
transform: translate(-300px, 0) scale(4);
direction: ltr;
}
.fileupload {
margin-bottom: 9px;
}
.fileupload .uneditable-input {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
cursor: text;
}
.fileupload .thumbnail {
display: inline-block;
margin-bottom: 5px;
overflow: hidden;
text-align: center;
vertical-align: middle;
}
.fileupload .thumbnail > img {
display: inline-block;
max-height: 100%;
vertical-align: middle;
}
.fileupload .btn {
vertical-align: middle;
}
.fileupload-exists .fileupload-new,
.fileupload-new .fileupload-exists {
display: none;
}
.fileupload-inline .fileupload-controls {
display: inline;
}
.fileupload-new .input-append .btn-file {
-webkit-border-radius: 0 3px 3px 0;
-moz-border-radius: 0 3px 3px 0;
border-radius: 0 3px 3px 0;
}
.thumbnail-borderless .thumbnail {
padding: 0;
border: none;
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
.fileupload-new.thumbnail-borderless .thumbnail {
border: 1px solid #ddd;
}
.control-group.warning .fileupload .uneditable-input {
color: #a47e3c;
border-color: #a47e3c;
}
.control-group.warning .fileupload .fileupload-preview {
color: #a47e3c;
}
.control-group.warning .fileupload .thumbnail {
border-color: #a47e3c;
}
.control-group.error .fileupload .uneditable-input {
color: #b94a48;
border-color: #b94a48;
}
.control-group.error .fileupload .fileupload-preview {
color: #b94a48;
}
.control-group.error .fileupload .thumbnail {
border-color: #b94a48;
}
.control-group.success .fileupload .uneditable-input {
color: #468847;
border-color: #468847;
}
.control-group.success .fileupload .fileupload-preview {
color: #468847;
}
.control-group.success .fileupload .thumbnail {
border-color: #468847;
}

@ -0,0 +1,214 @@
/*!
* Bootstrap Modal
*
* Copyright Jordan Schroter
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
.modal-open {
overflow: hidden;
}
/* add a scroll bar to stop page from jerking around */
.modal-open.page-overflow .page-container,
.modal-open.page-overflow .page-container .navbar-fixed-top,
.modal-open.page-overflow .page-container .navbar-fixed-bottom,
.modal-open.page-overflow .modal-scrollable {
overflow-y: scroll;
}
@media (max-width: 979px) {
.modal-open.page-overflow .page-container .navbar-fixed-top,
.modal-open.page-overflow .page-container .navbar-fixed-bottom {
overflow-y: visible;
}
}
.modal-scrollable {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
overflow: auto;
}
.modal {
outline: none;
position: absolute;
margin-top: 0;
top: 50%;
overflow: visible; /* allow content to popup out (i.e tooltips) */
}
.modal.fade {
top: -100%;
-webkit-transition: opacity 0.3s linear, top 0.3s ease-out, bottom 0.3s ease-out, margin-top 0.3s ease-out;
-moz-transition: opacity 0.3s linear, top 0.3s ease-out, bottom 0.3s ease-out, margin-top 0.3s ease-out;
-o-transition: opacity 0.3s linear, top 0.3s ease-out, bottom 0.3s ease-out, margin-top 0.3s ease-out;
transition: opacity 0.3s linear, top 0.3s ease-out, bottom 0.3s ease-out, margin-top 0.3s ease-out;
}
.modal.fade.in {
top: 50%;
}
.modal-body {
max-height: none;
overflow: visible;
}
.modal.modal-absolute {
position: absolute;
z-index: 950;
}
.modal .loading-mask {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: #fff;
border-radius: 6px;
}
.modal-backdrop.modal-absolute{
position: absolute;
z-index: 940;
}
.modal-backdrop,
.modal-backdrop.fade.in{
opacity: 0.7;
filter: alpha(opacity=70);
background: #fff;
}
.modal.container {
width: 940px;
margin-left: -470px;
}
/* Modal Overflow */
.modal-overflow.modal {
top: 1%;
}
.modal-overflow.modal.fade {
top: -100%;
}
.modal-overflow.modal.fade.in {
top: 1%;
}
.modal-overflow .modal-body {
overflow: auto;
-webkit-overflow-scrolling: touch;
}
/* Responsive */
@media (min-width: 1200px) {
.modal.container {
width: 1170px;
margin-left: -585px;
}
}
@media (max-width: 979px) {
.modal,
.modal.container,
.modal.modal-overflow {
top: 1%;
right: 1%;
left: 1%;
bottom: auto;
width: auto !important;
height: auto !important;
margin: 0 !important;
padding: 0 !important;
}
.modal.fade.in,
.modal.container.fade.in,
.modal.modal-overflow.fade.in {
top: 1%;
bottom: auto;
}
.modal-body,
.modal-overflow .modal-body {
position: static;
margin: 0;
height: auto !important;
max-height: none !important;
overflow: visible !important;
}
.modal-footer,
.modal-overflow .modal-footer {
position: static;
}
}
.loading-spinner {
position: absolute;
top: 50%;
left: 50%;
margin: -12px 0 0 -12px;
}
/*
Animate.css - http://daneden.me/animate
Licensed under the license (http://licence.visualidiot.com/)
Copyright (c) 2012 Dan Eden*/
.animated {
-webkit-animation-duration: 1s;
-moz-animation-duration: 1s;
-o-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
-moz-animation-fill-mode: both;
-o-animation-fill-mode: both;
animation-fill-mode: both;
}
@-webkit-keyframes shake {
0%, 100% {-webkit-transform: translateX(0);}
10%, 30%, 50%, 70%, 90% {-webkit-transform: translateX(-10px);}
20%, 40%, 60%, 80% {-webkit-transform: translateX(10px);}
}
@-moz-keyframes shake {
0%, 100% {-moz-transform: translateX(0);}
10%, 30%, 50%, 70%, 90% {-moz-transform: translateX(-10px);}
20%, 40%, 60%, 80% {-moz-transform: translateX(10px);}
}
@-o-keyframes shake {
0%, 100% {-o-transform: translateX(0);}
10%, 30%, 50%, 70%, 90% {-o-transform: translateX(-10px);}
20%, 40%, 60%, 80% {-o-transform: translateX(10px);}
}
@keyframes shake {
0%, 100% {transform: translateX(0);}
10%, 30%, 50%, 70%, 90% {transform: translateX(-10px);}
20%, 40%, 60%, 80% {transform: translateX(10px);}
}
.shake {
-webkit-animation-name: shake;
-moz-animation-name: shake;
-o-animation-name: shake;
animation-name: shake;
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,94 @@
.tags {
display: inline-block;
padding: 4px 6px;
margin-bottom: 10px;
color: #555555;
vertical-align: middle;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
background-color: #ffffff;
border: 1px solid #cccccc;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border linear .2s, box-shadow linear .2s;
-moz-transition: border linear .2s, box-shadow linear .2s;
-o-transition: border linear .2s, box-shadow linear .2s;
transition: border linear .2s, box-shadow linear .2s;
width: 206px;
}
.tags-hover {
border-color: rgba(82, 168, 236, 0.8);
outline: 0;
outline: thin dotted \9;
/* IE6-9 */
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
}
.tags[class*="span"] {
float: none;
margin-left: 0;
}
.tags input[type="text"],
.tags input[type="text"]:focus {
border: none;
display: inline;
outline: 0;
margin: 0;
padding: 0;
font-size: 11.844px;
line-height: 14px;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
width: 100%;
}
.tag {
display: inline-block;
padding: 2px 4px;
font-size: 11.844px;
font-weight: bold;
line-height: 14px;
color: #ffffff;
vertical-align: baseline;
white-space: nowrap;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
background-color: #999999;
padding-left: 9px;
padding-right: 9px;
-webkit-border-radius: 9px;
-moz-border-radius: 9px;
border-radius: 9px;
margin-bottom: 5px;
margin-right: 5px;
-webkit-transition: all 0.2s;
-moz-transition: all 0.2s;
-o-transition: all 0.2s;
transition: all 0.2s;
}
.tag:empty {
display: none;
}
.tag-important {
background-color: #953b39;
}
.tag-warning {
background-color: #c67605;
}
.tag-success {
background-color: #356635;
}
.tag-info {
background-color: #2d6987;
}
.tag-inverse {
background-color: #1a1a1a;
}
.tag .close {
font-size: 14px;
line-height: 14px;
margin-left: 7px;
}

@ -0,0 +1,155 @@
/* line 11, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button {
display: inline-block;
cursor: pointer;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
border: 1px solid;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
position: relative;
text-align: left;
overflow: hidden;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* line 29, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button.deactivate {
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
opacity: 0.5;
cursor: default !important;
}
/* line 32, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button.deactivate label, .toggle-button.deactivate span {
cursor: default !important;
}
/* line 36, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button > div {
display: inline-block;
width: 150px;
position: absolute;
top: 0;
}
/* line 41, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button > div.disabled {
left: -50%;
}
/* line 45, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button input[type=checkbox] {
display: none;
}
/* line 53, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button span, .toggle-button label {
cursor: pointer;
position: relative;
float: left;
display: inline-block;
}
/* line 60, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button label {
background: #fefefe;
margin-left: -4px;
margin-right: -4px;
border: 1px solid #E6E6E6;
margin-top: -1px;
z-index: 100;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fefefe), color-stop(100%, #e6e6e6));
background-image: -webkit-linear-gradient(top, #fefefe, #e6e6e6);
background-image: -moz-linear-gradient(top, #fefefe, #e6e6e6);
background-image: -o-linear-gradient(top, #fefefe, #e6e6e6);
background-image: linear-gradient(top, #fefefe, #e6e6e6);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
}
/* line 72, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button span {
color: #fefefe;
text-align: center;
font-weight: bold;
z-index: 1;
}
/* line 78, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button span.labelLeft {
-moz-border-radius-topleft: 4px;
-webkit-border-top-left-radius: 4px;
border-top-left-radius: 4px;
-moz-border-radius-bottomleft: 4px;
-webkit-border-bottom-left-radius: 4px;
border-bottom-left-radius: 4px;
padding-left: 3px;
}
/* line 83, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button span.labelRight {
-moz-border-radius-topright: 4px;
-webkit-border-top-right-radius: 4px;
border-top-right-radius: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-right-radius: 4px;
border-bottom-right-radius: 4px;
color: black;
background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #fefefe), color-stop(100%, #e6e6e6));
background-image: -webkit-linear-gradient(bottom, #fefefe, #e6e6e6);
background-image: -moz-linear-gradient(bottom, #fefefe, #e6e6e6);
background-image: -o-linear-gradient(bottom, #fefefe, #e6e6e6);
background-image: linear-gradient(bottom, #fefefe, #e6e6e6);
padding-right: 3px;
}
/* line 91, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button span.primary, .toggle-button span.labelLeft {
color: #fefefe;
background: #0088cc;
background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #0088cc), color-stop(100%, #0055cc));
background-image: -webkit-linear-gradient(bottom, #0088cc, #0055cc);
background-image: -moz-linear-gradient(bottom, #0088cc, #0055cc);
background-image: -o-linear-gradient(bottom, #0088cc, #0055cc);
background-image: linear-gradient(bottom, #0088cc, #0055cc);
}
/* line 96, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button span.info {
color: #fefefe;
background: #5bc0de;
background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #5bc0de), color-stop(100%, #2f96b4));
background-image: -webkit-linear-gradient(bottom, #5bc0de, #2f96b4);
background-image: -moz-linear-gradient(bottom, #5bc0de, #2f96b4);
background-image: -o-linear-gradient(bottom, #5bc0de, #2f96b4);
background-image: linear-gradient(bottom, #5bc0de, #2f96b4);
}
/* line 102, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button span.success {
color: #fefefe;
background: #62c462;
background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #62c462), color-stop(100%, #51a351));
background-image: -webkit-linear-gradient(bottom, #62c462, #51a351);
background-image: -moz-linear-gradient(bottom, #62c462, #51a351);
background-image: -o-linear-gradient(bottom, #62c462, #51a351);
background-image: linear-gradient(bottom, #62c462, #51a351);
}
/* line 108, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button span.warning {
color: #fefefe;
background: #dbb450;
background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dbb450), color-stop(100%, #f89406));
background-image: -webkit-linear-gradient(bottom, #dbb450, #f89406);
background-image: -moz-linear-gradient(bottom, #dbb450, #f89406);
background-image: -o-linear-gradient(bottom, #dbb450, #f89406);
background-image: linear-gradient(bottom, #dbb450, #f89406);
}
/* line 114, ../sass/bootstrap-toggle-buttons.scss */
.toggle-button span.danger {
color: #fefefe;
background: #ee5f5b;
background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ee5f5b), color-stop(100%, #bd362f));
background-image: -webkit-linear-gradient(bottom, #ee5f5b, #bd362f);
background-image: -moz-linear-gradient(bottom, #ee5f5b, #bd362f);
background-image: -o-linear-gradient(bottom, #ee5f5b, #bd362f);
background-image: linear-gradient(bottom, #ee5f5b, #bd362f);
}

@ -0,0 +1,60 @@
/*!
* Bootstrap Tree v0.3
*
* Copyright 2012 Cutters Crossing
* Bootstrap is Copyright 2012 Twitter, Inc.
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world by @cutterbl.
*/
.tree,
.branch {
list-style: none outside none;
}
.branch {
postion: relative;
height: 0;
margin: 0 0 0 15px;
overflow: hidden;
}
.branch.in {
height: auto;
}
a:link,
a:visited,
a:hover,
a:active {
color: #000;
text-decoration: none;
}
a:hover {
text-decoration: underline;
cursor: pointer;
}
/* Work in progress */
a.tree-toggle-icon-only {
height: 16px;
width: 20px;
line-height: 16px;
vertical-align: middle;
display: inline-block;
background: url("../image/bstree-halflings.png") no-repeat;
background-position: 0 -22px;
}
a.tree-toggle {
height: 16px;
padding-left: 20px;
line-height: 16px;
vertical-align: middle;
display: inline-block;
background: url("../image/bstree-halflings.png") no-repeat;
background-position: 0 -22px;
}
a.tree-toggle.closed, a.tree-toggle-icon-only.closed {
background-position: 0 1px;
}

@ -0,0 +1,102 @@
ul.wysihtml5-toolbar {
margin: 0;
padding: 0;
display: block;
}
ul.wysihtml5-toolbar::after {
clear: both;
display: table;
content: "";
}
ul.wysihtml5-toolbar > li {
float: left;
display: list-item;
list-style: none;
margin: 0 5px 10px 0;
}
ul.wysihtml5-toolbar a[data-wysihtml5-command=bold] {
font-weight: bold;
}
ul.wysihtml5-toolbar a[data-wysihtml5-command=italic] {
font-style: italic;
}
ul.wysihtml5-toolbar a[data-wysihtml5-command=underline] {
text-decoration: underline;
}
ul.wysihtml5-toolbar a.btn.wysihtml5-command-active {
background-image: none;
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
background-color: #E6E6E6;
background-color: #D9D9D9;
outline: 0;
}
ul.wysihtml5-commands-disabled .dropdown-menu {
display: none !important;
}
ul.wysihtml5-toolbar div.wysihtml5-colors {
display:block;
width: 50px;
height: 20px;
margin-top: 2px;
margin-left: 5px;
position: absolute;
pointer-events: none;
}
ul.wysihtml5-toolbar a.wysihtml5-colors-title {
padding-left: 70px;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="black"] {
background: black !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="silver"] {
background: silver !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="gray"] {
background: gray !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="maroon"] {
background: maroon !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="red"] {
background: red !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="purple"] {
background: purple !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="green"] {
background: green !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="olive"] {
background: olive !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="navy"] {
background: navy !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="blue"] {
background: blue !important;
}
ul.wysihtml5-toolbar div[data-wysihtml5-command-value="orange"] {
background: orange !important;
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,287 @@
/***
Brown theme
***/
/***
Reset and overrides
***/
body {
background-color: #623f18 !important;
}
/***
Page header
***/
.header .navbar-inner {
filter: none !important;
background-image: none !important;
background-color: #35220d !important;
}
.header .btn-navbar {
background-color: #35220d !important;
}
.header .nav .dropdown-toggle:hover,
.header .nav .dropdown.open .dropdown-toggle {
background-color: #5a3a16 !important;
}
.header .nav li.dropdown .dropdown-toggle i {
color: #d18d42 !important;
}
/***
Page sidebar
***/
.page-sidebar {
background-color: #623f18;
}
ul.page-sidebar-menu > li > a {
border-top: 1px solid #935f24 !important;
color: #ffffff !important;
}
ul.page-sidebar-menu > li:last-child > a {
border-bottom: 1px solid transparent !important;
}
ul.page-sidebar-menu > li a i {
color: #9a6d3a;
}
ul.page-sidebar-menu > li.open > a,
ul.page-sidebar-menu > li > a:hover,
ul.page-sidebar-menu > li:hover > a {
background: #4e3112;
}
ul.page-sidebar-menu > li.active > a {
background: #4e3112 !important;
border-top-color: transparent !important;
color: #ffffff;
}
ul.page-sidebar-menu > li.active > a i {
color: #ffffff;
}
ul.page-sidebar-menu > li > ul.sub-menu > li:first-child > a {
border-top: 0px !important;
}
ul.page-sidebar-menu > li > ul.sub-menu > li.active > a,
ul.page-sidebar-menu > li > ul.sub-menu > li > a:hover {
color: #ffffff !important;
background: #8b5922 !important;
}
ul.page-sidebar-menu > li > ul.sub-menu > li > a:hover {
background: #8b5922 !important;
}
/* 3rd level sub menu */
ul.page-sidebar-menu > li > ul.sub-menu li > ul.sub-menu > li.active > a,
ul.page-sidebar-menu > li > ul.sub-menu li > ul.sub-menu > li > a:hover,
ul.page-sidebar-menu > li > ul.sub-menu li.open > a {
color: #ffffff !important;
background: #8b5922 !important;
}
/* font color for all sub menu links*/
ul.page-sidebar-menu li > ul.sub-menu > li > a {
color: #e5bf94;
}
/* menu arrows */
ul.page-sidebar-menu > li > a .arrow:before,
ul.page-sidebar-menu > li > a .arrow.open:before {
color: #c88131 !important;
}
ul.page-sidebar-menu > li > ul.sub-menu a .arrow:before,
ul.page-sidebar-menu > li > ul.sub-menu a .arrow.open:before {
color: #b4742c !important;
}
ul.page-sidebar-menu > li > a > .arrow.open:before {
color: #d18d42 !important;
}
ul.page-sidebar-menu > li.active > a .arrow:before,
ul.page-sidebar-menu > li.active > a .arrow.open:before {
color: #ffffff !important;
}
/* sidebar search */
.page-sidebar .sidebar-search input {
background-color: #39250e !important;
color: #b18d65;
}
.page-sidebar .sidebar-search input::-webkit-input-placeholder {
color: #b18d65 !important;
}
.page-sidebar .sidebar-search input:-moz-placeholder {
color: #b18d65 !important;
}
.page-sidebar .sidebar-search input:-ms-input-placeholder {
color: #b18d65 !important;
}
.page-sidebar .sidebar-search input {
background-color: #623f18 !important;
color: #b18d65 !important;
}
.page-sidebar .sidebar-search .input-box {
border-bottom: 1px solid #845f36 !important;
}
.page-sidebar .sidebar-search .submit {
background-image: url(../../img/search-icon-brown.png);
}
/***
Sidebar toggler
***/
.sidebar-toggler {
background-image: url(../../img/sidebar-toggler-brown.jpg);
background-color: #39250e;
}
/* search box bg color on expanded */
.page-sidebar-closed .page-sidebar .sidebar-search.open {
background-color: #623f18 !important;
}
.page-sidebar-closed .page-sidebar .sidebar-search.open .remove {
background-image: url("../../img/sidebar-search-close-brown.png");
}
/* sub menu bg color on hover menu item */
.page-sidebar-closed ul.page-sidebar-menu > li:hover .sub-menu {
background-color: #623f18;
}
/***
Horizontal Menu(new in v1.2)
***/
/*search*/
.header .hor-menu .hor-menu-search-form-toggler.hide {
background: #000000 url(../../img/hor-menu-search-close.png) no-repeat center;
}
.header .hor-menu .search-form {
background: #000000;
}
.header .hor-menu .search-form .btn {
color: #efd7bd;
background: #000000 url(../../img/search-icon.png) no-repeat center;
}
.header .hor-menu .search-form form input {
color: #efd7bd;
}
.header .hor-menu .search-form form input::-webkit-input-placeholder {
/* WebKit browsers */
color: #efd7bd;
}
.header .hor-menu .search-form form input:-moz-placeholder {
/* Mozilla Firefox 4 to 18 */
color: #efd7bd;
}
.header .hor-menu .search-form form input::-moz-placeholder {
/* Mozilla Firefox 19+ */
color: #efd7bd;
}
.header .hor-menu .search-form form input:-ms-input-placeholder {
/* Internet Explorer 10+ */
color: #efd7bd;
}
/***
Footer
***/
.footer .footer-inner {
color: #999999;
}
.footer .footer-tools .go-top {
background-color: #7f511f;
}
.footer .footer-tools .go-top:hover {
opacity: 0.7;
filter: alpha(opacity=70);
}
.footer .footer-tools .go-top i {
color: #d18d42;
}
/***
Footer Layouts (new in v1.3)
***/
/* begin:fixed footer */
.page-footer-fixed .footer {
background-color: #39250e;
}
.page-footer-fixed .footer .footer-inner {
color: #999999;
}
.page-footer-fixed .footer .footer-tools .go-top {
background-color: #7f511f;
}
.page-footer-fixed .footer .footer-tools .go-top i {
color: #d18d42;
}
/* end:fixed footer */
/***
Gritter Notifications
***/
.gritter-top {
background: url(../../plugins/gritter/images/gritter-brown.png) no-repeat left -30px !important;
}
.gritter-bottom {
background: url(../../plugins/gritter/images/gritter-brown.png) no-repeat left bottom !important;
}
.gritter-item {
display: block;
background: url(../../plugins/gritter/images/gritter-brown.png) no-repeat left -40px !important;
}
.gritter-close {
background: url(../../plugins/gritter/images/gritter-brown.png) no-repeat left top !important;
}
.gritter-title {
text-shadow: none !important;
/* Not supported by IE :( */
}
/* for the light (white) version of the gritter notice */
.gritter-light .gritter-item,
.gritter-light .gritter-bottom,
.gritter-light .gritter-top,
.gritter-light .gritter-close {
background-image: url(../../plugins/gritter/images/gritter-light.png) !important;
}
.gritter-item-wrapper a {
color: #b18d65;
}
.gritter-item-wrapper a:hover {
color: #755a3b;
}
/* begin: boxed page */
@media (min-width: 980px) {
.page-boxed {
background-color: #492f12 !important;
}
.page-boxed .page-container {
background-color: #623f18;
border-left: 1px solid #976125;
border-bottom: 1px solid #976125;
}
.page-boxed.page-sidebar-fixed .page-container {
border-left: 0;
border-bottom: 0;
}
.page-boxed.page-sidebar-fixed .page-sidebar {
border-left: 1px solid #976125;
}
.page-boxed.page-sidebar-fixed.page-footer-fixed .footer {
background-color: #492f12 !important;
}
}
/* end: boxed page */
/***
Landscape phone to portrait tablet
***/
@media (max-width: 979px) {
/***
page sidebar
***/
.page-sidebar {
background-color: #412a10 !important;
}
ul.page-sidebar-menu > li > a {
border-top: 1px solid #764c1d !important;
}
ul.page-sidebar-menu > li:last-child > a {
border-bottom: 0 !important;
}
.page-sidebar .sidebar-search input {
background-color: #412a10 !important;
}
ul.page-sidebar-menu > li.open > a,
ul.page-sidebar-menu > li > a:hover,
ul.page-sidebar-menu > li:hover > a {
background: #311f0c;
}
}

@ -0,0 +1,429 @@
/*
*
* Chosen for Bootstrap and Less
*
* Converted by @whitetruffle (http://www.twitter.com/whitetruffle)
* from @joeylomanto's SASS fork (http://chosen-sass-bootstrap.herokuapp.com/)
* Havest: @harvest
*
*/
/*!
* Bootstrap v2.1.1
*
* Copyright 2012 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world @twitter by @mdo and @fat.
*/
.chzn-container {
position: relative;
display: inline-block;
zoom: 1;
*display: inline;
}
.chzn-container .chzn-drop {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
-moz-box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
background: #fff;
border: 1px solid #CCC;
position: absolute;
top: 29px;
left: 0;
z-index: 1010;
margin: 4px 0 0;
}
.chzn-container-single .chzn-single {
margin-top: 3px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 0 3px #ffffff inset, 0 1px 1px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 0 3px #ffffff inset, 0 1px 1px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 3px #ffffff inset, 0 1px 1px rgba(0, 0, 0, 0.1);
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
background-color: #f6f6f6;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(50%, #f6f6f6), to(#f4f4f4));
background-image: -webkit-linear-gradient(#ffffff, #f6f6f6 50%, #f4f4f4);
background-image: -moz-linear-gradient(top, #ffffff, #f6f6f6 50%, #f4f4f4);
background-image: -o-linear-gradient(#ffffff, #f6f6f6 50%, #f4f4f4);
background-image: linear-gradient(#ffffff, #f6f6f6 50%, #f4f4f4);
background-repeat: no-repeat;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff4f4f4', GradientType=0);
-moz-background-clip: padding;
background-color: #ffffff;
border: 1px solid #CCC;
display: block;
overflow: hidden;
white-space: nowrap;
position: relative;
height: 28px;
line-height: 29px;
padding: 0 0 0 8px;
color: #555555;
text-decoration: none;
}
.chzn-container-single .chzn-single span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: 26px;
display: block;
overflow: hidden;
white-space: nowrap;
}
.chzn-container-single .chzn-single abbr {
display: block;
position: absolute;
right: 26px;
top: 8px;
width: 12px;
height: 13px;
font-size: 1px;
background: url("../image/chosen-sprite.png") right top no-repeat;
}
.chzn-container-single .chzn-single abbr:hover {
background-position: right -11px;
}
.chzn-container-single .chzn-single div {
position: absolute;
right: 0;
top: 0;
display: block;
height: 100%;
width: 18px;
}
.chzn-container-single .chzn-single div b {
background: url("../image/chosen-sprite.png") no-repeat 0 2px;
display: block;
width: 100%;
height: 100%;
}
.chzn-container-single .chzn-search {
padding: 3px 4px;
position: relative;
margin: 0;
white-space: nowrap;
z-index: 1010;
}
.chzn-container-single .chzn-search input {
margin: 1px 0;
padding: 4px 20px 4px 5px;
outline: 0;
}
.chzn-container-single .chzn-default {
color: #999;
}
.chzn-container-single .chzn-drop {
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
-moz-background-clip: padding;
}
.chzn-container-single.chzn-disabled .chzn-single abbr:hover {
background-position: right top;
}
.chzn-container-single-nosearch .chzn-search input {
position: absolute;
left: -9000px;
}
.chzn-container-multi .chzn-choices {
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border linear 0.2s;
-moz-transition: border linear 0.2s;
-o-transition: border linear 0.2s;
transition: border linear 0.2s;
-webkit-transition: box-shadow linear 0.2s;
-moz-transition: box-shadow linear 0.2s;
-o-transition: box-shadow linear 0.2s;
transition: box-shadow linear 0.2s;
background-color: #ffffff !important;
border: 1px solid #cccccc;
cursor: text;
overflow: hidden;
height: auto !important;
height: 1%;
position: relative;
display: block;
padding: 0;
margin: 0;
font-size: 14px;
line-height: 20px;
color: #555555;
}
.chzn-container-multi .chzn-choices li {
float: left;
list-style: none;
}
.chzn-container-multi .chzn-choices .search-field {
white-space: nowrap;
margin: 0;
padding: 0;
}
.chzn-container-multi .chzn-choices .search-field input {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
color: #555555;
background: transparent !important;
border: 0 !important;
font-family: sans-serif;
font-size: 100%;
height: 15px;
padding: 5px;
margin: 1px 0 2px;
outline: 0;
}
.chzn-container-multi .chzn-choices .search-field .default {
color: #999;
}
.chzn-container-multi .chzn-choices .search-choice {
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
-moz-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
background-color: #f6f6f6;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(50%, #f6f6f6), to(#f4f4f4));
background-image: -webkit-linear-gradient(#ffffff, #f6f6f6 50%, #f4f4f4);
background-image: -moz-linear-gradient(top, #ffffff, #f6f6f6 50%, #f4f4f4);
background-image: -o-linear-gradient(#ffffff, #f6f6f6 50%, #f4f4f4);
background-image: linear-gradient(#ffffff, #f6f6f6 50%, #f4f4f4);
background-repeat: no-repeat;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff4f4f4', GradientType=0);
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
-moz-background-clip: padding;
color: #555555;
border: 1px solid #999999;
line-height: 13px;
padding: 3px 20px 3px 5px;
margin: 3px 0 3px 5px;
position: relative;
cursor: default;
}
.chzn-container-multi .chzn-choices .search-choice .search-choice-close {
display: block;
position: absolute;
right: 3px;
top: 4px;
width: 12px;
height: 13px;
font-size: 1px;
background: url("../image/chosen-sprite.png") right top no-repeat;
}
.chzn-container-multi .chzn-choices .search-choice .search-choice-close:hover {
background-position: right -11px;
}
.chzn-container-multi .chzn-choices .search-choice.search-choice-disabled {
background-color: #eeeeee;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f4f4f4), color-stop(50%, #f0f0f0), to(#e8e8e8));
background-image: -webkit-linear-gradient(#f4f4f4, #f0f0f0 50%, #e8e8e8);
background-image: -moz-linear-gradient(top, #f4f4f4, #f0f0f0 50%, #e8e8e8);
background-image: -o-linear-gradient(#f4f4f4, #f0f0f0 50%, #e8e8e8);
background-image: linear-gradient(#f4f4f4, #f0f0f0 50%, #e8e8e8);
background-repeat: no-repeat;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff4f4f4', endColorstr='#ffe8e8e8', GradientType=0);
color: #666;
border: 1px solid #cccccc;
padding-right: 5px;
}
.chzn-container-multi .chzn-choices .search-choice-focus {
background: #d4d4d4;
}
.chzn-container-multi .chzn-choices .search-choice-focus .search-choice-close {
background-position: right -11px;
}
.chzn-container .chzn-results {
margin: 0 4px 4px 0;
max-height: 240px;
padding: 0 0 0 4px;
position: relative;
overflow-x: hidden;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
.chzn-container .chzn-results li {
display: none;
line-height: 15px;
padding: 5px 6px;
margin: 0;
list-style: none;
}
.chzn-container .chzn-results li em {
background: #feffde;
font-style: normal;
}
.chzn-container .chzn-results .no-results {
background: #f4f4f4;
display: list-item;
}
.chzn-container .chzn-results .group-result {
cursor: default;
color: #999;
font-weight: bold;
}
.chzn-container .chzn-results .group-option {
padding-left: 15px;
}
.chzn-container .chzn-results .active-result {
cursor: pointer;
display: list-item;
}
.chzn-container .chzn-results .highlighted {
background-color: #326dcc;
background-image: -moz-linear-gradient(top, #3875d7, #2a62bc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3875d7), to(#2a62bc));
background-image: -webkit-linear-gradient(top, #3875d7, #2a62bc);
background-image: -o-linear-gradient(top, #3875d7, #2a62bc);
background-image: linear-gradient(to bottom, #3875d7, #2a62bc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3875d7', endColorstr='#ff2a62bc', GradientType=0);
color: #fff;
}
.chzn-container .chzn-results .highlighted em {
background: transparent;
}
.chzn-container .chzn-results-scroll {
background: white;
margin: 0 4px;
position: absolute;
text-align: center;
width: 321px;
/* This should by dynamic with js */
z-index: 1;
}
.chzn-container .chzn-results-scroll span {
display: inline-block;
height: 17px;
text-indent: -5000px;
width: 9px;
}
.chzn-container .chzn-results-scroll-down {
bottom: 0;
}
.chzn-container .chzn-results-scroll-down span {
background: url("../image/chosen-sprite.png") no-repeat -4px -3px;
}
.chzn-container .chzn-results-scroll-up span {
background: url("../image/chosen-sprite.png") no-repeat -22px -3px;
}
.chzn-container-multi .chzn-results {
margin: 4px;
padding: 0;
}
.chzn-container-multi .chzn-drop .result-selected {
display: none;
}
.chzn-container-active .chzn-single {
border: 1px solid #CCC;
}
.chzn-container-active .chzn-single .chzn-drop {
margin-top: -29px;
}
.chzn-container-active .chzn-single-with-drop {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
border-color: #CCC;
}
.chzn-container-active .chzn-single-with-drop div {
background: transparent;
border-left: none;
}
.chzn-container-active .chzn-single-with-drop div b {
background-position: -18px 1px;
}
.chzn-container-active .chzn-choices {
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
border: 1px solid rgba(82, 168, 236, 0.8);
outline: 0;
outline: thin dotted \9;
/* IE6-9 */
}
.chzn-container-active .chzn-choices .search-field input {
color: #111 !important;
}
.chzn-disabled {
opacity: 0.005;
filter: alpha(opacity=0.5);
cursor: default;
}
.chzn-disabled .chzn-single {
cursor: default;
}
.chzn-disabled .search-choice-close {
cursor: default;
}
.chzn-rtl {
text-align: right;
}
.chzn-rtl .chzn-single {
padding: 0 8px 0 0;
overflow: visible;
}
.chzn-rtl .chzn-single span {
margin-left: 26px;
margin-right: 0;
direction: rtl;
}
.chzn-rtl .chzn-single div {
left: 3px;
right: auto;
}
.chzn-rtl .chzn-single abbr {
left: 26px;
right: auto;
}
.chzn-rtl .chzn-choices li {
float: right;
}
.chzn-rtl .chzn-choices .search-field input {
direction: rtl;
}
.chzn-rtl .chzn-choices .search-choice {
padding: 3px 5px 3px 19px;
margin: 3px 5px 3px 0;
}
.chzn-rtl .chzn-choices .search-choice .search-choice-close {
left: 4px;
right: auto;
background-position: right top;
}
.chzn-rtl .chzn-results .group-option {
padding-left: 0;
padding-right: 15px;
}
.chzn-rtl .chzn-search input {
padding: 4px 5px 4px 20px;
direction: rtl;
}
.chzn-rtl.chzn-container-single .chzn-results {
margin: 0 0 4px 4px;
padding: 0 4px 0 0;
}
.chzn-rtl.chzn-container-active .chzn-single-with-drop div {
border-right: none;
}

@ -0,0 +1,229 @@
.clearfix {
*zoom: 1;
}
.clearfix:before,
.clearfix:after {
display: table;
content: "";
line-height: 0;
}
.clearfix:after {
clear: both;
}
.hide-text {
font: 0/0 a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0;
}
.input-block-level {
display: block;
width: 100%;
min-height: 30px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.clockface {
width: 160px;
padding: 3px;
text-align: center;
/*
.l3 .center span {
vertical-align: middle;
display: inline-block;
.ie7-inline-block();
padding: 0 2px;
}
*/
/*
input {
width: 20px;
margin: 0;
vertical-align: top;
}
a {
text-decoration: none;
padding: 0 3px;
vertical-align: top;
font-size: 0.85em;
.border-radius(3px);
&.am {margin-right: 8px;}
&.active,
&.active:hover {
.buttonBackground(@btnSuccessBackground, spin(@btnSuccessBackground, 20));
}
}
*/
}
.clockface > div {
clear: both;
overflow: auto;
}
.clockface .outer,
.clockface .inner {
width: 22px;
height: 22px;
line-height: 22px;
cursor: default;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.clockface .outer.active,
.clockface .inner.active,
.clockface .outer.active:hover,
.clockface .inner.active:hover {
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.clockface .outer:hover,
.clockface .inner:hover {
background-color: #dcdcdc;
}
.clockface .outer {
color: gray;
font-size: 0.8em;
}
.clockface .outer.active,
.clockface .outer.active:hover {
color: #ffffff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
background-color: #5bb75b;
background-image: -moz-linear-gradient(top, #62c462, #51a351);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
background-image: -webkit-linear-gradient(top, #62c462, #51a351);
background-image: -o-linear-gradient(top, #62c462, #51a351);
background-image: linear-gradient(to bottom, #62c462, #51a351);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
border-color: #51a351 #51a351 #387038;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
*background-color: #51a351;
/* Darken IE7 buttons by default so they stand out more given they won't have borders */
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
}
.clockface .outer.active:hover,
.clockface .outer.active:hover:hover,
.clockface .outer.active:active,
.clockface .outer.active:hover:active,
.clockface .outer.active.active,
.clockface .outer.active:hover.active,
.clockface .outer.active.disabled,
.clockface .outer.active:hover.disabled,
.clockface .outer.active[disabled],
.clockface .outer.active:hover[disabled] {
color: #ffffff;
background-color: #51a351;
*background-color: #499249;
}
.clockface .outer.active:active,
.clockface .outer.active:hover:active,
.clockface .outer.active.active,
.clockface .outer.active:hover.active {
background-color: #408140 \9;
}
.clockface .inner.active,
.clockface .inner.active:hover {
color: #ffffff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
*background-color: #0044cc;
/* Darken IE7 buttons by default so they stand out more given they won't have borders */
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
}
.clockface .inner.active:hover,
.clockface .inner.active:hover:hover,
.clockface .inner.active:active,
.clockface .inner.active:hover:active,
.clockface .inner.active.active,
.clockface .inner.active:hover.active,
.clockface .inner.active.disabled,
.clockface .inner.active:hover.disabled,
.clockface .inner.active[disabled],
.clockface .inner.active:hover[disabled] {
color: #ffffff;
background-color: #0044cc;
*background-color: #003bb3;
}
.clockface .inner.active:active,
.clockface .inner.active:hover:active,
.clockface .inner.active.active,
.clockface .inner.active:hover.active {
background-color: #003399 \9;
}
.clockface .l1 .cell,
.clockface .l5 .cell {
width: 22px;
display: inline-block;
*display: inline;
/* IE7 inline-block hack */
*zoom: 1;
}
.clockface .l1 .outer {
margin-bottom: 3px;
}
.clockface .l5 .outer {
margin-top: 3px;
}
.clockface .l2 .outer,
.clockface .l3 .outer,
.clockface .l4 .outer,
.clockface .l2 .inner,
.clockface .l3 .inner,
.clockface .l4 .inner {
display: inline-block;
*display: inline;
/* IE7 inline-block hack */
*zoom: 1;
vertical-align: middle;
}
.clockface .l2 .left,
.clockface .l3 .left,
.clockface .l4 .left {
float: left;
}
.clockface .l2 .left .outer,
.clockface .l3 .left .outer,
.clockface .l4 .left .outer {
margin-right: 3px;
}
.clockface .l2 .right,
.clockface .l3 .right,
.clockface .l4 .right {
float: right;
}
.clockface .l2 .right .outer,
.clockface .l3 .right .outer,
.clockface .l4 .right .outer {
margin-left: 3px;
}
.clockface .ampm {
font-size: 0.8em;
text-decoration: none;
border-bottom: dashed 1px;
}
.clockface .ampm:focus {
outline: 0;
outline: thin dotted \9;
/* IE6-9 */
}

@ -0,0 +1,7 @@
/*
Colorpicker for Bootstrap
Copyright 2012 Stefan Petre
Licensed under the Apache License v2.0
http://www.apache.org/licenses/LICENSE-2.0
*/
.colorpicker-saturation { width: 100px; height: 100px; background-image: url(../image/saturation.png); cursor: crosshair; float: left; } .colorpicker-saturation i { display: block; height: 5px; width: 5px; border: 1px solid #000; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; position: absolute; top: 0; left: 0; margin: -4px 0 0 -4px; } .colorpicker-saturation i b { display: block; height: 5px; width: 5px; border: 1px solid #fff; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .colorpicker-hue, .colorpicker-alpha { width: 15px; height: 100px; float: left; cursor: row-resize; margin-left: 4px; margin-bottom: 4px; } .colorpicker-hue i, .colorpicker-alpha i { display: block; height: 1px; background: #000; border-top: 1px solid #fff; position: absolute; top: 0; left: 0; width: 100%; margin-top: -1px; } .colorpicker-hue { background-image: url(../image/hue.png); } .colorpicker-alpha { background-image: url(../image/alpha.png); display: none; } .colorpicker { *zoom: 1; top: 0; left: 0; padding: 4px; min-width: 120px; margin-top: 1px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .colorpicker:before, .colorpicker:after { display: table; content: ""; } .colorpicker:after { clear: both; } .colorpicker:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0, 0, 0, 0.2); position: absolute; top: -7px; left: 6px; } .colorpicker:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #ffffff; position: absolute; top: -6px; left: 7px; } .colorpicker div { position: relative; } .colorpicker.alpha { min-width: 140px; } .colorpicker.alpha .colorpicker-alpha { display: block; } .colorpicker-color { height: 10px; margin-top: 5px; clear: both; background-image: url(../image/alpha.png); background-position: 0 100%; } .colorpicker-color div { height: 10px; } .input-append.color .add-on i, .input-prepend.color .add-on i { display: block; cursor: pointer; width: 16px; height: 16px; }

@ -0,0 +1,114 @@
/***
Coming Soon Page
***/
body {
background-color: #ddd;
padding: 0;
margin: 0;
}
.coming-soon-header {
padding: 20px;
margin-top: 80px;
}
.coming-soon-content {
padding: 20px;
margin-top: 10px;
}
.coming-soon-countdown {
padding: 20px;
}
.coming-soon-content h1,
.coming-soon-content p {
color: #fff;
}
.coming-soon-content h1 {
font-size: 42px;
line-height: 50px;
margin-bottom: 15px;
font-weight: 300;
}
.coming-soon-content p {
font-size: 13px;
}
.coming-soon-content input {
background: #fff !important;
}
.coming-soon-footer {
text-align: left !important;
font-size: 12px;
color: #333;
padding: 20px 20px 20px 20px;
}
/*Countdown*/
#defaultCountdown {
width: 100%;
margin: 10px 0;
overflow: hidden;
}
#defaultCountdown span.countdown_row {
overflow: hidden;
}
#defaultCountdown span.countdown_row span {
font-size: 16px;
font-weight: 300;
line-height: 20px;
margin-right: 2px;
}
#defaultCountdown span.countdown_row > span {
float: left;
}
#defaultCountdown span.countdown_section {
color: #fff;
padding: 7px 15px !important;
margin-bottom: 2px;
font-weight: 300;
background: url(../image/bg-white.png) repeat;
text-align: center;
}
#defaultCountdown span.countdown_amount {
display: inline-block;
font-size: 38px !important;
padding: 15px !important;
font-weight: 300;
}
/*Responsive*/
@media (max-width: 1024px) {
#defaultCountdown span.countdown_amount {
padding: 10px;
}
}
@media (max-width: 767px) {
.coming-soon-header,
.coming-soon-countdown,
.coming-soon-content,
.coming-soon-footer {
margin-top: 0px;
padding: 10px;
}
}
@media (max-width: 320px) {
.coming-soon-content .btn-subscribe span {
display: none;
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,449 @@
/*!
* Datepicker for Bootstrap
*
* Copyright 2012 Stefan Petre
* Improvements by Andrew Rowls
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
.datepicker {
padding: 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
direction: ltr;
/*.dow {
border-top: 1px solid #ddd !important;
}*/
}
.datepicker-inline {
width: 220px;
}
.datepicker.datepicker-rtl {
direction: rtl;
}
.datepicker.datepicker-rtl table tr td span {
float: right;
}
.datepicker-dropdown {
top: 0;
left: 0;
}
.datepicker-dropdown:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-bottom-color: rgba(0, 0, 0, 0.2);
position: absolute;
top: -7px;
left: 6px;
}
.datepicker-dropdown:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
position: absolute;
top: -6px;
left: 7px;
}
.datepicker > div {
display: none;
}
.datepicker.days div.datepicker-days {
display: block;
}
.datepicker.months div.datepicker-months {
display: block;
}
.datepicker.years div.datepicker-years {
display: block;
}
.datepicker table {
margin: 0;
}
.datepicker td,
.datepicker th {
text-align: center;
width: 20px;
height: 20px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: none;
}
.table-striped .datepicker table tr td,
.table-striped .datepicker table tr th {
background-color: transparent;
}
.datepicker table tr td.day:hover {
background: #eeeeee;
cursor: pointer;
}
.datepicker table tr td.old,
.datepicker table tr td.new {
color: #999999;
}
.datepicker table tr td.disabled,
.datepicker table tr td.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datepicker table tr td.today,
.datepicker table tr td.today:hover,
.datepicker table tr td.today.disabled,
.datepicker table tr td.today.disabled:hover {
background-color: #fde19a;
background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
background-image: linear-gradient(top, #fdd49a, #fdf59a);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
border-color: #fdf59a #fdf59a #fbed50;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #000;
}
.datepicker table tr td.today:hover,
.datepicker table tr td.today:hover:hover,
.datepicker table tr td.today.disabled:hover,
.datepicker table tr td.today.disabled:hover:hover,
.datepicker table tr td.today:active,
.datepicker table tr td.today:hover:active,
.datepicker table tr td.today.disabled:active,
.datepicker table tr td.today.disabled:hover:active,
.datepicker table tr td.today.active,
.datepicker table tr td.today:hover.active,
.datepicker table tr td.today.disabled.active,
.datepicker table tr td.today.disabled:hover.active,
.datepicker table tr td.today.disabled,
.datepicker table tr td.today:hover.disabled,
.datepicker table tr td.today.disabled.disabled,
.datepicker table tr td.today.disabled:hover.disabled,
.datepicker table tr td.today[disabled],
.datepicker table tr td.today:hover[disabled],
.datepicker table tr td.today.disabled[disabled],
.datepicker table tr td.today.disabled:hover[disabled] {
background-color: #fdf59a;
}
.datepicker table tr td.today:active,
.datepicker table tr td.today:hover:active,
.datepicker table tr td.today.disabled:active,
.datepicker table tr td.today.disabled:hover:active,
.datepicker table tr td.today.active,
.datepicker table tr td.today:hover.active,
.datepicker table tr td.today.disabled.active,
.datepicker table tr td.today.disabled:hover.active {
background-color: #fbf069 \9;
}
.datepicker table tr td.today:hover:hover {
color: #000;
}
.datepicker table tr td.today.active:hover {
color: #fff;
}
.datepicker table tr td.range,
.datepicker table tr td.range:hover,
.datepicker table tr td.range.disabled,
.datepicker table tr td.range.disabled:hover {
background: #eeeeee;
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
}
.datepicker table tr td.range.today,
.datepicker table tr td.range.today:hover,
.datepicker table tr td.range.today.disabled,
.datepicker table tr td.range.today.disabled:hover {
background-color: #f3d17a;
background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a);
background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a);
background-image: -o-linear-gradient(top, #f3c17a, #f3e97a);
background-image: linear-gradient(top, #f3c17a, #f3e97a);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);
border-color: #f3e97a #f3e97a #edde34;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
}
.datepicker table tr td.range.today:hover,
.datepicker table tr td.range.today:hover:hover,
.datepicker table tr td.range.today.disabled:hover,
.datepicker table tr td.range.today.disabled:hover:hover,
.datepicker table tr td.range.today:active,
.datepicker table tr td.range.today:hover:active,
.datepicker table tr td.range.today.disabled:active,
.datepicker table tr td.range.today.disabled:hover:active,
.datepicker table tr td.range.today.active,
.datepicker table tr td.range.today:hover.active,
.datepicker table tr td.range.today.disabled.active,
.datepicker table tr td.range.today.disabled:hover.active,
.datepicker table tr td.range.today.disabled,
.datepicker table tr td.range.today:hover.disabled,
.datepicker table tr td.range.today.disabled.disabled,
.datepicker table tr td.range.today.disabled:hover.disabled,
.datepicker table tr td.range.today[disabled],
.datepicker table tr td.range.today:hover[disabled],
.datepicker table tr td.range.today.disabled[disabled],
.datepicker table tr td.range.today.disabled:hover[disabled] {
background-color: #f3e97a;
}
.datepicker table tr td.range.today:active,
.datepicker table tr td.range.today:hover:active,
.datepicker table tr td.range.today.disabled:active,
.datepicker table tr td.range.today.disabled:hover:active,
.datepicker table tr td.range.today.active,
.datepicker table tr td.range.today:hover.active,
.datepicker table tr td.range.today.disabled.active,
.datepicker table tr td.range.today.disabled:hover.active {
background-color: #efe24b \9;
}
.datepicker table tr td.selected,
.datepicker table tr td.selected:hover,
.datepicker table tr td.selected.disabled,
.datepicker table tr td.selected.disabled:hover {
background-color: #9e9e9e;
background-image: -moz-linear-gradient(top, #b3b3b3, #808080);
background-image: -ms-linear-gradient(top, #b3b3b3, #808080);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
background-image: -webkit-linear-gradient(top, #b3b3b3, #808080);
background-image: -o-linear-gradient(top, #b3b3b3, #808080);
background-image: linear-gradient(top, #b3b3b3, #808080);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);
border-color: #808080 #808080 #595959;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.selected:hover,
.datepicker table tr td.selected:hover:hover,
.datepicker table tr td.selected.disabled:hover,
.datepicker table tr td.selected.disabled:hover:hover,
.datepicker table tr td.selected:active,
.datepicker table tr td.selected:hover:active,
.datepicker table tr td.selected.disabled:active,
.datepicker table tr td.selected.disabled:hover:active,
.datepicker table tr td.selected.active,
.datepicker table tr td.selected:hover.active,
.datepicker table tr td.selected.disabled.active,
.datepicker table tr td.selected.disabled:hover.active,
.datepicker table tr td.selected.disabled,
.datepicker table tr td.selected:hover.disabled,
.datepicker table tr td.selected.disabled.disabled,
.datepicker table tr td.selected.disabled:hover.disabled,
.datepicker table tr td.selected[disabled],
.datepicker table tr td.selected:hover[disabled],
.datepicker table tr td.selected.disabled[disabled],
.datepicker table tr td.selected.disabled:hover[disabled] {
background-color: #808080;
}
.datepicker table tr td.selected:active,
.datepicker table tr td.selected:hover:active,
.datepicker table tr td.selected.disabled:active,
.datepicker table tr td.selected.disabled:hover:active,
.datepicker table tr td.selected.active,
.datepicker table tr td.selected:hover.active,
.datepicker table tr td.selected.disabled.active,
.datepicker table tr td.selected.disabled:hover.active {
background-color: #666666 \9;
}
.datepicker table tr td.active,
.datepicker table tr td.active:hover,
.datepicker table tr td.active.disabled,
.datepicker table tr td.active.disabled:hover {
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(top, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.active:hover,
.datepicker table tr td.active:hover:hover,
.datepicker table tr td.active.disabled:hover,
.datepicker table tr td.active.disabled:hover:hover,
.datepicker table tr td.active:active,
.datepicker table tr td.active:hover:active,
.datepicker table tr td.active.disabled:active,
.datepicker table tr td.active.disabled:hover:active,
.datepicker table tr td.active.active,
.datepicker table tr td.active:hover.active,
.datepicker table tr td.active.disabled.active,
.datepicker table tr td.active.disabled:hover.active,
.datepicker table tr td.active.disabled,
.datepicker table tr td.active:hover.disabled,
.datepicker table tr td.active.disabled.disabled,
.datepicker table tr td.active.disabled:hover.disabled,
.datepicker table tr td.active[disabled],
.datepicker table tr td.active:hover[disabled],
.datepicker table tr td.active.disabled[disabled],
.datepicker table tr td.active.disabled:hover[disabled] {
background-color: #0044cc;
}
.datepicker table tr td.active:active,
.datepicker table tr td.active:hover:active,
.datepicker table tr td.active.disabled:active,
.datepicker table tr td.active.disabled:hover:active,
.datepicker table tr td.active.active,
.datepicker table tr td.active:hover.active,
.datepicker table tr td.active.disabled.active,
.datepicker table tr td.active.disabled:hover.active {
background-color: #003399 \9;
}
.datepicker table tr td span {
display: block;
width: 23%;
height: 54px;
line-height: 54px;
float: left;
margin: 1%;
cursor: pointer;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.datepicker table tr td span:hover {
background: #eeeeee;
}
.datepicker table tr td span.disabled,
.datepicker table tr td span.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datepicker table tr td span.active,
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active.disabled,
.datepicker table tr td span.active.disabled:hover {
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(top, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active:hover:hover,
.datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active.disabled:hover:hover,
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.active,
.datepicker table tr td span.active:hover.active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active.disabled:hover.active,
.datepicker table tr td span.active.disabled,
.datepicker table tr td span.active:hover.disabled,
.datepicker table tr td span.active.disabled.disabled,
.datepicker table tr td span.active.disabled:hover.disabled,
.datepicker table tr td span.active[disabled],
.datepicker table tr td span.active:hover[disabled],
.datepicker table tr td span.active.disabled[disabled],
.datepicker table tr td span.active.disabled:hover[disabled] {
background-color: #0044cc;
}
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.active,
.datepicker table tr td span.active:hover.active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active.disabled:hover.active {
background-color: #003399 \9;
}
.datepicker table tr td span.old,
.datepicker table tr td span.new {
color: #999999;
}
.datepicker th.datepicker-switch {
width: 145px;
}
.datepicker thead tr:first-child th,
.datepicker tfoot tr th {
cursor: pointer;
}
.datepicker thead tr:first-child th:hover,
.datepicker tfoot tr th:hover {
background: #eeeeee;
}
.datepicker .cw {
font-size: 10px;
width: 12px;
padding: 0 2px 0 5px;
vertical-align: middle;
}
.datepicker thead tr:first-child th.cw {
cursor: default;
background-color: transparent;
}
.input-append.date .add-on i,
.input-prepend.date .add-on i {
display: block;
cursor: pointer;
width: 16px;
height: 16px;
}
.input-daterange input {
text-align: center;
}
.input-daterange input:first-child {
-webkit-border-radius: 3px 0 0 3px;
-moz-border-radius: 3px 0 0 3px;
border-radius: 3px 0 0 3px;
}
.input-daterange input:last-child {
-webkit-border-radius: 0 3px 3px 0;
-moz-border-radius: 0 3px 3px 0;
border-radius: 0 3px 3px 0;
}
.input-daterange .add-on {
display: inline-block;
width: auto;
min-width: 16px;
height: 18px;
padding: 4px 5px;
font-weight: normal;
line-height: 18px;
text-align: center;
text-shadow: 0 1px 0 #ffffff;
vertical-align: middle;
background-color: #eeeeee;
border: 1px solid #ccc;
margin-left: -5px;
margin-right: -5px;
}

@ -0,0 +1,188 @@
.daterangepicker.dropdown-menu {
max-width: none;
}
.daterangepicker.opensleft .ranges, .daterangepicker.opensleft .calendar {
float: left;
margin: 4px;
}
.daterangepicker.opensright .ranges, .daterangepicker.opensright .calendar {
float: right;
margin: 4px;
}
.daterangepicker .ranges {
width: 160px;
text-align: left;
}
.daterangepicker .ranges .range_inputs>div {
float: left;
}
.daterangepicker .ranges .range_inputs>div:nth-child(2) {
padding-left: 11px;
}
.daterangepicker .calendar {
display: none;
max-width: 230px;
}
.daterangepicker .calendar th, .daterangepicker .calendar td {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
white-space: nowrap;
text-align: center;
}
.daterangepicker .ranges label {
color: #333;
font-size: 11px;
margin-bottom: 2px;
text-transform: uppercase;
text-shadow: 1px 1px 0 #fff;
}
.daterangepicker .ranges input {
font-size: 11px;
}
.daterangepicker .ranges ul {
list-style: none;
margin: 0;
padding: 0;
}
.daterangepicker .ranges li {
font-size: 13px;
background: #f5f5f5;
border: 1px solid #f5f5f5;
color: #08c;
padding: 3px 12px;
margin-bottom: 8px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
cursor: pointer;
}
.daterangepicker .ranges li.active, .daterangepicker .ranges li:hover {
background: #08c;
border: 1px solid #08c;
color: #fff;
}
.daterangepicker .calendar {
border: 1px solid #ddd;
padding: 4px;
border-radius: 4px;
background: #fff;
}
.daterangepicker {
position: absolute;
background: #fff;
top: 100px;
left: 20px;
padding: 4px;
margin-top: 1px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.daterangepicker.opensleft:before {
position: absolute;
top: -7px;
right: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-left: 7px solid transparent;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
.daterangepicker.opensleft:after {
position: absolute;
top: -6px;
right: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-bottom: 6px solid #fff;
border-left: 6px solid transparent;
content: '';
}
.daterangepicker.opensright:before {
position: absolute;
top: -7px;
left: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-left: 7px solid transparent;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
.daterangepicker.opensright:after {
position: absolute;
top: -6px;
left: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-bottom: 6px solid #fff;
border-left: 6px solid transparent;
content: '';
}
.daterangepicker table {
width: 100%;
margin: 0;
}
.daterangepicker td, .daterangepicker th {
text-align: center;
width: 20px;
height: 20px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
cursor: pointer;
white-space: nowrap;
}
.daterangepicker td.off {
color: #999;
}
.daterangepicker td.disabled {
color: #999;
}
.daterangepicker td.available:hover, .daterangepicker th.available:hover {
background: #eee;
}
.daterangepicker td.active, .daterangepicker td.active:hover {
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(top, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.daterangepicker td.week, .daterangepicker th.week {
font-size: 80%;
color: #ccc;
}

@ -0,0 +1,366 @@
/*!
* Datetimepicker for Bootstrap
*
* Copyright 2012 Stefan Petre
* Improvements by Andrew Rowls
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
.datetimepicker {
padding: 4px;
margin-top: 1px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
direction: ltr;
/*.dow {
border-top: 1px solid #ddd !important;
}*/
}
.datetimepicker-inline {
width: 220px;
}
.datetimepicker.datetimepicker-rtl {
direction: rtl;
}
.datetimepicker.datetimepicker-rtl table tr td span {
float: right;
}
.datetimepicker-dropdown, .datetimepicker-dropdown-left {
top: 0;
left: 0;
}
[class*=" datetimepicker-dropdown"]:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-bottom-color: rgba(0, 0, 0, 0.2);
position: absolute;
}
[class*=" datetimepicker-dropdown"]:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
position: absolute;
}
[class*=" datetimepicker-dropdown-top"]:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-top: 7px solid #ccc;
border-top-color: rgba(0, 0, 0, 0.2);
border-bottom: 0;
}
[class*=" datetimepicker-dropdown-top"]:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #ffffff;
border-bottom: 0;
}
.datetimepicker-dropdown-bottom-right:before {
top: -7px;
right: 6px;
}
.datetimepicker-dropdown-bottom-right:after {
top: -6px;
right: 7px;
}
.datetimepicker-dropdown-bottom-left:before {
top: -7px;
left: 6px;
}
.datetimepicker-dropdown-bottom-left:after {
top: -6px;
left: 7px;
}
.datetimepicker-dropdown-top-right:before {
bottom: -7px;
right: 6px;
}
.datetimepicker-dropdown-top-right:after {
bottom: -6px;
right: 7px;
}
.datetimepicker-dropdown-top-left:before {
bottom: -7px;
left: 6px;
}
.datetimepicker-dropdown-top-left:after {
bottom: -6px;
left: 7px;
}
.datetimepicker > div {
display: none;
}
.datetimepicker.minutes div.datetimepicker-minutes {
display: block;
}
.datetimepicker.hours div.datetimepicker-hours {
display: block;
}
.datetimepicker.days div.datetimepicker-days {
display: block;
}
.datetimepicker.months div.datetimepicker-months {
display: block;
}
.datetimepicker.years div.datetimepicker-years {
display: block;
}
.datetimepicker table {
margin: 0;
}
.datetimepicker td,
.datetimepicker th {
text-align: center;
width: 20px;
height: 20px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: none;
}
.table-striped .datetimepicker table tr td,
.table-striped .datetimepicker table tr th {
background-color: transparent;
}
.datetimepicker table tr td.minute:hover {
background: #eeeeee;
cursor: pointer;
}
.datetimepicker table tr td.hour:hover {
background: #eeeeee;
cursor: pointer;
}
.datetimepicker table tr td.day:hover {
background: #eeeeee;
cursor: pointer;
}
.datetimepicker table tr td.old,
.datetimepicker table tr td.new {
color: #999999;
}
.datetimepicker table tr td.disabled,
.datetimepicker table tr td.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datetimepicker table tr td.today,
.datetimepicker table tr td.today:hover,
.datetimepicker table tr td.today.disabled,
.datetimepicker table tr td.today.disabled:hover {
background-color: #fde19a;
background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
background-image: linear-gradient(top, #fdd49a, #fdf59a);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
border-color: #fdf59a #fdf59a #fbed50;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.datetimepicker table tr td.today:hover,
.datetimepicker table tr td.today:hover:hover,
.datetimepicker table tr td.today.disabled:hover,
.datetimepicker table tr td.today.disabled:hover:hover,
.datetimepicker table tr td.today:active,
.datetimepicker table tr td.today:hover:active,
.datetimepicker table tr td.today.disabled:active,
.datetimepicker table tr td.today.disabled:hover:active,
.datetimepicker table tr td.today.active,
.datetimepicker table tr td.today:hover.active,
.datetimepicker table tr td.today.disabled.active,
.datetimepicker table tr td.today.disabled:hover.active,
.datetimepicker table tr td.today.disabled,
.datetimepicker table tr td.today:hover.disabled,
.datetimepicker table tr td.today.disabled.disabled,
.datetimepicker table tr td.today.disabled:hover.disabled,
.datetimepicker table tr td.today[disabled],
.datetimepicker table tr td.today:hover[disabled],
.datetimepicker table tr td.today.disabled[disabled],
.datetimepicker table tr td.today.disabled:hover[disabled] {
background-color: #fdf59a;
}
.datetimepicker table tr td.today:active,
.datetimepicker table tr td.today:hover:active,
.datetimepicker table tr td.today.disabled:active,
.datetimepicker table tr td.today.disabled:hover:active,
.datetimepicker table tr td.today.active,
.datetimepicker table tr td.today:hover.active,
.datetimepicker table tr td.today.disabled.active,
.datetimepicker table tr td.today.disabled:hover.active {
background-color: #fbf069 \9;
}
.datetimepicker table tr td.active,
.datetimepicker table tr td.active:hover,
.datetimepicker table tr td.active.disabled,
.datetimepicker table tr td.active.disabled:hover {
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(top, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datetimepicker table tr td.active:hover,
.datetimepicker table tr td.active:hover:hover,
.datetimepicker table tr td.active.disabled:hover,
.datetimepicker table tr td.active.disabled:hover:hover,
.datetimepicker table tr td.active:active,
.datetimepicker table tr td.active:hover:active,
.datetimepicker table tr td.active.disabled:active,
.datetimepicker table tr td.active.disabled:hover:active,
.datetimepicker table tr td.active.active,
.datetimepicker table tr td.active:hover.active,
.datetimepicker table tr td.active.disabled.active,
.datetimepicker table tr td.active.disabled:hover.active,
.datetimepicker table tr td.active.disabled,
.datetimepicker table tr td.active:hover.disabled,
.datetimepicker table tr td.active.disabled.disabled,
.datetimepicker table tr td.active.disabled:hover.disabled,
.datetimepicker table tr td.active[disabled],
.datetimepicker table tr td.active:hover[disabled],
.datetimepicker table tr td.active.disabled[disabled],
.datetimepicker table tr td.active.disabled:hover[disabled] {
background-color: #0044cc;
}
.datetimepicker table tr td.active:active,
.datetimepicker table tr td.active:hover:active,
.datetimepicker table tr td.active.disabled:active,
.datetimepicker table tr td.active.disabled:hover:active,
.datetimepicker table tr td.active.active,
.datetimepicker table tr td.active:hover.active,
.datetimepicker table tr td.active.disabled.active,
.datetimepicker table tr td.active.disabled:hover.active {
background-color: #003399 \9;
}
.datetimepicker table tr td span {
display: block;
width: 23%;
height: 54px;
line-height: 54px;
float: left;
margin: 1%;
cursor: pointer;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.datetimepicker .datetimepicker-hours span {
height: 26px;
line-height: 26px;
}
.datetimepicker .datetimepicker-hours table tr td span.hour_am,
.datetimepicker .datetimepicker-hours table tr td span.hour_pm {
width: 14.6%;
}
.datetimepicker .datetimepicker-hours fieldset legend,
.datetimepicker .datetimepicker-minutes fieldset legend {
margin-bottom: inherit;
line-height: 30px;
}
.datetimepicker .datetimepicker-minutes span {
height: 26px;
line-height: 26px;
}
.datetimepicker table tr td span:hover {
background: #eeeeee;
}
.datetimepicker table tr td span.disabled,
.datetimepicker table tr td span.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datetimepicker table tr td span.active,
.datetimepicker table tr td span.active:hover,
.datetimepicker table tr td span.active.disabled,
.datetimepicker table tr td span.active.disabled:hover {
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(top, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datetimepicker table tr td span.active:hover,
.datetimepicker table tr td span.active:hover:hover,
.datetimepicker table tr td span.active.disabled:hover,
.datetimepicker table tr td span.active.disabled:hover:hover,
.datetimepicker table tr td span.active:active,
.datetimepicker table tr td span.active:hover:active,
.datetimepicker table tr td span.active.disabled:active,
.datetimepicker table tr td span.active.disabled:hover:active,
.datetimepicker table tr td span.active.active,
.datetimepicker table tr td span.active:hover.active,
.datetimepicker table tr td span.active.disabled.active,
.datetimepicker table tr td span.active.disabled:hover.active,
.datetimepicker table tr td span.active.disabled,
.datetimepicker table tr td span.active:hover.disabled,
.datetimepicker table tr td span.active.disabled.disabled,
.datetimepicker table tr td span.active.disabled:hover.disabled,
.datetimepicker table tr td span.active[disabled],
.datetimepicker table tr td span.active:hover[disabled],
.datetimepicker table tr td span.active.disabled[disabled],
.datetimepicker table tr td span.active.disabled:hover[disabled] {
background-color: #0044cc;
}
.datetimepicker table tr td span.active:active,
.datetimepicker table tr td span.active:hover:active,
.datetimepicker table tr td span.active.disabled:active,
.datetimepicker table tr td span.active.disabled:hover:active,
.datetimepicker table tr td span.active.active,
.datetimepicker table tr td span.active:hover.active,
.datetimepicker table tr td span.active.disabled.active,
.datetimepicker table tr td span.active.disabled:hover.active {
background-color: #003399 \9;
}
.datetimepicker table tr td span.old {
color: #999999;
}
.datetimepicker th.switch {
width: 145px;
}
.datetimepicker thead tr:first-child th,
.datetimepicker tfoot tr:first-child th {
cursor: pointer;
}
.datetimepicker thead tr:first-child th:hover,
.datetimepicker tfoot tr:first-child th:hover {
background: #eeeeee;
}
.input-append.date .add-on i,
.input-prepend.date .add-on i {
cursor: pointer;
width: 14px;
height: 14px;
}

@ -0,0 +1,289 @@
/***
Default theme
***/
/***
Reset and overrides
***/
body {
/*
background-color: #3d3d3d !important;
*/
}
/***
Page header
***/
.header .navbar-inner {
filter: none !important;
background-image: none !important;
background-color: #212121 !important;
}
.header .btn-navbar {
background-color: #212121 !important;
}
.header .nav .dropdown-toggle:hover,
.header .nav .dropdown.open .dropdown-toggle {
background-color: #383838 !important;
}
.header .nav li.dropdown .dropdown-toggle i {
color: #8a8a8a !important;
}
/***
Page sidebar
***/
.page-sidebar {
background-color: #3d3d3d;
}
ul.page-sidebar-menu > li > a {
border-top: 1px solid #5c5c5c !important;
color: #ffffff !important;
}
ul.page-sidebar-menu > li:last-child > a {
border-bottom: 1px solid transparent !important;
}
ul.page-sidebar-menu > li a i {
color: #969696;
}
ul.page-sidebar-menu > li.open > a,
ul.page-sidebar-menu > li > a:hover,
ul.page-sidebar-menu > li:hover > a {
background: #303030;
}
ul.page-sidebar-menu > li.active > a {
background: #e02222 !important;
border-top-color: transparent !important;
color: #ffffff;
}
ul.page-sidebar-menu > li.active > a i {
color: #ffffff;
}
ul.page-sidebar-menu > li > ul.sub-menu > li:first-child > a {
border-top: 0px !important;
}
ul.page-sidebar-menu > li > ul.sub-menu > li.active > a,
ul.page-sidebar-menu > li > ul.sub-menu > li > a:hover {
color: #ffffff !important;
background: #575757 !important;
}
ul.page-sidebar-menu > li > ul.sub-menu > li > a:hover {
background: #575757 !important;
}
/* 3rd level sub menu */
ul.page-sidebar-menu > li > ul.sub-menu li > ul.sub-menu > li.active > a,
ul.page-sidebar-menu > li > ul.sub-menu li > ul.sub-menu > li > a:hover,
ul.page-sidebar-menu > li > ul.sub-menu li.open > a {
color: #ffffff !important;
background: #575757 !important;
}
/* font color for all sub menu links*/
ul.page-sidebar-menu li > ul.sub-menu > li > a {
color: #bdbdbd;
}
/* menu arrows */
ul.page-sidebar-menu > li > a .arrow:before,
ul.page-sidebar-menu > li > a .arrow.open:before {
color: #7d7d7d !important;
}
ul.page-sidebar-menu > li > ul.sub-menu a .arrow:before,
ul.page-sidebar-menu > li > ul.sub-menu a .arrow.open:before {
color: #707070 !important;
}
ul.page-sidebar-menu > li > a > .arrow.open:before {
color: #8a8a8a !important;
}
ul.page-sidebar-menu > li.active > a .arrow:before,
ul.page-sidebar-menu > li.active > a .arrow.open:before {
color: #ffffff !important;
}
/* sidebar search */
.page-sidebar .sidebar-search input {
background-color: #242424 !important;
color: #7d7d7d;
}
.page-sidebar .sidebar-search input::-webkit-input-placeholder {
color: #7d7d7d !important;
}
.page-sidebar .sidebar-search input:-moz-placeholder {
color: #7d7d7d !important;
}
.page-sidebar .sidebar-search input:-ms-input-placeholder {
color: #7d7d7d !important;
}
.page-sidebar .sidebar-search input {
background-color: #3d3d3d !important;
color: #bfbfbf !important;
}
.page-sidebar .sidebar-search .input-box {
border-bottom: 1px solid #7d7d7d !important;
}
.page-sidebar .sidebar-search .submit {
background-image: url(../image/search-icon.png);
}
/***
Sidebar toggler
***/
.sidebar-toggler {
background-image: url(../image/sidebar-toggler.jpg);
background-color: #242424;
}
/* search box bg color on expanded */
.page-sidebar-closed .page-sidebar .sidebar-search.open {
background-color: #3d3d3d !important;
}
.page-sidebar-closed .page-sidebar .sidebar-search.open .remove {
background-image: url("../image/sidebar-search-close.png");
}
/* sub menu bg color on hover menu item */
.page-sidebar-closed ul.page-sidebar-menu > li:hover .sub-menu {
background-color: #3d3d3d;
}
/***
Horizontal Menu(new in v1.2)
***/
/*search*/
.header .hor-menu .hor-menu-search-form-toggler.hide {
background: #000000 url(../image/hor-menu-search-close.png) no-repeat center;
}
.header .hor-menu .search-form {
background: #000000;
}
.header .hor-menu .search-form .btn {
color: #d6d6d6;
background: #000000 url(../image/search-icon.png) no-repeat center;
}
.header .hor-menu .search-form form input {
color: #d6d6d6;
}
.header .hor-menu .search-form form input::-webkit-input-placeholder {
/* WebKit browsers */
color: #d6d6d6;
}
.header .hor-menu .search-form form input:-moz-placeholder {
/* Mozilla Firefox 4 to 18 */
color: #d6d6d6;
}
.header .hor-menu .search-form form input::-moz-placeholder {
/* Mozilla Firefox 19+ */
color: #d6d6d6;
}
.header .hor-menu .search-form form input:-ms-input-placeholder {
/* Internet Explorer 10+ */
color: #d6d6d6;
}
/***
Footer
***/
.footer .footer-inner {
color: #999999;
}
.footer .footer-tools .go-top {
background-color: #4f4f4f;
}
.footer .footer-tools .go-top:hover {
opacity: 0.7;
filter: alpha(opacity=70);
}
.footer .footer-tools .go-top i {
color: #8a8a8a;
}
/***
Footer Layouts (new in v1.3)
***/
/* begin:fixed footer */
.page-footer-fixed .footer {
background-color: #242424;
}
.page-footer-fixed .footer .footer-inner {
color: #999999;
}
.page-footer-fixed .footer .footer-tools .go-top {
background-color: #4f4f4f;
}
.page-footer-fixed .footer .footer-tools .go-top i {
color: #8a8a8a;
}
/* end:fixed footer */
/***
Gritter Notifications
***/
.gritter-top {
background: url(../image/gritter.png) no-repeat left -30px !important;
}
.gritter-bottom {
background: url(../image/gritter.png) no-repeat left bottom !important;
}
.gritter-item {
display: block;
background: url(../image/gritter.png) no-repeat left -40px !important;
}
.gritter-close {
background: url(../image/gritter.png) no-repeat left top !important;
}
.gritter-title {
text-shadow: none !important;
/* Not supported by IE :( */
}
/* for the light (white) version of the gritter notice */
.gritter-light .gritter-item,
.gritter-light .gritter-bottom,
.gritter-light .gritter-top,
.gritter-light .gritter-close {
background-image: url(../image/gritter-light.png) !important;
}
.gritter-item-wrapper a {
color: #18a5ed;
}
.gritter-item-wrapper a:hover {
color: #0b6694;
}
/* begin: boxed page */
@media (min-width: 980px) {
.page-boxed {
background-color: #2e2e2e !important;
}
.page-boxed .page-container {
background-color: #3d3d3d;
border-left: 1px solid #5e5e5e;
border-bottom: 1px solid #5e5e5e;
}
.page-boxed.page-sidebar-fixed .page-container {
border-left: 0;
border-bottom: 0;
}
.page-boxed.page-sidebar-fixed .page-sidebar {
border-left: 1px solid #5e5e5e;
}
.page-boxed.page-sidebar-fixed.page-footer-fixed .footer {
background-color: #2e2e2e !important;
}
}
/* end: boxed page */
/***
Landscape phone to portrait tablet
***/
@media (max-width: 979px) {
/***
page sidebar
***/
.page-sidebar {
background-color: #292929 !important;
}
ul.page-sidebar-menu > li > a {
border-top: 1px solid #4a4a4a !important;
}
ul.page-sidebar-menu > li:last-child > a {
border-bottom: 0 !important;
}
.page-sidebar .sidebar-search input {
background-color: #292929 !important;
}
ul.page-sidebar-menu > li.open > a,
ul.page-sidebar-menu > li > a:hover,
ul.page-sidebar-menu > li:hover > a {
background: #1e1e1e;
}
}

@ -0,0 +1,388 @@
/* The MIT License */
.dropzone,
.dropzone *,
.dropzone-previews,
.dropzone-previews * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.dropzone {
position: relative;
border: 1px solid rgba(0,0,0,0.08);
background: rgba(0,0,0,0.02);
padding: 1em;
}
.dropzone.dz-clickable {
cursor: pointer;
}
.dropzone.dz-clickable .dz-message,
.dropzone.dz-clickable .dz-message span {
cursor: pointer;
}
.dropzone.dz-clickable * {
cursor: default;
}
.dropzone .dz-message {
opacity: 1;
-ms-filter: none;
filter: none;
}
.dropzone.dz-drag-hover {
border-color: rgba(0,0,0,0.15);
background: rgba(0,0,0,0.04);
}
.dropzone.dz-started .dz-message {
display: none;
}
.dropzone .dz-preview,
.dropzone-previews .dz-preview {
background: rgba(255,255,255,0.8);
position: relative;
display: inline-block;
margin: 17px;
vertical-align: top;
border: 1px solid #acacac;
padding: 6px 6px 6px 6px;
}
.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail],
.dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail] {
display: none;
}
.dropzone .dz-preview .dz-details,
.dropzone-previews .dz-preview .dz-details {
width: 100px;
height: 100px;
position: relative;
background: #ebebeb;
padding: 5px;
margin-bottom: 22px;
}
.dropzone .dz-preview .dz-details .dz-filename,
.dropzone-previews .dz-preview .dz-details .dz-filename {
overflow: hidden;
height: 100%;
}
.dropzone .dz-preview .dz-details img,
.dropzone-previews .dz-preview .dz-details img {
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 100px;
}
.dropzone .dz-preview .dz-details .dz-size,
.dropzone-previews .dz-preview .dz-details .dz-size {
position: absolute;
bottom: -28px;
left: 3px;
height: 28px;
line-height: 28px;
}
.dropzone .dz-preview.dz-error .dz-error-mark,
.dropzone-previews .dz-preview.dz-error .dz-error-mark {
display: block;
}
.dropzone .dz-preview.dz-success .dz-success-mark,
.dropzone-previews .dz-preview.dz-success .dz-success-mark {
display: block;
}
.dropzone .dz-preview:hover .dz-details img,
.dropzone-previews .dz-preview:hover .dz-details img {
display: none;
}
.dropzone .dz-preview .dz-success-mark,
.dropzone-previews .dz-preview .dz-success-mark,
.dropzone .dz-preview .dz-error-mark,
.dropzone-previews .dz-preview .dz-error-mark {
display: none;
position: absolute;
width: 40px;
height: 40px;
font-size: 30px;
text-align: center;
right: -10px;
top: -10px;
}
.dropzone .dz-preview .dz-success-mark,
.dropzone-previews .dz-preview .dz-success-mark {
color: #8cc657;
}
.dropzone .dz-preview .dz-error-mark,
.dropzone-previews .dz-preview .dz-error-mark {
color: #ee162d;
}
.dropzone .dz-preview .dz-progress,
.dropzone-previews .dz-preview .dz-progress {
position: absolute;
top: 100px;
left: 6px;
right: 6px;
height: 6px;
background: #d7d7d7;
display: none;
}
.dropzone .dz-preview .dz-progress .dz-upload,
.dropzone-previews .dz-preview .dz-progress .dz-upload {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 0%;
background-color: #8cc657;
}
.dropzone .dz-preview.dz-processing .dz-progress,
.dropzone-previews .dz-preview.dz-processing .dz-progress {
display: block;
}
.dropzone .dz-preview .dz-error-message,
.dropzone-previews .dz-preview .dz-error-message {
display: none;
position: absolute;
top: -5px;
left: -20px;
background: rgba(245,245,245,0.8);
padding: 8px 10px;
color: #800;
min-width: 140px;
max-width: 500px;
z-index: 500;
}
.dropzone .dz-preview:hover.dz-error .dz-error-message,
.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {
display: block;
}
.dropzone {
border: 1px solid rgba(0,0,0,0.03);
min-height: 360px;
-webkit-border-radius: 3px;
border-radius: 3px;
background: rgba(0,0,0,0.03);
padding: 23px;
}
.dropzone .dz-default.dz-message {
opacity: 1;
-ms-filter: none;
filter: none;
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
-ms-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
background-image: url("../image/spritemap.png");
background-repeat: no-repeat;
background-position: 0 0;
position: absolute;
width: 428px;
height: 123px;
margin-left: -214px;
margin-top: -61.5px;
top: 50%;
left: 50%;
}
@media all and (-webkit-min-device-pixel-ratio: 1.5) {
.dropzone .dz-default.dz-message {
background-image: url("../image/spritemap@2x.png");
-webkit-background-size: 428px 406px;
-moz-background-size: 428px 406px;
background-size: 428px 406px;
}
}
.dropzone .dz-default.dz-message span {
display: none;
}
.dropzone.dz-square .dz-default.dz-message {
background-position: 0 -123px;
width: 268px;
margin-left: -134px;
height: 174px;
margin-top: -87px;
}
.dropzone.dz-drag-hover .dz-message {
opacity: 0.15;
filter: alpha(opacity=15);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=15)";
}
.dropzone.dz-started .dz-message {
display: block;
opacity: 0;
filter: alpha(opacity=0);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
}
.dropzone .dz-preview,
.dropzone-previews .dz-preview {
-webkit-box-shadow: 1px 1px 4px rgba(0,0,0,0.16);
box-shadow: 1px 1px 4px rgba(0,0,0,0.16);
font-size: 14px;
}
.dropzone .dz-preview.dz-image-preview:hover .dz-details img,
.dropzone-previews .dz-preview.dz-image-preview:hover .dz-details img {
display: block;
opacity: 0.1;
filter: alpha(opacity=10);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
}
.dropzone .dz-preview.dz-success .dz-success-mark,
.dropzone-previews .dz-preview.dz-success .dz-success-mark {
opacity: 1;
-ms-filter: none;
filter: none;
}
.dropzone .dz-preview.dz-error .dz-error-mark,
.dropzone-previews .dz-preview.dz-error .dz-error-mark {
opacity: 1;
-ms-filter: none;
filter: none;
}
.dropzone .dz-preview.dz-error .dz-progress .dz-upload,
.dropzone-previews .dz-preview.dz-error .dz-progress .dz-upload {
background: #ee1e2d;
}
.dropzone .dz-preview .dz-error-mark,
.dropzone-previews .dz-preview .dz-error-mark,
.dropzone .dz-preview .dz-success-mark,
.dropzone-previews .dz-preview .dz-success-mark {
display: block;
opacity: 0;
filter: alpha(opacity=0);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
-webkit-transition: opacity 0.4s ease-in-out;
-moz-transition: opacity 0.4s ease-in-out;
-o-transition: opacity 0.4s ease-in-out;
-ms-transition: opacity 0.4s ease-in-out;
transition: opacity 0.4s ease-in-out;
background-image: url("../image/spritemap.png");
background-repeat: no-repeat;
}
@media all and (-webkit-min-device-pixel-ratio: 1.5) {
.dropzone .dz-preview .dz-error-mark,
.dropzone-previews .dz-preview .dz-error-mark,
.dropzone .dz-preview .dz-success-mark,
.dropzone-previews .dz-preview .dz-success-mark {
background-image: url("../image/spritemap@2x.png");
-webkit-background-size: 428px 406px;
-moz-background-size: 428px 406px;
background-size: 428px 406px;
}
}
.dropzone .dz-preview .dz-error-mark span,
.dropzone-previews .dz-preview .dz-error-mark span,
.dropzone .dz-preview .dz-success-mark span,
.dropzone-previews .dz-preview .dz-success-mark span {
display: none;
}
.dropzone .dz-preview .dz-error-mark,
.dropzone-previews .dz-preview .dz-error-mark {
background-position: -268px -123px;
}
.dropzone .dz-preview .dz-success-mark,
.dropzone-previews .dz-preview .dz-success-mark {
background-position: -268px -163px;
}
.dropzone .dz-preview .dz-progress .dz-upload,
.dropzone-previews .dz-preview .dz-progress .dz-upload {
-webkit-animation: loading 0.4s linear infinite;
-moz-animation: loading 0.4s linear infinite;
-o-animation: loading 0.4s linear infinite;
-ms-animation: loading 0.4s linear infinite;
animation: loading 0.4s linear infinite;
-webkit-transition: width 0.3s ease-in-out;
-moz-transition: width 0.3s ease-in-out;
-o-transition: width 0.3s ease-in-out;
-ms-transition: width 0.3s ease-in-out;
transition: width 0.3s ease-in-out;
-webkit-border-radius: 2px;
border-radius: 2px;
position: absolute;
top: 0;
left: 0;
width: 0%;
height: 100%;
background-image: url("../image/spritemap.png");
background-repeat: repeat-x;
background-position: 0px -400px;
}
@media all and (-webkit-min-device-pixel-ratio: 1.5) {
.dropzone .dz-preview .dz-progress .dz-upload,
.dropzone-previews .dz-preview .dz-progress .dz-upload {
background-image: url("../image/spritemap@2x.png");
-webkit-background-size: 428px 406px;
-moz-background-size: 428px 406px;
background-size: 428px 406px;
}
}
.dropzone .dz-preview.dz-success .dz-progress,
.dropzone-previews .dz-preview.dz-success .dz-progress {
display: block;
opacity: 0;
filter: alpha(opacity=0);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
-webkit-transition: opacity 0.4s ease-in-out;
-moz-transition: opacity 0.4s ease-in-out;
-o-transition: opacity 0.4s ease-in-out;
-ms-transition: opacity 0.4s ease-in-out;
transition: opacity 0.4s ease-in-out;
}
.dropzone .dz-preview .dz-error-message,
.dropzone-previews .dz-preview .dz-error-message {
display: block;
opacity: 0;
filter: alpha(opacity=0);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
-ms-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.dropzone .dz-preview:hover.dz-error .dz-error-message,
.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {
opacity: 1;
-ms-filter: none;
filter: none;
}
@-moz-keyframes loading {
0% {
background-position: 0 -400px;
}
100% {
background-position: -7px -400px;
}
}
@-webkit-keyframes loading {
0% {
background-position: 0 -400px;
}
100% {
background-position: -7px -400px;
}
}
@-o-keyframes loading {
0% {
background-position: 0 -400px;
}
100% {
background-position: -7px -400px;
}
}
@-ms-keyframes loading {
0% {
background-position: 0 -400px;
}
100% {
background-position: -7px -400px;
}
}
@keyframes loading {
0% {
background-position: 0 -400px;
}
100% {
background-position: -7px -400px;
}
}

@ -0,0 +1,48 @@
/***
Email Template Page
***/
.mail-template ul {
padding:0px;
margin: 0px;
list-style:none;
}
.mail-template li {
margin:0 5px;
cursor:pointer;
list-style:none;
border:solid 2px #fff;
}
.mail-template li:hover {
border:solid 2px #aaa;
}
.mail-template li a{
display:block;
padding:25px;
}
.mail-template li a:hover {
text-decoration: none;
}
.mail-template li.color-black {
background:#1f1f1f;
}
.mail-template li.color-darkblue {
background:#1570a6;
}
.mail-template li.color-lightblue {
background:#4aabf9;
}
.mail-template li.color-red {
background:#eb4d41;
}
.mail-template li.color-green {
background:#28b779;
}

@ -0,0 +1,141 @@
/***
Error Pages
***/
/* 404 page option #1 */
.page-404 {
text-align: center;
}
.page-404 .number {
display: inline-block;
letter-spacing: -10px;
margin-top: 0px;
line-height: 128px;
font-size: 158px;
font-weight: 300;
color: #7bbbd6;
text-align: right;
}
.page-404 .details {
margin-left: 40px;
display: inline-block;
padding-top: 0px;
text-align: left;
}
/* 500 page option #1 */
.page-500 {
text-align: center;
}
.page-500 .number {
display: inline-block;
letter-spacing: -10px;
line-height: 128px;
font-size: 158px;
font-weight: 300;
color: #ec8c8c;
text-align: right;
}
.page-500 .details {
margin-left: 40px;
display: inline-block;
text-align: left;
}
/* 404 page option #2*/
.page-404-full-page {
padding: 20px;
background-color: #fafafa !important;
}
.page-404-full-page .details input {
background-color: #ffffff;
}
.page-404-full-page .page-404 {
margin-top: 100px;
}
/* 500 page option #2*/
.page-500-full-page {
padding: 20px;
background-color: #fafafa !important;
}
.page-500-full-page .details input {
background-color: #ffffff;
}
.page-500-full-page .page-500 {
margin-top: 100px;
}
/* 404 page option #3*/
.page-404-3 {
background: #000 !important ;
}
.page-404-3 .page-inner img {
right: 0;
bottom: 0;
z-index: -1;
position: absolute;
}
.page-404-3 .error-404 {
color: #fff;
text-align: left;
padding: 70px 20px 0;
}
.page-404-3 h1 {
color: #fff;
font-size: 130px;
line-height: 160px;
}
.page-404-3 h2 {
color: #fff;
font-size: 30px;
margin-bottom: 30px;
}
.page-404-3 p {
color: #fff;
font-size: 16px;
}
@media (max-width: 480px) {
.page-404 .number,
.page-500 .number,
.page-404 .details,
.page-500 .details {
text-align: center;
margin-left: 0px;
}
.page-404-full-page .page-404 {
margin-top: 30px;
}
.page-404-3 .error-404 {
text-align: left;
padding-top: 10px;
}
.page-404-3 .page-inner img {
right: 0;
bottom: 0;
z-index: -1;
position: fixed;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -0,0 +1,579 @@
/*!
* FullCalendar v1.6.1 Stylesheet
* Docs & License: http://arshaw.com/fullcalendar/
* (c) 2013 Adam Shaw
*/
.fc {
direction: ltr;
text-align: left;
}
.fc table {
border-collapse: collapse;
border-spacing: 0;
}
html .fc,
.fc table {
font-size: 1em;
}
.fc td,
.fc th {
padding: 0;
vertical-align: top;
}
/* Header
------------------------------------------------------------------------*/
.fc-header td {
white-space: nowrap;
}
.fc-header-left {
width: 25%;
text-align: left;
}
.fc-header-center {
text-align: center;
}
.fc-header-right {
width: 25%;
text-align: right;
}
.fc-header-title {
display: inline-block;
vertical-align: top;
}
.fc-header-title h2 {
margin-top: 0;
white-space: nowrap;
}
.fc .fc-header-space {
padding-left: 10px;
}
.fc-header .fc-button {
margin-bottom: 1em;
vertical-align: top;
}
/* buttons edges butting together */
.fc-header .fc-button {
margin-right: -1px;
}
.fc-header .fc-corner-right, /* non-theme */
.fc-header .ui-corner-right { /* theme */
margin-right: 0; /* back to normal */
}
/* button layering (for border precedence) */
.fc-header .fc-state-hover,
.fc-header .ui-state-hover {
z-index: 2;
}
.fc-header .fc-state-down {
z-index: 3;
}
.fc-header .fc-state-active,
.fc-header .ui-state-active {
z-index: 4;
}
/* Content
------------------------------------------------------------------------*/
.fc-content {
clear: both;
}
.fc-view {
width: 100%; /* needed for view switching (when view is absolute) */
overflow: hidden;
}
/* Cell Styles
------------------------------------------------------------------------*/
.fc-widget-header, /* <th>, usually */
.fc-widget-content { /* <td>, usually */
border: 1px solid #ddd;
}
.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */
background: #fcf8e3;
}
.fc-cell-overlay { /* semi-transparent rectangle while dragging */
background: #bce8f1;
opacity: .3;
filter: alpha(opacity=30); /* for IE */
}
/* Buttons
------------------------------------------------------------------------*/
.fc-button {
position: relative;
display: inline-block;
padding: 0 .6em;
overflow: hidden;
height: 1.9em;
line-height: 1.9em;
white-space: nowrap;
cursor: pointer;
}
.fc-state-default { /* non-theme */
border: 1px solid;
}
.fc-state-default.fc-corner-left { /* non-theme */
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.fc-state-default.fc-corner-right { /* non-theme */
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
/*
Our default prev/next buttons use HTML entities like &lsaquo; &rsaquo; &laquo; &raquo;
and we'll try to make them look good cross-browser.
*/
.fc-text-arrow {
margin: 0 .1em;
font-size: 2em;
font-family: "Courier New", Courier, monospace;
vertical-align: baseline; /* for IE7 */
}
.fc-button-prev .fc-text-arrow,
.fc-button-next .fc-text-arrow { /* for &lsaquo; &rsaquo; */
font-weight: bold;
}
/* icon (for jquery ui) */
.fc-button .fc-icon-wrap {
position: relative;
float: left;
top: 50%;
}
.fc-button .ui-icon {
position: relative;
float: left;
margin-top: -50%;
*margin-top: 0;
*top: -50%;
}
/*
button states
borrowed from twitter bootstrap (http://twitter.github.com/bootstrap/)
*/
.fc-state-default {
background-color: #f5f5f5;
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
background-repeat: repeat-x;
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
color: #333;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
}
.fc-state-hover,
.fc-state-down,
.fc-state-active,
.fc-state-disabled {
color: #333333;
background-color: #e6e6e6;
}
.fc-state-hover {
color: #333333;
text-decoration: none;
background-position: 0 -15px;
-webkit-transition: background-position 0.1s linear;
-moz-transition: background-position 0.1s linear;
-o-transition: background-position 0.1s linear;
transition: background-position 0.1s linear;
}
.fc-state-down,
.fc-state-active {
background-color: #cccccc;
background-image: none;
outline: 0;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
}
.fc-state-disabled {
cursor: default;
background-image: none;
opacity: 0.65;
filter: alpha(opacity=65);
box-shadow: none;
}
/* Global Event Styles
------------------------------------------------------------------------*/
.fc-event {
border: 1px solid #3a87ad; /* default BORDER color */
background-color: #3a87ad; /* default BACKGROUND color */
color: #fff; /* default TEXT color */
font-size: .85em;
cursor: default;
}
a.fc-event {
text-decoration: none;
}
a.fc-event,
.fc-event-draggable {
cursor: pointer;
}
.fc-rtl .fc-event {
text-align: right;
}
.fc-event-inner {
width: 100%;
height: 100%;
overflow: hidden;
}
.fc-event-time,
.fc-event-title {
padding: 0 1px;
}
.fc .ui-resizable-handle {
display: block;
position: absolute;
z-index: 99999;
overflow: hidden; /* hacky spaces (IE6/7) */
font-size: 300%; /* */
line-height: 50%; /* */
}
/* Horizontal Events
------------------------------------------------------------------------*/
.fc-event-hori {
border-width: 1px 0;
margin-bottom: 1px;
}
.fc-ltr .fc-event-hori.fc-event-start,
.fc-rtl .fc-event-hori.fc-event-end {
border-left-width: 1px;
border-top-left-radius: 3px;
border-bottom-left-radius: 3px;
}
.fc-ltr .fc-event-hori.fc-event-end,
.fc-rtl .fc-event-hori.fc-event-start {
border-right-width: 1px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
/* resizable */
.fc-event-hori .ui-resizable-e {
top: 0 !important; /* importants override pre jquery ui 1.7 styles */
right: -3px !important;
width: 7px !important;
height: 100% !important;
cursor: e-resize;
}
.fc-event-hori .ui-resizable-w {
top: 0 !important;
left: -3px !important;
width: 7px !important;
height: 100% !important;
cursor: w-resize;
}
.fc-event-hori .ui-resizable-handle {
_padding-bottom: 14px; /* IE6 had 0 height */
}
/* Reusable Separate-border Table
------------------------------------------------------------*/
table.fc-border-separate {
border-collapse: separate;
}
.fc-border-separate th,
.fc-border-separate td {
border-width: 1px 0 0 1px;
}
.fc-border-separate th.fc-last,
.fc-border-separate td.fc-last {
border-right-width: 1px;
}
.fc-border-separate tr.fc-last th,
.fc-border-separate tr.fc-last td {
border-bottom-width: 1px;
}
.fc-border-separate tbody tr.fc-first td,
.fc-border-separate tbody tr.fc-first th {
border-top-width: 0;
}
/* Month View, Basic Week View, Basic Day View
------------------------------------------------------------------------*/
.fc-grid th {
text-align: center;
}
.fc .fc-week-number {
width: 22px;
text-align: center;
}
.fc .fc-week-number div {
padding: 0 2px;
}
.fc-grid .fc-day-number {
float: right;
padding: 0 2px;
}
.fc-grid .fc-other-month .fc-day-number {
opacity: 0.3;
filter: alpha(opacity=30); /* for IE */
/* opacity with small font can sometimes look too faded
might want to set the 'color' property instead
making day-numbers bold also fixes the problem */
}
.fc-grid .fc-day-content {
clear: both;
padding: 2px 2px 1px; /* distance between events and day edges */
}
/* event styles */
.fc-grid .fc-event-time {
font-weight: bold;
}
/* right-to-left */
.fc-rtl .fc-grid .fc-day-number {
float: left;
}
.fc-rtl .fc-grid .fc-event-time {
float: right;
}
/* Agenda Week View, Agenda Day View
------------------------------------------------------------------------*/
.fc-agenda table {
border-collapse: separate;
}
.fc-agenda-days th {
text-align: center;
}
.fc-agenda .fc-agenda-axis {
width: 50px;
padding: 0 4px;
vertical-align: middle;
text-align: right;
white-space: nowrap;
font-weight: normal;
}
.fc-agenda .fc-week-number {
font-weight: bold;
}
.fc-agenda .fc-day-content {
padding: 2px 2px 1px;
}
/* make axis border take precedence */
.fc-agenda-days .fc-agenda-axis {
border-right-width: 1px;
}
.fc-agenda-days .fc-col0 {
border-left-width: 0;
}
/* all-day area */
.fc-agenda-allday th {
border-width: 0 1px;
}
.fc-agenda-allday .fc-day-content {
min-height: 34px; /* TODO: doesnt work well in quirksmode */
_height: 34px;
}
/* divider (between all-day and slots) */
.fc-agenda-divider-inner {
height: 2px;
overflow: hidden;
}
.fc-widget-header .fc-agenda-divider-inner {
background: #eee;
}
/* slot rows */
.fc-agenda-slots th {
border-width: 1px 1px 0;
}
.fc-agenda-slots td {
border-width: 1px 0 0;
background: none;
}
.fc-agenda-slots td div {
height: 20px;
}
.fc-agenda-slots tr.fc-slot0 th,
.fc-agenda-slots tr.fc-slot0 td {
border-top-width: 0;
}
.fc-agenda-slots tr.fc-minor th,
.fc-agenda-slots tr.fc-minor td {
border-top-style: dotted;
}
.fc-agenda-slots tr.fc-minor th.ui-widget-header {
*border-top-style: solid; /* doesn't work with background in IE6/7 */
}
/* Vertical Events
------------------------------------------------------------------------*/
.fc-event-vert {
border-width: 0 1px;
}
.fc-event-vert.fc-event-start {
border-top-width: 1px;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
}
.fc-event-vert.fc-event-end {
border-bottom-width: 1px;
border-bottom-left-radius: 3px;
border-bottom-right-radius: 3px;
}
.fc-event-vert .fc-event-time {
white-space: nowrap;
font-size: 10px;
}
.fc-event-vert .fc-event-inner {
position: relative;
z-index: 2;
}
.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #fff;
opacity: .25;
filter: alpha(opacity=25);
}
.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */
.fc-select-helper .fc-event-bg {
display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */
}
/* resizable */
.fc-event-vert .ui-resizable-s {
bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */
width: 100% !important;
height: 8px !important;
overflow: hidden !important;
line-height: 8px !important;
font-size: 11px !important;
font-family: monospace;
text-align: center;
cursor: s-resize;
}
.fc-agenda .ui-resizable-resizing { /* TODO: better selector */
_overflow: hidden;
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,287 @@
/***
Grey theme
***/
/***
Reset and overrides
***/
body {
background-color: #666666 !important;
}
/***
Page header
***/
.header .navbar-inner {
filter: none !important;
background-image: none !important;
background-color: #4a4a4a !important;
}
.header .btn-navbar {
background-color: #4a4a4a !important;
}
.header .nav .dropdown-toggle:hover,
.header .nav .dropdown.open .dropdown-toggle {
background-color: #616161 !important;
}
.header .nav li.dropdown .dropdown-toggle i {
color: #b3b3b3 !important;
}
/***
Page sidebar
***/
.page-sidebar {
background-color: #666666;
}
ul.page-sidebar-menu > li > a {
border-top: 1px solid #858585 !important;
color: #ffffff !important;
}
ul.page-sidebar-menu > li:last-child > a {
border-bottom: 1px solid transparent !important;
}
ul.page-sidebar-menu > li a i {
color: #bfbfbf;
}
ul.page-sidebar-menu > li.open > a,
ul.page-sidebar-menu > li > a:hover,
ul.page-sidebar-menu > li:hover > a {
background: #595959;
}
ul.page-sidebar-menu > li.active > a {
background: #e02222 !important;
border-top-color: transparent !important;
color: #ffffff;
}
ul.page-sidebar-menu > li.active > a i {
color: #ffffff;
}
ul.page-sidebar-menu > li > ul.sub-menu > li:first-child > a {
border-top: 0px !important;
}
ul.page-sidebar-menu > li > ul.sub-menu > li.active > a,
ul.page-sidebar-menu > li > ul.sub-menu > li > a:hover {
color: #ffffff !important;
background: #808080 !important;
}
ul.page-sidebar-menu > li > ul.sub-menu > li > a:hover {
background: #808080 !important;
}
/* 3rd level sub menu */
ul.page-sidebar-menu > li > ul.sub-menu li > ul.sub-menu > li.active > a,
ul.page-sidebar-menu > li > ul.sub-menu li > ul.sub-menu > li > a:hover,
ul.page-sidebar-menu > li > ul.sub-menu li.open > a {
color: #ffffff !important;
background: #808080 !important;
}
/* font color for all sub menu links*/
ul.page-sidebar-menu li > ul.sub-menu > li > a {
color: #e6e6e6;
}
/* menu arrows */
ul.page-sidebar-menu > li > a .arrow:before,
ul.page-sidebar-menu > li > a .arrow.open:before {
color: #a6a6a6 !important;
}
ul.page-sidebar-menu > li > ul.sub-menu a .arrow:before,
ul.page-sidebar-menu > li > ul.sub-menu a .arrow.open:before {
color: #999999 !important;
}
ul.page-sidebar-menu > li > a > .arrow.open:before {
color: #b3b3b3 !important;
}
ul.page-sidebar-menu > li.active > a .arrow:before,
ul.page-sidebar-menu > li.active > a .arrow.open:before {
color: #ffffff !important;
}
/* sidebar search */
.page-sidebar .sidebar-search input {
background-color: #4d4d4d !important;
color: #a6a6a6;
}
.page-sidebar .sidebar-search input::-webkit-input-placeholder {
color: #a6a6a6 !important;
}
.page-sidebar .sidebar-search input:-moz-placeholder {
color: #a6a6a6 !important;
}
.page-sidebar .sidebar-search input:-ms-input-placeholder {
color: #a6a6a6 !important;
}
.page-sidebar .sidebar-search input {
background-color: #666666 !important;
color: #bfbfbf !important;
}
.page-sidebar .sidebar-search .input-box {
border-bottom: 1px solid #a6a6a6 !important;
}
.page-sidebar .sidebar-search .submit {
background-image: url(../../img/search-icon.png);
}
/***
Sidebar toggler
***/
.sidebar-toggler {
background-image: url(../../img/sidebar-toggler.jpg);
background-color: #4d4d4d;
}
/* search box bg color on expanded */
.page-sidebar-closed .page-sidebar .sidebar-search.open {
background-color: #666666 !important;
}
.page-sidebar-closed .page-sidebar .sidebar-search.open .remove {
background-image: url("../../img/sidebar-search-close.png");
}
/* sub menu bg color on hover menu item */
.page-sidebar-closed ul.page-sidebar-menu > li:hover .sub-menu {
background-color: #666666;
}
/***
Horizontal Menu(new in v1.2)
***/
/*search*/
.header .hor-menu .hor-menu-search-form-toggler.hide {
background: #000000 url(../../img/hor-menu-search-close.png) no-repeat center;
}
.header .hor-menu .search-form {
background: #000000;
}
.header .hor-menu .search-form .btn {
color: #ffffff;
background: #1a1a1a url(../../img/search-icon.png) no-repeat center;
}
.header .hor-menu .search-form form input {
color: #ffffff;
}
.header .hor-menu .search-form form input::-webkit-input-placeholder {
/* WebKit browsers */
color: #ffffff;
}
.header .hor-menu .search-form form input:-moz-placeholder {
/* Mozilla Firefox 4 to 18 */
color: #ffffff;
}
.header .hor-menu .search-form form input::-moz-placeholder {
/* Mozilla Firefox 19+ */
color: #ffffff;
}
.header .hor-menu .search-form form input:-ms-input-placeholder {
/* Internet Explorer 10+ */
color: #ffffff;
}
/***
Footer
***/
.footer .footer-inner {
color: #b3b3b3;
}
.footer .footer-tools .go-top {
background-color: #787878;
}
.footer .footer-tools .go-top:hover {
opacity: 0.7;
filter: alpha(opacity=70);
}
.footer .footer-tools .go-top i {
color: #b3b3b3;
}
/***
Footer Layouts (new in v1.3)
***/
/* begin:fixed footer */
.page-footer-fixed .footer {
background-color: #4d4d4d;
}
.page-footer-fixed .footer .footer-inner {
color: #b3b3b3;
}
.page-footer-fixed .footer .footer-tools .go-top {
background-color: #787878;
}
.page-footer-fixed .footer .footer-tools .go-top i {
color: #b3b3b3;
}
/* end:fixed footer */
/***
Gritter Notifications
***/
.gritter-top {
background: url(../../plugins/gritter/images/gritter.png) no-repeat left -30px !important;
}
.gritter-bottom {
background: url(../../plugins/gritter/images/gritter.png) no-repeat left bottom !important;
}
.gritter-item {
display: block;
background: url(../../plugins/gritter/images/gritter.png) no-repeat left -40px !important;
}
.gritter-close {
background: url(../../plugins/gritter/images/gritter.png) no-repeat left top !important;
}
.gritter-title {
text-shadow: none !important;
/* Not supported by IE :( */
}
/* for the light (white) version of the gritter notice */
.gritter-light .gritter-item,
.gritter-light .gritter-bottom,
.gritter-light .gritter-top,
.gritter-light .gritter-close {
background-image: url(../../plugins/gritter/images/gritter-light.png) !important;
}
.gritter-item-wrapper a {
color: #18a5ed;
}
.gritter-item-wrapper a:hover {
color: #0b6694;
}
/* begin: boxed page */
@media (min-width: 980px) {
.page-boxed {
background-color: #575757 !important;
}
.page-boxed .page-container {
background-color: #666666;
border-left: 1px solid #878787;
border-bottom: 1px solid #878787;
}
.page-boxed.page-sidebar-fixed .page-container {
border-left: 0;
border-bottom: 0;
}
.page-boxed.page-sidebar-fixed .page-sidebar {
border-left: 1px solid #878787;
}
.page-boxed.page-sidebar-fixed.page-footer-fixed .footer {
background-color: #575757 !important;
}
}
/* end: boxed page */
/***
Landscape phone to portrait tablet
***/
@media (max-width: 979px) {
/***
page sidebar
***/
.page-sidebar {
background-color: #525252 !important;
}
ul.page-sidebar-menu > li > a {
border-top: 1px solid #737373 !important;
}
ul.page-sidebar-menu > li:last-child > a {
border-bottom: 0 !important;
}
.page-sidebar .sidebar-search input {
background-color: #525252 !important;
}
ul.page-sidebar-menu > li.open > a,
ul.page-sidebar-menu > li > a:hover,
ul.page-sidebar-menu > li:hover > a {
background: #474747;
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,521 @@
/***
Inbox Page
***/
.inbox {
margin-bottom: 20px;
}
.inbox .inbox {
margin-bottom: 0px;
}
.inbox .tab-content {
overflow: inherit;
}
.inbox .inbox-loading {
display: none;
font-size: 22px;
font-weight: 300;
}
/*Imbox Menu*/
.inbox .inbox-nav {
list-style: none;
margin-left: 0 !important;
}
.inbox .inbox-nav li {
position: relative;
}
.inbox .inbox-nav li a {
color: #4d82a3;
display: block;
font-size: 15px;
border-left: none;
text-align: left !important;
padding: 8px 14px;
margin-bottom: 1px;
background: #f4f9fd;
}
.inbox .inbox-nav li.active a,
.inbox .inbox-nav li.active:hover a {
color: #fff;
border-left: none;
background: #169ef4 !important;
text-decoration: none;
}
.inbox .inbox-nav li.active b {
top: 0;
right: -4px;
width: 8px;
height: 35px;
position: absolute;
display: inline-block;
background: url(../image/inbox-nav-arrow-blue.png) no-repeat;
}
.inbox .inbox-nav li:hover a {
color: #4d82a3;
background: #eef4f7 !important;
text-decoration: none;
}
.inbox .inbox-nav li.compose-btn a {
color: #fff;
text-shadow: none;
text-align: center;
margin-bottom: 18px;
background: #35aa47;
}
.inbox .inbox-nav li.compose-btn i,
.inbox .inbox-nav li.compose-btn:hover i {
top: 1px;
color: #fff;
font-size: 15px;
position: relative;
background: none !important;
}
.inbox .inbox-nav li.compose-btn a:hover {
background-color: #1d943b !important;
}
/*Inbox Content*/
.inbox .inbox-header {
overflow: hidden;
}
.inbox .inbox-header h1 {
margin: 0;
color: #666;
margin-bottom: 10px;
}
.inbox tr {
color: #777;
font-size: 13px;
}
.inbox tr label {
display: inline-block;
margin-bottom: 0;
}
.inbox tr.unread td{
font-weight: 600;
}
.inbox td i.icon-paper-clip {
top: 2px;
color: #d8e0e5;
font-size: 17px;
position: relative;
}
.inbox tr i.icon-star,
.inbox tr i.icon-trash {
cursor: pointer;
}
.inbox tr i.icon-star {
color: #eceef0;
}
.inbox tr i.icon-star:hover {
color: #fd7b12;
}
.inbox tr i.inbox-started {
color: #fd7b12;
}
.inbox .table th,
.inbox .table td {
border: none;
}
.inbox .table th {
background: #eef4f7;
border-bottom: solid 5px #fff;
}
.inbox th.text-right {
text-align: right;
}
.inbox th label.inbox-select-all {
color: #828f97;
font-size: 13px;
padding: 1px 4px 0;
}
.inbox ul.inbox-nav {
margin-bottom: 0;
}
.inbox ul.inbox-nav li {
padding: 0;
}
.inbox ul.inbox-nav li span {
color: #828f97;
font-size: 12px;
margin-right: 10px;
}
.inbox ul.inbox-nav i {
color: #fff;
padding: 1px 0;
font-size: 15px;
cursor: pointer;
background: #d0dde4 !important;
}
.inbox ul.inbox-nav i:hover {
background: #169ef4 !important;
}
.inbox td.text-right {
width: 100px;
text-align: right;
}
.inbox td.inbox-small-cells {
width: 10px;
}
.inbox .table-hover tbody tr:hover>td,
.inbox .table-hover tbody tr:hover>th,
.inbox .table-striped tbody>tr:nth-child(odd)>td,
.inbox .table-striped tbody>tr:nth-child(odd)>th {
background: #f8fbfd;
cursor: pointer;
}
.inbox .table-hover tbody tr:hover>td,
.inbox .table-hover tbody tr:hover>th {
background: #eef4f7;
}
/*Inbox Drafts*/
.inbox .inbox-drafts {
padding: 8px 0;
text-align: center;
border-top: solid 1px #eee;
border-bottom: solid 1px #eee;
}
/*Inbox View*/
.inbox-view-header {
margin-bottom: 20px;
}
.inbox-view-header h1 {
color: #666;
font-size: 22px;
line-height: 24px;
margin-bottom: 0 !important;
}
.inbox-view-header h1 a {
top: -2px;
color: #fff;
cursor: pointer;
font-size: 13px;
padding: 2px 7px;
line-height: 16px;
position: relative;
background: #b0bcc4;
display: inline-block;
}
.inbox-view-header h1 a:hover {
background: #aab5bc;
text-decoration: none;
}
.inbox-view-header i.icon-print {
color: #94a4ab;
cursor: pointer;
font-size: 14px;
display: inline-block;
padding: 6px 8px !important;
background: #edf1f4 !important;
}
.inbox-view-header i.icon-print:hover {
background: #e7ebef !important;
}
.inbox-view-info {
color: #666;
padding: 5px 0;
margin-bottom: 10px;
border-top: solid 1px #eee;
border-bottom: solid 1px #eee;
}
.inbox-view-info strong {
color: #666;
margin: 0 10px 0 5px;
}
.inbox-view-info .inbox-info-btn {
text-align: right;
}
.inbox-view-info .inbox-info-btn ul {
text-align: left;
}
.inbox-view-info button {
top: 2px;
color: #94a4ab;
font-size: 13px;
margin-left: 4px;
padding: 3px 10px;
position: relative;
background: #edf1f4;
}
.inbox-view-info button:hover {
color: #94a4ab;
background: #e7ebef;
}
.inbox-view {
color: #666;
padding: 15px 0 0;
}
.inbox-view a {
color: #169ce9;
}
.inbox-attached {
line-height: 16px;
}
.inbox-attached a {
margin: 0 2px;
}
.inbox-attached img {
height: auto;
max-width: 250px;
margin-bottom: 5px;
}
.inbox-attached span {
margin-right: 3px;
}
.inbox-attached strong {
color: #555;
display: block;
font-size: 13px;
}
.inbox-attached .margin-bottom-25 {
margin-bottom: 25px;
}
.inbox-attached .margin-bottom-15 {
margin-bottom: 15px;
}
/*Inbox Compose*/
.inbox-compose {
margin-top: 1px;
border: solid 1px #eee;
}
.inbox-compose-btn {
padding: 8px 4px;
background: #f0f6fa;
}
.inbox-compose-attachment {
padding: 8px 8px;
}
.inbox-compose-attachment .btn {
padding: 4px 10px;
}
.inbox-compose-btn button {
color: #fff;
font-size: 14px;
margin-left: 4px;
padding: 4px 10px;
background: #c0cfdd;
}
.inbox-compose-btn button:hover {
color: #fff;
background: #4d90fe;
}
.inbox-compose-btn button i {
margin-right: 3px;
}
.inbox-compose .inbox-control-group {
margin-bottom: 0;
position: relative;
border-bottom: solid 1px #eee;
}
.inbox-compose .controls {
margin-left: 85px;
}
.inbox-compose .inbox-control-group > label {
width: 80px;
float: left;
color: #979797;
text-align: right;
}
.inbox-compose .controls > input {
border: none !important;
}
.inbox-compose .controls-to {
padding-right: 55px;
}
.inbox-compose .controls-cc {
padding-right: 15px;
}
.inbox-compose .controls-bcc {
padding-right: 15px;
}
.inbox-compose .tag {
font-size: 12px;
font-weight: 300 !important;
margin-top: 6px;
margin-left: 5px;
color: #333;
text-shadow: none !important;
background-color: #eee;
display: inline-block !important;
padding: 3px !important;
}
.inbox-compose .tag .close {
margin-top: -2px;
display: inline-block !important;
float: none !important;
}
.inbox-compose .tags {
border: none !important;
font-size: 13px;
padding: 0px;
margin-bottom: 0px;
margin-right: 50px;
box-shadow: none !important;
}
.inbox-compose .tags-hover {
border: 1px solid #ddd;
border: none !important;
box-shadow: none !important;
background: none !important;
}
.inbox-compose .tags input[type="text"],
.inbox-compose .tags input[type="text"]:focus {
display: inline-block !important;
border: none !important;
font-size: 14px !important;
vertical-align: top;
outline: 0;
margin: 0;
padding: 0;
width: auto;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
.inbox-compose .inbox-control-group a.close {
top: 13px;
right: 10px;
position: absolute;
}
.inbox-compose .mail-to .inbox-cc-bcc {
display: inline-block;
top: 7px;
right: 10px;
color: #979797;
font-size: 14px;
cursor: pointer;
position: absolute;
}
.inbox-compose .mail-to .inbox-bcc {
margin-left: 5px;
}
.inbox-compose .mail-to inbox-cc:hover,
.inbox-compose .mail-to inbox-bcc:hover {
color: #777;
}
.inbox-compose .wysihtml5 {
padding: 0px !important;
margin: 0px !important;
border: 0 !important;
}
.inbox-compose .wysihtml5-sandbox {
padding: 0px !important;
margin: 0px !important;
display: block !important;
border: 0 !important;
margin-top: 5px;
width: 100% !important;
border-left: none;
border-right: none;
border-color: #eee;
}
.inbox-compose .wysihtml5-toolbar {
border: 0;
border-bottom: 1px solid #eee;
}
.inbox-compose .wysihtml5-toolbar > li {
height: 34px;
margin-right: 0;
margin-bottom: 0;
}
.inbox-compose .wysihtml5-toolbar > li > a,
.inbox-compose .wysihtml5-toolbar > li > div > a {
background: #fff;
}
.inbox-compose .wysihtml5-toolbar .dropdown.open .dropdown-toggle,
ul.wysihtml5-toolbar a.btn.wysihtml5-command-active {
background: #eee !important;
}
@media (max-width: 480px) {
.inbox-compose .inbox-control-group > label {
margin-top: 7px;
}
}

@ -0,0 +1,39 @@
/***
Invoice page
***/
.invoice table {
margin:30px 0 30px;
}
.invoice .invoice-logo {
margin-bottom:20px;
}
.invoice .invoice-logo p {
padding:5px 0;
font-size:26px;
line-height:28px;
text-align:right;
}
.invoice .invoice-logo p span {
display:block;
font-size:14px;
}
.invoice .invoice-logo-space {
margin-bottom:15px;
}
.invoice .invoice-payment strong {
margin-right:5px;
}
.invoice .invoice-block {
text-align:right;
}
.invoice .invoice-block .amounts {
margin-top: 20px;
font-size: 14px;
}

@ -0,0 +1,10 @@
.easyPieChart {
position: relative;
text-align: center;
}
.easyPieChart canvas {
position: absolute;
top: 0;
left: 0;
}

@ -0,0 +1,249 @@
/*! fancyBox v2.1.3 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('../image/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('../image/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('../image/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;
visibility: hidden;
max-width: 99999px;
max-height: 99999px;
overflow: visible !important;
}
/* Overlay helper */
.fancybox-lock {
overflow: hidden;
}
.fancybox-overlay {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
display: none;
z-index: 8010;
background: url('../image/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);
}

@ -0,0 +1,84 @@
@charset "UTF-8";
/*
* jQuery File Upload UI Plugin CSS 6.10
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
.fileinput-button {
position: relative;
overflow: hidden;
float: left;
margin-right: 4px;
}
.fileinput-button input {
position: absolute;
top: 0;
right: 0;
margin: 0;
opacity: 0;
filter: alpha(opacity=0);
transform: translate(-300px, 0) scale(4);
font-size: 23px;
direction: ltr;
cursor: pointer;
}
.fileupload-buttonbar .btn,
.fileupload-buttonbar .toggle {
margin-bottom: 5px;
}
.files .progress {
width: 200px;
}
.progress-animated .bar {
background: url(../image/progressbar.gif) !important;
filter: none;
}
.fileupload-loading {
position: absolute;
left: 50%;
width: 128px;
height: 128px;
background: url(../image/loading.gif) center no-repeat;
display: none;
}
.fileupload-processing .fileupload-loading {
display: block;
}
/* Fix for IE 6: */
* html .fileinput-button {
line-height: 24px;
margin: 1px -3px 0 0;
}
/* Fix for IE 7: */
* + html .fileinput-button {
padding: 2px 15px;
margin: 1px 0 0 0;
}
@media (max-width: 767px) {
.files .btn span {
display: none;
}
.files .preview * {
width: 40px;
}
.files .name * {
width: 80px;
display: inline-block;
word-wrap: break-word;
}
.files .progress {
width: 20px;
}
.files .delete {
width: 60px;
}
}

@ -0,0 +1,101 @@
/* the norm */
#gritter-notice-wrapper {
position:fixed;
top:20px;
right:20px;
width:301px;
z-index:9999;
}
#gritter-notice-wrapper.top-left {
left: 20px;
right: auto;
}
#gritter-notice-wrapper.bottom-right {
top: auto;
left: auto;
bottom: 20px;
right: 20px;
}
#gritter-notice-wrapper.bottom-left {
top: auto;
right: auto;
bottom: 20px;
left: 20px;
}
.gritter-item-wrapper {
position:relative;
margin:0 0 10px 0;
background:url('../image/ie-spacer.gif'); /* ie7/8 fix */
}
.gritter-top {
background:url(../image/gritter.png) no-repeat left -30px;
height:10px;
}
.hover .gritter-top {
background-position:right -30px;
}
.gritter-bottom {
background:url(../image/gritter.png) no-repeat left bottom;
height:8px;
margin:0;
}
.hover .gritter-bottom {
background-position: bottom right;
}
.gritter-item {
display:block;
background:url(../image/gritter.png) no-repeat left -40px;
color:#eee;
padding:2px 11px 8px 11px;
font-size: 11px;
font-family:verdana;
}
.hover .gritter-item {
background-position:right -40px;
}
.gritter-item p {
padding:0;
margin:0;
word-wrap:break-word;
}
.gritter-close {
display:none;
position:absolute;
top:5px;
left:3px;
background:url(../image/gritter.png) no-repeat left top;
cursor:pointer;
width:30px;
height:30px;
}
.gritter-title {
font-size:14px;
font-weight:bold;
padding:0 0 7px 0;
display:block;
text-shadow:1px 1px 0 #000; /* Not supported by IE :( */
}
.gritter-image {
width:48px;
height:48px;
float:left;
}
.gritter-with-image,
.gritter-without-image {
padding:0;
}
.gritter-with-image {
width:220px;
float:right;
}
/* for the light (white) version of the gritter notice */
.gritter-light .gritter-item,
.gritter-light .gritter-bottom,
.gritter-light .gritter-top,
.gritter-light .gritter-close {
background-image: url(../image/gritter-light.png);
color: #222;
}
.gritter-light .gritter-title {
text-shadow: none;
}

@ -0,0 +1,65 @@
/**
* Nestable
*/
.dd-list { display: block; position: relative; margin: 0; padding: 0; list-style: none; }
.dd-list .dd-list { padding-left: 30px; }
.dd-collapsed .dd-list { display: none; }
.dd-item,
.dd-empty,
.dd-placeholder { display: block; position: relative; margin: 0; padding: 0; min-height: 20px; font-size: 13px; line-height: 20px; }
.dd-handle { display: block; height: 30px; margin: 5px 0; cursor: move; padding: 5px 10px; color: #333; text-decoration: none; font-weight: 400; border: 1px solid #ccc;
background: #fafafa;
-webkit-border-radius: 3px;
border-radius: 3px;
box-sizing: border-box; -moz-box-sizing: border-box;
}
.dd-handle:hover { color: #2ea8e5; background: #fff; }
.dd-item > button { display: block; position: relative; cursor: pointer; float: left; width: 25px; height: 20px; margin: 7px 0; padding: 0; text-indent: 100%; white-space: nowrap; overflow: hidden; border: 0; background: transparent; font-size: 10px; line-height: 1; text-align: center; font-weight: bold; }
.dd-item > button:before { content: '\f067'; display: block; position: absolute; width: 100%; text-align: center; text-indent: 0; font-family: 'FontAwesome' }
.dd-item > button[data-action="collapse"]:before { content: '\f068'; }
.dd-placeholder,
.dd-empty {
margin: 5px 0; padding: 0; min-height: 30px; background: #f2fbff; border: 1px dashed #b6bcbf;
box-sizing: border-box; -moz-box-sizing: border-box; }
.dd-empty { border: 1px dashed #bbb; min-height: 100px; background-color: #e5e5e5;
background-size: 60px 60px;
background-position: 0 0, 30px 30px;
}
.dd-dragel { position: absolute; pointer-events: none; z-index: 9999; }
.dd-dragel > .dd-item .dd-handle { margin-top: 0; }
.dd-dragel .dd-handle {
-webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);
box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);
}
.dd-hover > .dd-handle { background: #2ea8e5 !important; }
/**
* Nestable Draggable Handles
*/
.dd3-content { display: block; height: 30px; margin: 5px 0; padding: 5px 10px 5px 40px; color: #333; text-decoration: none; font-weight: 400; border: 1px solid #ccc;
background: #fafafa;
-webkit-border-radius: 3px;
border-radius: 3px;
box-sizing: border-box; -moz-box-sizing: border-box;
}
.dd3-content:hover { color: #2ea8e5; background: #fff; }
.dd-dragel > .dd3-item > .dd3-content { margin: 0; }
.dd3-item > button { margin-left: 30px; }
.dd3-handle { position: absolute; margin: 0; left: 0; top: 0; cursor:move; width: 30px; text-indent: 100%; white-space: nowrap; overflow: hidden;
border: 1px solid #aaa;
background: #ddd;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.dd3-handle:before { content: '≡'; display: block; position: absolute; left: 0; top: 3px; width: 100%; text-align: center; text-indent: 0; color: #fff; font-size: 20px; font-weight: normal; }
.dd3-handle:hover { background: #ddd; }

@ -0,0 +1,7 @@
div.tagsinput { border:1px solid #CCC; background: #FFF; padding:5px; width:300px; height:100px; overflow-y: auto;}
div.tagsinput span.tag { border: 1px solid #a5d24a; -moz-border-radius:2px; -webkit-border-radius:2px; display: block; float: left; padding: 5px; text-decoration:none; background: #cde69c; color: #638421; margin-right: 5px; margin-bottom:5px;font-family: helvetica; font-size:13px;}
div.tagsinput span.tag a { font-weight: bold; color: #82ad2b; text-decoration:none; font-size: 11px; }
div.tagsinput input { width:80px; margin:0px; font-family: helvetica; font-size: 13px; border:1px solid transparent; padding:5px; background: transparent; color: #000; outline:0px; margin-right:5px; margin-bottom:5px; }
div.tagsinput div { display:block; float: left; }
.tags_clear { clear: both; width: 100%; height: 0px; }
.not_valid {background: #FBD8DB !important; color: #90111A !important;}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save