├── .babelrc
├── .editorconfig
├── .gitignore
├── README.md
├── app
├── components
│ ├── header.css
│ ├── header.jsx
│ ├── like.css
│ ├── like.jsx
│ ├── more.css
│ ├── more.jsx
│ ├── otherapp.css
│ ├── otherapp.jsx
│ ├── search.css
│ ├── search.jsx
│ ├── spike.css
│ └── spike.jsx
├── images
│ └── jd-sprites.png
├── lib
│ ├── common.css
│ ├── swiper.min.css
│ └── swiper.min.js
└── util
│ └── jsonp.js
├── build
├── 1c93a187f292ce38cc70b36f0b994b64.png
├── bundle.js
└── index.html
├── index.html
├── index.jsx
├── jd.png
├── package.json
├── server
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── database
│ │ └── database.json
│ └── images
│ │ ├── like
│ │ ├── like1.jpg
│ │ ├── like10.jpg
│ │ ├── like2.jpg
│ │ ├── like3.jpg
│ │ ├── like4.jpg
│ │ ├── like5.jpg
│ │ ├── like6.jpg
│ │ ├── like7.jpg
│ │ ├── like8.jpg
│ │ └── like9.jpg
│ │ ├── more
│ │ ├── more1.jpg
│ │ ├── more2.jpg
│ │ ├── more3.jpg
│ │ ├── more4.jpg
│ │ ├── more5.jpg
│ │ ├── more6.jpg
│ │ └── more7.jpg
│ │ ├── otherapp
│ │ ├── app1.png
│ │ ├── app2.png
│ │ ├── app3.png
│ │ ├── app4.png
│ │ ├── app5.png
│ │ ├── app6.png
│ │ ├── app7.png
│ │ └── app8.png
│ │ ├── spike
│ │ ├── spike1.jpg
│ │ ├── spike2.jpg
│ │ └── spike3.jpg
│ │ └── swiper
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ ├── 3.jpg
│ │ ├── 4.jpg
│ │ └── 5.jpg
└── routes
│ └── data.js
├── webpack.config.js
├── webpack.loaders.js
└── webpack.production.config.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "react"]
3 | }
4 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | # Unix-style newlines with a newline ending every file
4 | [*]
5 | end_of_line = lf
6 | insert_final_newline = true
7 |
8 |
9 | # Matches multiple files with brace expansion notation
10 | # Set default charset
11 | [*.{js,jsx,html,sass}]
12 | charset = utf-8
13 | indent_style = tab
14 | indent_size = 2
15 | trim_trailing_whitespace = true
16 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 |
5 | # Runtime data
6 | pids
7 | *.pid
8 | *.seed
9 |
10 | # Directory for instrumented libs generated by jscoverage/JSCover
11 | lib-cov
12 |
13 | # Coverage directory used by tools like istanbul
14 | coverage
15 |
16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
17 | .grunt
18 |
19 | # node-waf configuration
20 | .lock-wscript
21 |
22 | # Compiled binary addons (http://nodejs.org/api/addons.html)
23 | build/Release
24 |
25 | # Dependency directory
26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
27 | node_modules
28 |
29 | # Ignore build files
30 | node_modules
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React-Demo
2 |
3 | ### 基于Reactjs && Node 通讯的简单演示
4 |
5 | * Reactjs && ES6 && webpack构建移动端京东首页
6 | * 基于文件系统的Node.js服务端
7 |
8 | 
9 |
10 | ## 安装与运行程序
11 |
12 | 克隆项目
13 |
14 | ```
15 | > $ git clone https://github.com/CanFoo/react.git
16 | ```
17 |
18 | 分别进入react目录和server目录下安装依赖包
19 |
20 | ```
21 | > $ npm install
22 | ```
23 |
24 | 在server目录下启动后台服务
25 |
26 | ```
27 | > $ npm run start
28 | ```
29 |
30 | 在react目录下启动webpack服务
31 |
32 | ```
33 | > $ npm run dev
34 | ```
35 |
36 | 发布项目文件命令
37 |
38 | ```
39 | > $ npm run build
40 | ```
41 |
42 | 执行完`npm run dev`命令后,打开浏览器 `http://localhost:8080/`运行项目,后台服务端口为 `3000`
43 |
44 | ## 后台接口(jsonp请求)
45 | 轮播图模块
46 | ```
47 | http://localhost:3000/data/swiper
48 | ```
49 |
50 | 更多服务功能
51 | ```
52 | http://localhost:3000/data/otherapp
53 | ```
54 |
55 | 秒杀折扣
56 | ```
57 | http://localhost:3000/data/spike
58 | ```
59 |
60 | 更多种类选择
61 | ```
62 | http://localhost:3000/data/more
63 | ```
64 |
65 | 猜你喜欢
66 | ```
67 | http://localhost:3000/data/like
68 | ```
69 |
--------------------------------------------------------------------------------
/app/components/header.css:
--------------------------------------------------------------------------------
1 |
2 | #header .swiper-pagination-bullet {
3 | width: 6px;
4 | height: 6px;
5 | border: 1px solid #fff;
6 | background-color: transparent;
7 | opacity: 1;
8 | }
9 |
10 | #header .swiper-pagination-bullet-active {
11 | background-color: #fff;
12 | }
13 |
14 | .img {
15 | width: 100%
16 | }
--------------------------------------------------------------------------------
/app/components/header.jsx:
--------------------------------------------------------------------------------
1 |
2 | require("./header.css");
3 | require('../lib/swiper.min.css');
4 | let Swiper = require('../lib/swiper.min.js');
5 | let jsonp = require('../util/jsonp.js');
6 |
7 | import React from 'react';
8 |
9 | let Header = React.createClass({
10 | getInitialState: function() {
11 | return {
12 | imgUrls: [],
13 | };
14 | },
15 | componentDidMount: function() {
16 | jsonp(this.props.source, "", "callback", (data) => {
17 | if(data.status) {
18 | //如果组件渲染到了 DOM 中,isMounted() 返回 true。
19 | //可以使用该方法保证 setState() 和 forceUpdate()
20 | //在异步场景下的调用不会出错。
21 | if(this.isMounted()) {
22 | this.setState({
23 | imgUrls: data.data,
24 | })
25 | new Swiper ('#header .swiper-container', {
26 | loop: true,
27 | pagination: '.swiper-pagination',
28 | paginationClickable: true,
29 | autoplay : 3000,
30 | autoplayDisableOnInteraction : false,
31 | })
32 | }
33 | }else {
34 | alert(data.msg);
35 | }
36 | });
37 | },
38 |
39 | render: function () {
40 | let countId = 0;
41 | return (
42 |
56 | );
57 | }
58 | })
59 |
60 | module.exports = Header;
61 |
62 |
--------------------------------------------------------------------------------
/app/components/like.css:
--------------------------------------------------------------------------------
1 |
2 | #like {
3 | background-color: #fff;
4 | font-size: 0;
5 | -webkit-text-size-adjust:none;
6 | padding-top: 3px;
7 | }
8 |
9 | #like p {
10 | font-size: 14px;
11 | color: #7f7f7f;
12 | padding-left: 5px;
13 | }
14 |
15 | .like_content {
16 | display: inline-block;
17 | width: 50%;
18 | text-align: center;
19 | }
20 |
21 | .like_link, .like_desc, .like_price{
22 | width: 95%;
23 | display: inline-block;
24 |
25 | }
26 |
27 | .like_desc {
28 | overflow: hidden;
29 | font-size: 12px;
30 | text-align: left;
31 | line-height: 14px;
32 | color: #333;
33 | padding-bottom: 5px;
34 | border-bottom: 1px solid #E5E6E6;
35 | }
36 |
37 | .like_desc span {
38 | display: -webkit-box;
39 | height: 28px;
40 | -webkit-box-orient: vertical;
41 | -webkit-line-clamp: 2;
42 | overflow: hidden;
43 | }
44 |
45 | .like_price {
46 | margin: 4px 0 16px 0;
47 | }
48 |
49 | .like_price span {
50 | font-size: 14px;
51 | color: #f15353;
52 | display: table-cell;
53 | vertical-align: middle;
54 | float: left;
55 | }
56 |
57 | .like_price a {
58 | color: #999;
59 | }
60 |
61 | .like_price div {
62 | border: 1px solid #999;
63 | border-radius: 3px;
64 | display: inline-block;
65 | font-size: 12px;
66 | color: #999;
67 | padding: 2px 6px;
68 | float: right;
69 | }
70 |
71 |
72 |
--------------------------------------------------------------------------------
/app/components/like.jsx:
--------------------------------------------------------------------------------
1 |
2 | require('./like.css');
3 | let jsonp = require('../util/jsonp.js');
4 | import React from 'react';
5 |
6 | let Like = React.createClass({
7 | getInitialState: function() {
8 | return {
9 | stores: [],
10 | }
11 | },
12 |
13 | componentDidMount: function() {
14 | jsonp(this.props.source, "", "callback", (data) => {
15 | if(data.status) {
16 | if(this.isMounted()) {
17 | this.setState({
18 | stores: data.data,
19 | });
20 | }
21 | }else {
22 | alert(data.msg);
23 | reject("get data error!")
24 | }
25 | })
26 | },
27 |
28 | render: function() {
29 | let countId = 0;
30 | return (
31 |
32 |
猜你喜欢
33 | {
34 | this.state.stores.map((item) => {
35 | return
36 |
41 |
42 |
43 | { item.desc }
44 |
45 |
46 |
47 |
¥{ item.price }
48 |
49 |
50 |
51 | })
52 | }
53 |
54 | );
55 | }
56 | })
57 |
58 | module.exports = Like;
--------------------------------------------------------------------------------
/app/components/more.css:
--------------------------------------------------------------------------------
1 |
2 | img {
3 | width: 100%;
4 | }
5 |
6 | #more {
7 | background-color: #fff;
8 | }
9 |
10 | .more_link {
11 | width: 33%;
12 | border-width: 1px 1px 1px 0;
13 | border-style: solid;
14 | border-color: #f3f5f7;
15 | float: left;
16 | }
17 |
18 | .more_link:last-child {
19 | border-right: 0px;
20 | }
21 |
22 | .more_top:after, .more_middle:after, .more_bottom:after{
23 | content: "";
24 | display: block;
25 | clear: both;
26 | }
27 |
28 | .more_style {
29 | width: 49.8%;
30 | float: left;
31 | }
32 |
33 | .more_middle div:first-child {
34 | border-right: 1px solid #f3f5f7;
35 | }
36 |
37 | #more .swiper-pagination-bullet {
38 | width: 6px;
39 | height: 6px;
40 | border: 1px solid #fff;
41 | background-color: transparent;
42 | opacity: 1;
43 | }
44 |
45 | #more .swiper-pagination-bullet-active {
46 | background-color: #fff;
47 | }
48 |
49 | .more_bottom {
50 | padding: 8px;
51 | background-color: #f3f5f7;
52 | }
--------------------------------------------------------------------------------
/app/components/more.jsx:
--------------------------------------------------------------------------------
1 |
2 | require('./more.css');
3 | require('../lib/swiper.min.css');
4 | let Swiper = require('../lib/swiper.min.js');
5 | let jsonp = require('../util/jsonp.js');
6 | import React from 'react';
7 |
8 | var More = React.createClass({
9 | getInitialState: function() {
10 | return {
11 | more1: [],
12 | more2: [],
13 | more3: [],
14 | };
15 | },
16 |
17 | componentDidMount: function() {
18 | jsonp(this.props.source, "", "callback", (data) => {
19 | if(data.status) {
20 |
21 | if(this.isMounted()) {
22 | this.setState({
23 | more1: data.data.slice(0,3),
24 | more2: data.data.slice(3,5),
25 | more3: data.data.slice(5,7),
26 | })
27 | new Swiper ('.more_bottom .swiper-container', {
28 | loop: true,
29 | pagination: '.swiper-pagination',
30 | paginationClickable: true,
31 | autoplay : 2000,
32 | autoplayDisableOnInteraction : false,
33 | })
34 | }
35 | }else {
36 | alert(data.msg);
37 | }
38 | });
39 | },
40 |
41 | render: function() {
42 |
43 | let countId = 0;
44 | return (
45 |
46 |
47 | {
48 | this.state.more1.map((item) => {
49 | return
54 | })
55 | }
56 |
57 |
58 | {
59 | this.state.more2.map((item) => {
60 | return
65 | })
66 | }
67 |
68 |
69 |
70 |
71 | {
72 | this.state.more3.map((item) => {
73 | return
78 | })
79 | }
80 |
81 |
82 |
83 |
84 |
85 | );
86 | }
87 | })
88 |
89 | module.exports = More;
--------------------------------------------------------------------------------
/app/components/otherapp.css:
--------------------------------------------------------------------------------
1 | .oapp {
2 | height: 165px;
3 | background-color: #fff;
4 | }
5 |
6 | .oapp li {
7 | font-size: 12px;
8 | color: #666;
9 | text-align: center;
10 | width: 25%;
11 | float: left;
12 | margin-top: 12px;
13 | }
14 |
15 | .oapp li:last-child:after {
16 | content: "";
17 | display: block;
18 | clear: both;
19 | }
20 |
21 | .oapp a {
22 | color: #666;
23 | }
24 |
25 | .app_icon {
26 | width: 40px;
27 | height: 40px;
28 | margin: 0 auto 4px auto;
29 | }
--------------------------------------------------------------------------------
/app/components/otherapp.jsx:
--------------------------------------------------------------------------------
1 |
2 | require('./otherapp.css');
3 | let jsonp = require('../util/jsonp.js');
4 |
5 | import React from 'react';
6 |
7 | let Otherapp = React.createClass({
8 | getInitialState: function() {
9 | return {
10 | apps: [],
11 | };
12 | },
13 |
14 | componentDidMount: function() {
15 | jsonp(this.props.source, "", "callback", (data) => {
16 | if(data.status) {
17 | if(this.isMounted()) {
18 | this.setState({
19 | apps: data.data,
20 | })
21 | }
22 | }else {
23 | alert(data.msg);
24 | }
25 | });
26 | },
27 |
28 | render: function() {
29 | let countId = 0;
30 | return (
31 |
47 | );
48 | }
49 | })
50 |
51 | module.exports = Otherapp;
--------------------------------------------------------------------------------
/app/components/search.css:
--------------------------------------------------------------------------------
1 | #search {
2 | min-width: 320px;
3 | max-width: 640px;
4 | width: 100%;
5 | height: 45px;
6 | box-sizing: border-box;
7 | padding: 5px 20px;
8 | z-index: 10;
9 | // background-color: rgba(234, 44, 44, 0.81);
10 | background-color: rgba(234, 44, 44, 0);
11 | opacity: 1;
12 | }
13 |
14 | .search {
15 | margin: 0 auto;
16 | width: 100%;
17 | height: 100%;
18 | text-align: center;
19 | top: 0;
20 | }
21 |
22 | .sl {
23 | left: 0;
24 | height: 100%;
25 | margin-top: 5px;
26 | }
27 |
28 | .sl i {
29 | width: 56px;
30 | height: 21px;
31 | display: inline-block;
32 | background: url('../images/jd-sprites.png') no-repeat;
33 | background-size: 200px 200px;
34 | background-position: 0 -109px;
35 | }
36 |
37 | .frc {
38 | margin-left: 66px;
39 | margin-right: 40px;
40 | background-color: #fff;
41 | border: 1px solid #fff;
42 | height: 30px;
43 | border-radius: 30px;
44 | margin-top: 3px;
45 | box-sizing: border-box;
46 | }
47 |
48 | .searchicon {
49 | left: 7px;
50 | top: 3px;
51 | display: inline-block;
52 | width: 20px;
53 | height: 20px;
54 | background: url('../images/jd-sprites.png') no-repeat;
55 | background-position: -60px -109px;
56 | background-size: 200px 200px;
57 | }
58 |
59 | .frc form {
60 | height: 100%;
61 | }
62 |
63 | .frc input {
64 | border: 0;
65 | width: 98%;
66 | height: 100%;
67 | color: #333;
68 | text-indent: 30px;
69 | font-size: 18px;
70 | border-radius: 30px;
71 | }
72 |
73 | .sub {
74 | top: 0;
75 | right: 0;
76 | width: 30px;
77 | height: 100%;
78 | line-height: 40px;
79 | font-size: 15px;
80 | color: #fff;
81 | margin-top: -5px;
82 | }
--------------------------------------------------------------------------------
/app/components/search.jsx:
--------------------------------------------------------------------------------
1 |
2 | require('./search.css');
3 | import React from 'react';
4 |
5 | let Search = React.createClass({
6 | getInitialState: function() {
7 | return {
8 | bg: "transparent",
9 | }
10 | },
11 | componentDidMount: function() {
12 |
13 | window.onscroll = (event) => {
14 | let realHeight = document.documentElement.scrollTop || document.body.scrollTop;
15 | let optatic = 0.8 * (realHeight/142);
16 | if(optatic <= 0.8 ) {
17 | this.setState({
18 | bg: `rgba(234, 44, 44, ${optatic})`,
19 | })
20 | }
21 | }
22 | },
23 | render: function() {
24 | let bColor = this.state.bg ? this.state.bg : 'transprent';
25 | return (
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
36 |
37 |
38 | 登录
39 |
40 |
41 |
42 | );
43 | }
44 | })
45 |
46 | module.exports = Search;
--------------------------------------------------------------------------------
/app/components/spike.css:
--------------------------------------------------------------------------------
1 |
2 | #spike {
3 | background-color: #fff;
4 | margin-top: 5px;
5 | padding: 5px;
6 | }
7 |
8 | .spike_header>i {
9 | display: inline-block;
10 | margin-left: 10px;
11 | margin-top: 4px;
12 | width: 18px;
13 | height: 22px;
14 | float: left;
15 | margin-top: 8px;
16 | background: url("../images/jd-sprites.png") -84px -109px no-repeat;
17 | background-size: 200px 200px;
18 | }
19 |
20 | .spike_title {
21 | white-space: nowrap;
22 | display: inline-block;
23 | float: left;
24 | font-size: 15px;
25 | color: #ca1327;
26 | margin: 10px 6px 0 5px;
27 | }
28 |
29 | .spike_time {
30 | display: inline-block;
31 | font-size: 13px;
32 | float: left;
33 | margin-top: 10px;
34 | }
35 |
36 | .spike_time span {
37 | display: inline-block;
38 | width: 18px;
39 | height: 18px;
40 | padding: auto;
41 | text-align: center;
42 | color: #fff;
43 | background: #3d3d3d;
44 | border-radius: 2px;
45 | padding-right: 2px;
46 | margin: 0 2px;
47 | }
48 |
49 | .spike_more {
50 | font-size: 12px;
51 | margin-top: 10px;
52 | }
53 |
54 | .spike_more span {
55 | color: #666;
56 | }
57 |
58 | .spike_more i {
59 | display: inline-block;
60 | width: 7px;
61 | height: 12px;
62 | margin: 2px 0 0 2px;
63 | background: url("../images/jd-sprites.png") -186px -51px no-repeat;
64 | background-size: 200px 200px;
65 | }
66 |
67 | .spike_more:after {
68 | content: "";
69 | display: block;
70 | clear: both;
71 | }
72 |
73 | .spike_content {
74 | margin-top: 10px;
75 | height: 150px;
76 | }
77 |
78 | .spike_content li {
79 | width: 33%;
80 | text-align: center;
81 | float: left;
82 | }
83 |
84 | .spike_content div {
85 | width: 100px;
86 | display: inline-block;
87 | border-right: 1px solid #f3f5f7;
88 | }
89 |
90 | .last_store {
91 | border: 0;
92 | }
93 |
94 | .spike_content img {
95 | width: 100%;
96 | }
97 |
98 | .spike_content p {
99 | margin-top: 8px;
100 | color: #ed5657;
101 | font-size: 14px;
102 | line-height: 14px;
103 | }
104 |
105 | .spike_content .real-price {
106 | color: #888;
107 | font-size: 10px;
108 | margin: 5px 0 12px 0;
109 | text-align: center;
110 | text-decoration: line-through;
111 | }
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/app/components/spike.jsx:
--------------------------------------------------------------------------------
1 |
2 | require('./spike.css');
3 | let jsonp = require('../util/jsonp.js');
4 | import React from 'react';
5 |
6 | let Spike = React.createClass({
7 | getInitialState: function() {
8 | return {
9 | hour: "00",
10 | minutes: "00",
11 | second: "00",
12 | stores: [],
13 | more: ""
14 | }
15 | },
16 |
17 | formatTime: function(times=0) {
18 | times = +times;
19 | let hour = 0,
20 | minutes = 0,
21 | second = 0,
22 | regTwo = /^\d{2}$/,
23 | regInteger = /^(\d{1,2})\.?\d*$/;
24 | if(times/3600 >= 1) {
25 | hour = times/3600;
26 | hour = +regInteger.exec(hour.toString())[1]
27 | times -= hour*3600;
28 | hour = regTwo.test(hour.toString()) ? hour.toString() : `0${hour}`;
29 | }
30 | if(times/60 >= 1) {
31 | minutes = times/60;
32 | minutes = +regInteger.exec(minutes.toString())[1]
33 | times -= minutes*60;
34 | minutes = regTwo.test(minutes.toString()) ? minutes.toString() : `0${minutes}`;
35 | }
36 | second = times;
37 | second = regTwo.test(second.toString()) ? second.toString() : `0${second}`;
38 | return {
39 | hour: hour,
40 | minutes: minutes,
41 | second: second,
42 | }
43 | },
44 |
45 | componentDidMount: function() {
46 | let getData = () => {
47 | let promise = new Promise((resolve, reject) => {
48 | jsonp(this.props.source, "", "callback", (data) => {
49 | if(data.status) {
50 | if(this.isMounted()) {
51 | this.setState({
52 | stores: data.data,
53 | more: data.more,
54 | });
55 | resolve(data.times);
56 | }
57 | }else {
58 | alert(data.msg);
59 | reject("get data error!")
60 | }
61 | })
62 | })
63 | return promise;
64 | }
65 |
66 | getData().then((times) => {
67 | times = +times;
68 | let timer = window.setInterval(() => {
69 | let {hour, minutes, second} = this.formatTime(times--);
70 | if(times == -1) {
71 | clearInterval(timer);
72 | timer = null;
73 | }
74 | this.setState({
75 | hour: hour,
76 | minutes: minutes,
77 | second: second,
78 | });
79 | }, 1000);
80 | }, (err) => {
81 | alert(err);
82 | });
83 |
84 | },
85 |
86 | render: function() {
87 | let countId = 0;
88 | return (
89 |
90 |
91 |
92 |
掌上时间
93 |
94 | {
95 | (() => {
96 | return
97 | {this.state.hour}:{this.state.minutes}:{this.state.second}
98 |
99 |
100 | })()
101 | }
102 |
103 |
110 |
111 |
112 |
127 |
128 | );
129 | }
130 | })
131 |
132 | module.exports = Spike;
--------------------------------------------------------------------------------
/app/images/jd-sprites.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/app/images/jd-sprites.png
--------------------------------------------------------------------------------
/app/lib/common.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | position: relative;
4 | height: 100%;
5 | width: 100%;
6 | }
7 |
8 | html,
9 | body {
10 | font-family: "Microsoft YaHei", arial, sans-serif;
11 | -ms-text-size-adjust: 100%;
12 | -webkit-text-size-adjust: 100%;
13 | margin: 0;
14 | padding: 0;
15 | color: #333;
16 | width: 100%;
17 | background: #fff;
18 | }
19 |
20 | input,
21 | ul,
22 | li,
23 | p,
24 | img,
25 | h1,
26 | h2,
27 | h3 {
28 | margin: 0;
29 | padding: 0;
30 | }
31 |
32 | img {
33 | width: 100%;
34 | height: 100%;
35 | }
36 |
37 |
38 | * {
39 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
40 | -webkit-touch-callout: none;
41 | }
42 | a,
43 | input,
44 | textarea,
45 | select {
46 | outline: 0;
47 | }
48 | a {
49 | text-decoration: none;
50 | color: #099cd6;
51 | }
52 |
53 | p {
54 | margin: 0;
55 | overflow: hidden;
56 | padding: 0;
57 | }
58 |
59 | div {
60 | word-break:break-all;
61 | }
62 |
63 | i {
64 | font-style:normal;
65 | }
66 |
67 | ul, li, dl, dt, dd {
68 | list-style-type: none;
69 | padding: 0;
70 | margin: 0;
71 | }
72 |
73 | .fl {
74 | float: left;
75 | }
76 |
77 | .fr {
78 | float: right;
79 | }
80 |
81 | .fc {
82 | clear: both;
83 | }
84 |
85 | .pr {
86 | position: relative;
87 | }
88 |
89 | .pa {
90 | position: absolute;
91 | }
92 |
93 | .pf {
94 | position: fixed;
95 | }
--------------------------------------------------------------------------------
/app/lib/swiper.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Swiper 3.3.1
3 | * Most modern mobile touch slider and framework with hardware accelerated transitions
4 | *
5 | * http://www.idangero.us/swiper/
6 | *
7 | * Copyright 2016, Vladimir Kharlampidi
8 | * The iDangero.us
9 | * http://www.idangero.us/
10 | *
11 | * Licensed under MIT
12 | *
13 | * Released on: February 7, 2016
14 | */
15 | .swiper-container{margin:0 auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-moz-box-orient:vertical;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate(0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-box-lines:multiple;-moz-box-lines:multiple;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex:0 0 auto;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start;-webkit-transition-property:-webkit-transform,height;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-moz-background-size:27px 44px;-webkit-background-size:27px 44px;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);-moz-transform:translate3d(0,-50%,0);-o-transform:translate(0,-50%);-ms-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 5px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-moz-transform-origin:right top;-ms-transform-origin:right top;-o-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:rgba(255,255,255,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;-moz-perspective:1200px;-o-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-moz-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;-moz-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;-webkit-background-size:100%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}
--------------------------------------------------------------------------------
/app/lib/swiper.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Swiper 3.3.1
3 | * Most modern mobile touch slider and framework with hardware accelerated transitions
4 | *
5 | * http://www.idangero.us/swiper/
6 | *
7 | * Copyright 2016, Vladimir Kharlampidi
8 | * The iDangero.us
9 | * http://www.idangero.us/
10 | *
11 | * Licensed under MIT
12 | *
13 | * Released on: February 7, 2016
14 | */
15 | !function(){"use strict";function e(e){e.fn.swiper=function(a){var r;return e(this).each(function(){var e=new t(this,a);r||(r=e)}),r}}var a,t=function(e,i){function s(e){return Math.floor(e)}function n(){b.autoplayTimeoutId=setTimeout(function(){b.params.loop?(b.fixLoop(),b._slideNext(),b.emit("onAutoplay",b)):b.isEnd?i.autoplayStopOnLast?b.stopAutoplay():(b._slideTo(0),b.emit("onAutoplay",b)):(b._slideNext(),b.emit("onAutoplay",b))},b.params.autoplay)}function o(e,t){var r=a(e.target);if(!r.is(t))if("string"==typeof t)r=r.parents(t);else if(t.nodeType){var i;return r.parents().each(function(e,a){a===t&&(i=t)}),i?t:void 0}if(0!==r.length)return r[0]}function l(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,r=new t(function(e){e.forEach(function(e){b.onResize(!0),b.emit("onObserverUpdate",b,e)})});r.observe(e,{attributes:"undefined"==typeof a.attributes?!0:a.attributes,childList:"undefined"==typeof a.childList?!0:a.childList,characterData:"undefined"==typeof a.characterData?!0:a.characterData}),b.observers.push(r)}function p(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!b.params.allowSwipeToNext&&(b.isHorizontal()&&39===a||!b.isHorizontal()&&40===a))return!1;if(!b.params.allowSwipeToPrev&&(b.isHorizontal()&&37===a||!b.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(b.container.parents(".swiper-slide").length>0&&0===b.container.parents(".swiper-slide-active").length)return;var r={left:window.pageXOffset,top:window.pageYOffset},i=window.innerWidth,s=window.innerHeight,n=b.container.offset();b.rtl&&(n.left=n.left-b.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+b.width,n.top],[n.left,n.top+b.height],[n.left+b.width,n.top+b.height]],l=0;l=r.left&&p[0]<=r.left+i&&p[1]>=r.top&&p[1]<=r.top+s&&(t=!0)}if(!t)return}b.isHorizontal()?((37===a||39===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!b.rtl||37===a&&b.rtl)&&b.slideNext(),(37===a&&!b.rtl||39===a&&b.rtl)&&b.slidePrev()):((38===a||40===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&b.slideNext(),38===a&&b.slidePrev())}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=b.mousewheel.event,t=0,r=b.rtl?-1:1;if("mousewheel"===a)if(b.params.mousewheelForceToAxis)if(b.isHorizontal()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX*r}else{if(!(Math.abs(e.wheelDeltaY)>Math.abs(e.wheelDeltaX)))return;t=e.wheelDeltaY}else t=Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)?-e.wheelDeltaX*r:-e.wheelDeltaY;else if("DOMMouseScroll"===a)t=-e.detail;else if("wheel"===a)if(b.params.mousewheelForceToAxis)if(b.isHorizontal()){if(!(Math.abs(e.deltaX)>Math.abs(e.deltaY)))return;t=-e.deltaX*r}else{if(!(Math.abs(e.deltaY)>Math.abs(e.deltaX)))return;t=-e.deltaY}else t=Math.abs(e.deltaX)>Math.abs(e.deltaY)?-e.deltaX*r:-e.deltaY;if(0!==t){if(b.params.mousewheelInvert&&(t=-t),b.params.freeMode){var i=b.getWrapperTranslate()+t*b.params.mousewheelSensitivity,s=b.isBeginning,n=b.isEnd;if(i>=b.minTranslate()&&(i=b.minTranslate()),i<=b.maxTranslate()&&(i=b.maxTranslate()),b.setWrapperTransition(0),b.setWrapperTranslate(i),b.updateProgress(),b.updateActiveIndex(),(!s&&b.isBeginning||!n&&b.isEnd)&&b.updateClasses(),b.params.freeModeSticky?(clearTimeout(b.mousewheel.timeout),b.mousewheel.timeout=setTimeout(function(){b.slideReset()},300)):b.params.lazyLoading&&b.lazy&&b.lazy.load(),0===i||i===b.maxTranslate())return}else{if((new window.Date).getTime()-b.mousewheel.lastScrollTime>60)if(0>t)if(b.isEnd&&!b.params.loop||b.animating){if(b.params.mousewheelReleaseOnEdges)return!0}else b.slideNext();else if(b.isBeginning&&!b.params.loop||b.animating){if(b.params.mousewheelReleaseOnEdges)return!0}else b.slidePrev();b.mousewheel.lastScrollTime=(new window.Date).getTime()}return b.params.autoplay&&b.stopAutoplay(),e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function u(e,t){e=a(e);var r,i,s,n=b.rtl?-1:1;r=e.attr("data-swiper-parallax")||"0",i=e.attr("data-swiper-parallax-x"),s=e.attr("data-swiper-parallax-y"),i||s?(i=i||"0",s=s||"0"):b.isHorizontal()?(i=r,s="0"):(s=r,i="0"),i=i.indexOf("%")>=0?parseInt(i,10)*t*n+"%":i*t*n+"px",s=s.indexOf("%")>=0?parseInt(s,10)*t+"%":s*t+"px",e.transform("translate3d("+i+", "+s+",0px)")}function c(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof t))return new t(e,i);var m={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,hashnav:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},h=i&&i.virtualTranslate;i=i||{};var f={};for(var g in i)if("object"!=typeof i[g]||null===i[g]||(i[g].nodeType||i[g]===window||i[g]===document||"undefined"!=typeof r&&i[g]instanceof r||"undefined"!=typeof jQuery&&i[g]instanceof jQuery))f[g]=i[g];else{f[g]={};for(var v in i[g])f[g][v]=i[g][v]}for(var w in m)if("undefined"==typeof i[w])i[w]=m[w];else if("object"==typeof i[w])for(var y in m[w])"undefined"==typeof i[w][y]&&(i[w][y]=m[w][y]);var b=this;if(b.params=i,b.originalParams=f,b.classNames=[],"undefined"!=typeof a&&"undefined"!=typeof r&&(a=r),("undefined"!=typeof a||(a="undefined"==typeof r?window.Dom7||window.Zepto||window.jQuery:r))&&(b.$=a,b.currentBreakpoint=void 0,b.getActiveBreakpoint=function(){if(!b.params.breakpoints)return!1;var e,a=!1,t=[];for(e in b.params.breakpoints)b.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var r=0;r=window.innerWidth&&!a&&(a=e);return a||"max"},b.setBreakpoint=function(){var e=b.getActiveBreakpoint();if(e&&b.currentBreakpoint!==e){var a=e in b.params.breakpoints?b.params.breakpoints[e]:b.originalParams,t=b.params.loop&&a.slidesPerView!==b.params.slidesPerView;for(var r in a)b.params[r]=a[r];b.currentBreakpoint=e,t&&b.destroyLoop&&b.reLoop(!0)}},b.params.breakpoints&&b.setBreakpoint(),b.container=a(e),0!==b.container.length)){if(b.container.length>1){var x=[];return b.container.each(function(){x.push(new t(this,i))}),x}b.container[0].swiper=b,b.container.data("swiper",b),b.classNames.push("swiper-container-"+b.params.direction),b.params.freeMode&&b.classNames.push("swiper-container-free-mode"),b.support.flexbox||(b.classNames.push("swiper-container-no-flexbox"),b.params.slidesPerColumn=1),b.params.autoHeight&&b.classNames.push("swiper-container-autoheight"),(b.params.parallax||b.params.watchSlidesVisibility)&&(b.params.watchSlidesProgress=!0),["cube","coverflow","flip"].indexOf(b.params.effect)>=0&&(b.support.transforms3d?(b.params.watchSlidesProgress=!0,b.classNames.push("swiper-container-3d")):b.params.effect="slide"),"slide"!==b.params.effect&&b.classNames.push("swiper-container-"+b.params.effect),"cube"===b.params.effect&&(b.params.resistanceRatio=0,b.params.slidesPerView=1,b.params.slidesPerColumn=1,b.params.slidesPerGroup=1,b.params.centeredSlides=!1,b.params.spaceBetween=0,b.params.virtualTranslate=!0,b.params.setWrapperSize=!1),("fade"===b.params.effect||"flip"===b.params.effect)&&(b.params.slidesPerView=1,b.params.slidesPerColumn=1,b.params.slidesPerGroup=1,b.params.watchSlidesProgress=!0,b.params.spaceBetween=0,b.params.setWrapperSize=!1,"undefined"==typeof h&&(b.params.virtualTranslate=!0)),b.params.grabCursor&&b.support.touch&&(b.params.grabCursor=!1),b.wrapper=b.container.children("."+b.params.wrapperClass),b.params.pagination&&(b.paginationContainer=a(b.params.pagination),b.params.uniqueNavElements&&"string"==typeof b.params.pagination&&b.paginationContainer.length>1&&1===b.container.find(b.params.pagination).length&&(b.paginationContainer=b.container.find(b.params.pagination)),"bullets"===b.params.paginationType&&b.params.paginationClickable?b.paginationContainer.addClass("swiper-pagination-clickable"):b.params.paginationClickable=!1,b.paginationContainer.addClass("swiper-pagination-"+b.params.paginationType)),(b.params.nextButton||b.params.prevButton)&&(b.params.nextButton&&(b.nextButton=a(b.params.nextButton),b.params.uniqueNavElements&&"string"==typeof b.params.nextButton&&b.nextButton.length>1&&1===b.container.find(b.params.nextButton).length&&(b.nextButton=b.container.find(b.params.nextButton))),b.params.prevButton&&(b.prevButton=a(b.params.prevButton),b.params.uniqueNavElements&&"string"==typeof b.params.prevButton&&b.prevButton.length>1&&1===b.container.find(b.params.prevButton).length&&(b.prevButton=b.container.find(b.params.prevButton)))),b.isHorizontal=function(){return"horizontal"===b.params.direction},b.rtl=b.isHorizontal()&&("rtl"===b.container[0].dir.toLowerCase()||"rtl"===b.container.css("direction")),b.rtl&&b.classNames.push("swiper-container-rtl"),b.rtl&&(b.wrongRTL="-webkit-box"===b.wrapper.css("display")),b.params.slidesPerColumn>1&&b.classNames.push("swiper-container-multirow"),b.device.android&&b.classNames.push("swiper-container-android"),b.container.addClass(b.classNames.join(" ")),b.translate=0,b.progress=0,b.velocity=0,b.lockSwipeToNext=function(){b.params.allowSwipeToNext=!1},b.lockSwipeToPrev=function(){b.params.allowSwipeToPrev=!1},b.lockSwipes=function(){b.params.allowSwipeToNext=b.params.allowSwipeToPrev=!1},b.unlockSwipeToNext=function(){b.params.allowSwipeToNext=!0},b.unlockSwipeToPrev=function(){b.params.allowSwipeToPrev=!0},b.unlockSwipes=function(){b.params.allowSwipeToNext=b.params.allowSwipeToPrev=!0},b.params.grabCursor&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grab",b.container[0].style.cursor="-moz-grab",b.container[0].style.cursor="grab"),b.imagesToLoad=[],b.imagesLoaded=0,b.loadImage=function(e,a,t,r,i){function s(){i&&i()}var n;e.complete&&r?s():a?(n=new window.Image,n.onload=s,n.onerror=s,t&&(n.srcset=t),a&&(n.src=a)):s()},b.preloadImages=function(){function e(){"undefined"!=typeof b&&null!==b&&(void 0!==b.imagesLoaded&&b.imagesLoaded++,b.imagesLoaded===b.imagesToLoad.length&&(b.params.updateOnImagesReady&&b.update(),b.emit("onImagesReady",b)))}b.imagesToLoad=b.container.find("img");for(var a=0;a=0&&(a=parseFloat(a.replace("%",""))/100*b.size),b.virtualSize=-a,b.rtl?b.slides.css({marginLeft:"",marginTop:""}):b.slides.css({marginRight:"",marginBottom:""});var n;b.params.slidesPerColumn>1&&(n=Math.floor(b.slides.length/b.params.slidesPerColumn)===b.slides.length/b.params.slidesPerColumn?b.slides.length:Math.ceil(b.slides.length/b.params.slidesPerColumn)*b.params.slidesPerColumn,"auto"!==b.params.slidesPerView&&"row"===b.params.slidesPerColumnFill&&(n=Math.max(n,b.params.slidesPerView*b.params.slidesPerColumn)));var o,l=b.params.slidesPerColumn,p=n/l,d=p-(b.params.slidesPerColumn*p-b.slides.length);for(e=0;e1){var c,m,h;"column"===b.params.slidesPerColumnFill?(m=Math.floor(e/l),h=e-m*l,(m>d||m===d&&h===l-1)&&++h>=l&&(h=0,m++),c=m+h*n/l,u.css({"-webkit-box-ordinal-group":c,"-moz-box-ordinal-group":c,"-ms-flex-order":c,"-webkit-order":c,order:c})):(h=Math.floor(e/p),m=e-h*p),u.css({"margin-top":0!==h&&b.params.spaceBetween&&b.params.spaceBetween+"px"}).attr("data-swiper-column",m).attr("data-swiper-row",h)}"none"!==u.css("display")&&("auto"===b.params.slidesPerView?(o=b.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),b.params.roundLengths&&(o=s(o))):(o=(b.size-(b.params.slidesPerView-1)*a)/b.params.slidesPerView,b.params.roundLengths&&(o=s(o)),b.isHorizontal()?b.slides[e].style.width=o+"px":b.slides[e].style.height=o+"px"),b.slides[e].swiperSlideSize=o,b.slidesSizesGrid.push(o),b.params.centeredSlides?(t=t+o/2+r/2+a,0===e&&(t=t-b.size/2-a),Math.abs(t)<.001&&(t=0),i%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t)):(i%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t),t=t+o+a),b.virtualSize+=o+a,r=o,i++)}b.virtualSize=Math.max(b.virtualSize,b.size)+b.params.slidesOffsetAfter;var f;if(b.rtl&&b.wrongRTL&&("slide"===b.params.effect||"coverflow"===b.params.effect)&&b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}),(!b.support.flexbox||b.params.setWrapperSize)&&(b.isHorizontal()?b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}):b.wrapper.css({height:b.virtualSize+b.params.spaceBetween+"px"})),b.params.slidesPerColumn>1&&(b.virtualSize=(o+b.params.spaceBetween)*n,b.virtualSize=Math.ceil(b.virtualSize/b.params.slidesPerColumn)-b.params.spaceBetween,b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}),b.params.centeredSlides)){for(f=[],e=0;e1&&b.snapGrid.push(b.virtualSize-b.size)}0===b.snapGrid.length&&(b.snapGrid=[0]),0!==b.params.spaceBetween&&(b.isHorizontal()?b.rtl?b.slides.css({marginLeft:a+"px"}):b.slides.css({marginRight:a+"px"}):b.slides.css({marginBottom:a+"px"})),b.params.watchSlidesProgress&&b.updateSlidesOffset()}},b.updateSlidesOffset=function(){for(var e=0;e=0&&s0&&n<=b.size||0>=s&&n>=b.size;o&&b.slides.eq(t).addClass(b.params.slideVisibleClass)}r.progress=b.rtl?-i:i}}},b.updateProgress=function(e){"undefined"==typeof e&&(e=b.translate||0);var a=b.maxTranslate()-b.minTranslate(),t=b.isBeginning,r=b.isEnd;0===a?(b.progress=0,b.isBeginning=b.isEnd=!0):(b.progress=(e-b.minTranslate())/a,b.isBeginning=b.progress<=0,b.isEnd=b.progress>=1),b.isBeginning&&!t&&b.emit("onReachBeginning",b),b.isEnd&&!r&&b.emit("onReachEnd",b),b.params.watchSlidesProgress&&b.updateSlidesProgress(e),b.emit("onProgress",b,b.progress)},b.updateActiveIndex=function(){var e,a,t,r=b.rtl?b.translate:-b.translate;for(a=0;a=b.slidesGrid[a]&&r=b.slidesGrid[a]&&r=b.slidesGrid[a]&&(e=a);(0>e||"undefined"==typeof e)&&(e=0),t=Math.floor(e/b.params.slidesPerGroup),t>=b.snapGrid.length&&(t=b.snapGrid.length-1),e!==b.activeIndex&&(b.snapIndex=t,b.previousIndex=b.activeIndex,b.activeIndex=e,b.updateClasses())},b.updateClasses=function(){b.slides.removeClass(b.params.slideActiveClass+" "+b.params.slideNextClass+" "+b.params.slidePrevClass);var e=b.slides.eq(b.activeIndex);e.addClass(b.params.slideActiveClass);var t=e.next("."+b.params.slideClass).addClass(b.params.slideNextClass);b.params.loop&&0===t.length&&b.slides.eq(0).addClass(b.params.slideNextClass);var r=e.prev("."+b.params.slideClass).addClass(b.params.slidePrevClass);if(b.params.loop&&0===r.length&&b.slides.eq(-1).addClass(b.params.slidePrevClass),b.paginationContainer&&b.paginationContainer.length>0){var i,s=b.params.loop?Math.ceil((b.slides.length-2*b.loopedSlides)/b.params.slidesPerGroup):b.snapGrid.length;if(b.params.loop?(i=Math.ceil((b.activeIndex-b.loopedSlides)/b.params.slidesPerGroup),i>b.slides.length-1-2*b.loopedSlides&&(i-=b.slides.length-2*b.loopedSlides),i>s-1&&(i-=s),0>i&&"bullets"!==b.params.paginationType&&(i=s+i)):i="undefined"!=typeof b.snapIndex?b.snapIndex:b.activeIndex||0,"bullets"===b.params.paginationType&&b.bullets&&b.bullets.length>0&&(b.bullets.removeClass(b.params.bulletActiveClass),b.paginationContainer.length>1?b.bullets.each(function(){a(this).index()===i&&a(this).addClass(b.params.bulletActiveClass)}):b.bullets.eq(i).addClass(b.params.bulletActiveClass)),"fraction"===b.params.paginationType&&(b.paginationContainer.find("."+b.params.paginationCurrentClass).text(i+1),b.paginationContainer.find("."+b.params.paginationTotalClass).text(s)),"progress"===b.params.paginationType){var n=(i+1)/s,o=n,l=1;b.isHorizontal()||(l=n,o=1),b.paginationContainer.find("."+b.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+o+") scaleY("+l+")").transition(b.params.speed)}"custom"===b.params.paginationType&&b.params.paginationCustomRender&&(b.paginationContainer.html(b.params.paginationCustomRender(b,i+1,s)),b.emit("onPaginationRendered",b,b.paginationContainer[0]))}b.params.loop||(b.params.prevButton&&b.prevButton&&b.prevButton.length>0&&(b.isBeginning?(b.prevButton.addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(b.prevButton)):(b.prevButton.removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(b.prevButton))),b.params.nextButton&&b.nextButton&&b.nextButton.length>0&&(b.isEnd?(b.nextButton.addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(b.nextButton)):(b.nextButton.removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(b.nextButton))))},b.updatePagination=function(){if(b.params.pagination&&b.paginationContainer&&b.paginationContainer.length>0){var e="";if("bullets"===b.params.paginationType){for(var a=b.params.loop?Math.ceil((b.slides.length-2*b.loopedSlides)/b.params.slidesPerGroup):b.snapGrid.length,t=0;a>t;t++)e+=b.params.paginationBulletRender?b.params.paginationBulletRender(t,b.params.bulletClass):"<"+b.params.paginationElement+' class="'+b.params.bulletClass+'">'+b.params.paginationElement+">";b.paginationContainer.html(e),b.bullets=b.paginationContainer.find("."+b.params.bulletClass),b.params.paginationClickable&&b.params.a11y&&b.a11y&&b.a11y.initPagination()}"fraction"===b.params.paginationType&&(e=b.params.paginationFractionRender?b.params.paginationFractionRender(b,b.params.paginationCurrentClass,b.params.paginationTotalClass):' / ',b.paginationContainer.html(e)),"progress"===b.params.paginationType&&(e=b.params.paginationProgressRender?b.params.paginationProgressRender(b,b.params.paginationProgressbarClass):'',b.paginationContainer.html(e)),"custom"!==b.params.paginationType&&b.emit("onPaginationRendered",b,b.paginationContainer[0])}},b.update=function(e){function a(){r=Math.min(Math.max(b.translate,b.maxTranslate()),b.minTranslate()),b.setWrapperTranslate(r),b.updateActiveIndex(),b.updateClasses()}if(b.updateContainerSize(),b.updateSlidesSize(),b.updateProgress(),b.updatePagination(),b.updateClasses(),b.params.scrollbar&&b.scrollbar&&b.scrollbar.set(),e){var t,r;b.controller&&b.controller.spline&&(b.controller.spline=void 0),b.params.freeMode?(a(),b.params.autoHeight&&b.updateAutoHeight()):(t=("auto"===b.params.slidesPerView||b.params.slidesPerView>1)&&b.isEnd&&!b.params.centeredSlides?b.slideTo(b.slides.length-1,0,!1,!0):b.slideTo(b.activeIndex,0,!1,!0),t||a())}else b.params.autoHeight&&b.updateAutoHeight()},b.onResize=function(e){b.params.breakpoints&&b.setBreakpoint();var a=b.params.allowSwipeToPrev,t=b.params.allowSwipeToNext;b.params.allowSwipeToPrev=b.params.allowSwipeToNext=!0,b.updateContainerSize(),b.updateSlidesSize(),("auto"===b.params.slidesPerView||b.params.freeMode||e)&&b.updatePagination(),b.params.scrollbar&&b.scrollbar&&b.scrollbar.set(),b.controller&&b.controller.spline&&(b.controller.spline=void 0);var r=!1;if(b.params.freeMode){var i=Math.min(Math.max(b.translate,b.maxTranslate()),b.minTranslate());b.setWrapperTranslate(i),b.updateActiveIndex(),b.updateClasses(),b.params.autoHeight&&b.updateAutoHeight()}else b.updateClasses(),r=("auto"===b.params.slidesPerView||b.params.slidesPerView>1)&&b.isEnd&&!b.params.centeredSlides?b.slideTo(b.slides.length-1,0,!1,!0):b.slideTo(b.activeIndex,0,!1,!0);b.params.lazyLoading&&!r&&b.lazy&&b.lazy.load(),b.params.allowSwipeToPrev=a,b.params.allowSwipeToNext=t};var T=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?T=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(T=["MSPointerDown","MSPointerMove","MSPointerUp"]),b.touchEvents={start:b.support.touch||!b.params.simulateTouch?"touchstart":T[0],move:b.support.touch||!b.params.simulateTouch?"touchmove":T[1],end:b.support.touch||!b.params.simulateTouch?"touchend":T[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===b.params.touchEventsTarget?b.container:b.wrapper).addClass("swiper-wp8-"+b.params.direction),b.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===b.params.touchEventsTarget?b.container[0]:b.wrapper[0],s=b.support.touch?r:document,n=b.params.nested?!0:!1;b.browser.ie?(r[t](b.touchEvents.start,b.onTouchStart,!1),s[t](b.touchEvents.move,b.onTouchMove,n),s[t](b.touchEvents.end,b.onTouchEnd,!1)):(b.support.touch&&(r[t](b.touchEvents.start,b.onTouchStart,!1),r[t](b.touchEvents.move,b.onTouchMove,n),r[t](b.touchEvents.end,b.onTouchEnd,!1)),!i.simulateTouch||b.device.ios||b.device.android||(r[t]("mousedown",b.onTouchStart,!1),document[t]("mousemove",b.onTouchMove,n),document[t]("mouseup",b.onTouchEnd,!1))),window[t]("resize",b.onResize),b.params.nextButton&&b.nextButton&&b.nextButton.length>0&&(b.nextButton[a]("click",b.onClickNext),b.params.a11y&&b.a11y&&b.nextButton[a]("keydown",b.a11y.onEnterKey)),b.params.prevButton&&b.prevButton&&b.prevButton.length>0&&(b.prevButton[a]("click",b.onClickPrev),b.params.a11y&&b.a11y&&b.prevButton[a]("keydown",b.a11y.onEnterKey)),b.params.pagination&&b.params.paginationClickable&&(b.paginationContainer[a]("click","."+b.params.bulletClass,b.onClickIndex),b.params.a11y&&b.a11y&&b.paginationContainer[a]("keydown","."+b.params.bulletClass,b.a11y.onEnterKey)),(b.params.preventClicks||b.params.preventClicksPropagation)&&r[t]("click",b.preventClicks,!0)},b.attachEvents=function(){b.initEvents()},b.detachEvents=function(){b.initEvents(!0)},b.allowClick=!0,b.preventClicks=function(e){b.allowClick||(b.params.preventClicks&&e.preventDefault(),b.params.preventClicksPropagation&&b.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},b.onClickNext=function(e){e.preventDefault(),(!b.isEnd||b.params.loop)&&b.slideNext()},b.onClickPrev=function(e){e.preventDefault(),(!b.isBeginning||b.params.loop)&&b.slidePrev()},b.onClickIndex=function(e){e.preventDefault();var t=a(this).index()*b.params.slidesPerGroup;b.params.loop&&(t+=b.loopedSlides),b.slideTo(t)},b.updateClickedSlide=function(e){var t=o(e,"."+b.params.slideClass),r=!1;if(t)for(var i=0;ib.slides.length-b.loopedSlides+b.params.slidesPerView/2?(b.fixLoop(),n=b.wrapper.children("."+b.params.slideClass+'[data-swiper-slide-index="'+s+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){b.slideTo(n)},0)):b.slideTo(n):n>b.slides.length-b.params.slidesPerView?(b.fixLoop(),n=b.wrapper.children("."+b.params.slideClass+'[data-swiper-slide-index="'+s+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){b.slideTo(n)},0)):b.slideTo(n)}else b.slideTo(n)}};var S,C,z,M,E,P,k,I,L,B,D="input, select, textarea, button",H=Date.now(),A=[];b.animating=!1,b.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,O;if(b.onTouchStart=function(e){if(e.originalEvent&&(e=e.originalEvent),G="touchstart"===e.type,G||!("which"in e)||3!==e.which){if(b.params.noSwiping&&o(e,"."+b.params.noSwipingClass))return void(b.allowClick=!0);if(!b.params.swipeHandler||o(e,b.params.swipeHandler)){var t=b.touches.currentX="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,r=b.touches.currentY="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY;if(!(b.device.ios&&b.params.iOSEdgeSwipeDetection&&t<=b.params.iOSEdgeSwipeThreshold)){if(S=!0,C=!1,z=!0,E=void 0,O=void 0,b.touches.startX=t,b.touches.startY=r,M=Date.now(),b.allowClick=!0,b.updateContainerSize(),b.swipeDirection=void 0,b.params.threshold>0&&(I=!1),"touchstart"!==e.type){var i=!0;a(e.target).is(D)&&(i=!1),document.activeElement&&a(document.activeElement).is(D)&&document.activeElement.blur(),i&&e.preventDefault()}b.emit("onTouchStart",b,e)}}}},b.onTouchMove=function(e){if(e.originalEvent&&(e=e.originalEvent),!G||"mousemove"!==e.type){if(e.preventedByNestedSwiper)return b.touches.startX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,void(b.touches.startY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY);if(b.params.onlyExternal)return b.allowClick=!1,void(S&&(b.touches.startX=b.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,b.touches.startY=b.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,M=Date.now()));if(G&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(D))return C=!0,void(b.allowClick=!1);if(z&&b.emit("onTouchMove",b,e),!(e.targetTouches&&e.targetTouches.length>1)){if(b.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,b.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,"undefined"==typeof E){var t=180*Math.atan2(Math.abs(b.touches.currentY-b.touches.startY),Math.abs(b.touches.currentX-b.touches.startX))/Math.PI;E=b.isHorizontal()?t>b.params.touchAngle:90-t>b.params.touchAngle}if(E&&b.emit("onTouchMoveOpposite",b,e),"undefined"==typeof O&&b.browser.ieTouch&&(b.touches.currentX!==b.touches.startX||b.touches.currentY!==b.touches.startY)&&(O=!0),S){if(E)return void(S=!1);if(O||!b.browser.ieTouch){b.allowClick=!1,b.emit("onSliderMove",b,e),e.preventDefault(),b.params.touchMoveStopPropagation&&!b.params.nested&&e.stopPropagation(),C||(i.loop&&b.fixLoop(),k=b.getWrapperTranslate(),b.setWrapperTransition(0),b.animating&&b.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),b.params.autoplay&&b.autoplaying&&(b.params.autoplayDisableOnInteraction?b.stopAutoplay():b.pauseAutoplay()),B=!1,b.params.grabCursor&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grabbing",b.container[0].style.cursor="-moz-grabbin",b.container[0].style.cursor="grabbing")),C=!0;var r=b.touches.diff=b.isHorizontal()?b.touches.currentX-b.touches.startX:b.touches.currentY-b.touches.startY;r*=b.params.touchRatio,b.rtl&&(r=-r),b.swipeDirection=r>0?"prev":"next",P=r+k;var s=!0;if(r>0&&P>b.minTranslate()?(s=!1,b.params.resistance&&(P=b.minTranslate()-1+Math.pow(-b.minTranslate()+k+r,b.params.resistanceRatio))):0>r&&PP&&(P=k),!b.params.allowSwipeToPrev&&"prev"===b.swipeDirection&&P>k&&(P=k),b.params.followFinger){if(b.params.threshold>0){if(!(Math.abs(r)>b.params.threshold||I))return void(P=k);if(!I)return I=!0,b.touches.startX=b.touches.currentX,b.touches.startY=b.touches.currentY,P=k,void(b.touches.diff=b.isHorizontal()?b.touches.currentX-b.touches.startX:b.touches.currentY-b.touches.startY)}(b.params.freeMode||b.params.watchSlidesProgress)&&b.updateActiveIndex(),b.params.freeMode&&(0===A.length&&A.push({position:b.touches[b.isHorizontal()?"startX":"startY"],time:M}),A.push({position:b.touches[b.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),b.updateProgress(P),b.setWrapperTranslate(P)}}}}}},b.onTouchEnd=function(e){if(e.originalEvent&&(e=e.originalEvent),z&&b.emit("onTouchEnd",b,e),z=!1,S){b.params.grabCursor&&C&&S&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grab",b.container[0].style.cursor="-moz-grab",b.container[0].style.cursor="grab");var t=Date.now(),r=t-M;if(b.allowClick&&(b.updateClickedSlide(e),b.emit("onTap",b,e),300>r&&t-H>300&&(L&&clearTimeout(L),L=setTimeout(function(){b&&(b.params.paginationHide&&b.paginationContainer.length>0&&!a(e.target).hasClass(b.params.bulletClass)&&b.paginationContainer.toggleClass(b.params.paginationHiddenClass),b.emit("onClick",b,e))},300)),300>r&&300>t-H&&(L&&clearTimeout(L),b.emit("onDoubleTap",b,e))),H=Date.now(),setTimeout(function(){b&&(b.allowClick=!0)},0),!S||!C||!b.swipeDirection||0===b.touches.diff||P===k)return void(S=C=!1);S=C=!1;var i;if(i=b.params.followFinger?b.rtl?b.translate:-b.translate:-P,b.params.freeMode){if(i<-b.minTranslate())return void b.slideTo(b.activeIndex);if(i>-b.maxTranslate())return void(b.slides.length1){var s=A.pop(),n=A.pop(),o=s.position-n.position,l=s.time-n.time;b.velocity=o/l,b.velocity=b.velocity/2,Math.abs(b.velocity)150||(new window.Date).getTime()-s.time>300)&&(b.velocity=0)}else b.velocity=0;A.length=0;var p=1e3*b.params.freeModeMomentumRatio,d=b.velocity*p,u=b.translate+d;b.rtl&&(u=-u);var c,m=!1,h=20*Math.abs(b.velocity)*b.params.freeModeMomentumBounceRatio;if(ub.minTranslate())b.params.freeModeMomentumBounce?(u-b.minTranslate()>h&&(u=b.minTranslate()+h),c=b.minTranslate(),m=!0,B=!0):u=b.minTranslate();else if(b.params.freeModeSticky){var f,g=0;for(g=0;g-u){f=g;break}u=Math.abs(b.snapGrid[f]-u)=b.params.longSwipesMs)&&(b.updateProgress(),b.updateActiveIndex()))}var v,w=0,y=b.slidesSizesGrid[0];for(v=0;v=b.slidesGrid[v]&&i=b.slidesGrid[v]&&(w=v,y=b.slidesGrid[b.slidesGrid.length-1]-b.slidesGrid[b.slidesGrid.length-2]);var x=(i-b.slidesGrid[w])/y;if(r>b.params.longSwipesMs){if(!b.params.longSwipes)return void b.slideTo(b.activeIndex);"next"===b.swipeDirection&&(x>=b.params.longSwipesRatio?b.slideTo(w+b.params.slidesPerGroup):b.slideTo(w)),"prev"===b.swipeDirection&&(x>1-b.params.longSwipesRatio?b.slideTo(w+b.params.slidesPerGroup):b.slideTo(w))}else{if(!b.params.shortSwipes)return void b.slideTo(b.activeIndex);"next"===b.swipeDirection&&b.slideTo(w+b.params.slidesPerGroup),"prev"===b.swipeDirection&&b.slideTo(w)}}},b._slideTo=function(e,a){return b.slideTo(e,a,!0,!0)},b.slideTo=function(e,a,t,r){"undefined"==typeof t&&(t=!0),"undefined"==typeof e&&(e=0),0>e&&(e=0),b.snapIndex=Math.floor(e/b.params.slidesPerGroup),b.snapIndex>=b.snapGrid.length&&(b.snapIndex=b.snapGrid.length-1);var i=-b.snapGrid[b.snapIndex];b.params.autoplay&&b.autoplaying&&(r||!b.params.autoplayDisableOnInteraction?b.pauseAutoplay(a):b.stopAutoplay()),b.updateProgress(i);for(var s=0;s=Math.floor(100*b.slidesGrid[s])&&(e=s);return!b.params.allowSwipeToNext&&ib.translate&&i>b.maxTranslate()&&(b.activeIndex||0)!==e?!1:("undefined"==typeof a&&(a=b.params.speed),b.previousIndex=b.activeIndex||0,b.activeIndex=e,b.rtl&&-i===b.translate||!b.rtl&&i===b.translate?(b.params.autoHeight&&b.updateAutoHeight(),b.updateClasses(),"slide"!==b.params.effect&&b.setWrapperTranslate(i),!1):(b.updateClasses(),b.onTransitionStart(t),0===a?(b.setWrapperTranslate(i),b.setWrapperTransition(0),b.onTransitionEnd(t)):(b.setWrapperTranslate(i),b.setWrapperTransition(a),b.animating||(b.animating=!0,b.wrapper.transitionEnd(function(){b&&b.onTransitionEnd(t)}))),!0))},b.onTransitionStart=function(e){"undefined"==typeof e&&(e=!0),b.params.autoHeight&&b.updateAutoHeight(),b.lazy&&b.lazy.onTransitionStart(),e&&(b.emit("onTransitionStart",b),b.activeIndex!==b.previousIndex&&(b.emit("onSlideChangeStart",b),b.activeIndex>b.previousIndex?b.emit("onSlideNextStart",b):b.emit("onSlidePrevStart",b)))},b.onTransitionEnd=function(e){b.animating=!1,b.setWrapperTransition(0),"undefined"==typeof e&&(e=!0),b.lazy&&b.lazy.onTransitionEnd(),e&&(b.emit("onTransitionEnd",b),b.activeIndex!==b.previousIndex&&(b.emit("onSlideChangeEnd",b),b.activeIndex>b.previousIndex?b.emit("onSlideNextEnd",b):b.emit("onSlidePrevEnd",b))),b.params.hashnav&&b.hashnav&&b.hashnav.setHash()},b.slideNext=function(e,a,t){if(b.params.loop){if(b.animating)return!1;b.fixLoop();b.container[0].clientLeft;return b.slideTo(b.activeIndex+b.params.slidesPerGroup,a,e,t)}return b.slideTo(b.activeIndex+b.params.slidesPerGroup,a,e,t)},b._slideNext=function(e){return b.slideNext(!0,e,!0)},b.slidePrev=function(e,a,t){if(b.params.loop){if(b.animating)return!1;b.fixLoop();b.container[0].clientLeft;return b.slideTo(b.activeIndex-1,a,e,t)}return b.slideTo(b.activeIndex-1,a,e,t)},b._slidePrev=function(e){return b.slidePrev(!0,e,!0)},b.slideReset=function(e,a,t){return b.slideTo(b.activeIndex,a,e)},b.setWrapperTransition=function(e,a){b.wrapper.transition(e),"slide"!==b.params.effect&&b.effects[b.params.effect]&&b.effects[b.params.effect].setTransition(e),b.params.parallax&&b.parallax&&b.parallax.setTransition(e),b.params.scrollbar&&b.scrollbar&&b.scrollbar.setTransition(e),b.params.control&&b.controller&&b.controller.setTransition(e,a),b.emit("onSetTransition",b,e)},b.setWrapperTranslate=function(e,a,t){var r=0,i=0,n=0;b.isHorizontal()?r=b.rtl?-e:e:i=e,b.params.roundLengths&&(r=s(r),i=s(i)),b.params.virtualTranslate||(b.support.transforms3d?b.wrapper.transform("translate3d("+r+"px, "+i+"px, "+n+"px)"):b.wrapper.transform("translate("+r+"px, "+i+"px)")),b.translate=b.isHorizontal()?r:i;var o,l=b.maxTranslate()-b.minTranslate();o=0===l?0:(e-b.minTranslate())/l,o!==b.progress&&b.updateProgress(e),a&&b.updateActiveIndex(),"slide"!==b.params.effect&&b.effects[b.params.effect]&&b.effects[b.params.effect].setTranslate(b.translate),b.params.parallax&&b.parallax&&b.parallax.setTranslate(b.translate),b.params.scrollbar&&b.scrollbar&&b.scrollbar.setTranslate(b.translate),b.params.control&&b.controller&&b.controller.setTranslate(b.translate,t),b.emit("onSetTranslate",b,b.translate)},b.getTranslate=function(e,a){var t,r,i,s;return"undefined"==typeof a&&(a="x"),b.params.virtualTranslate?b.rtl?-b.translate:b.translate:(i=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(r=i.transform||i.webkitTransform,r.split(",").length>6&&(r=r.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),s=new window.WebKitCSSMatrix("none"===r?"":r)):(s=i.MozTransform||i.OTransform||i.MsTransform||i.msTransform||i.transform||i.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=s.toString().split(",")),"x"===a&&(r=window.WebKitCSSMatrix?s.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(r=window.WebKitCSSMatrix?s.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),b.rtl&&r&&(r=-r),r||0)},b.getWrapperTranslate=function(e){return"undefined"==typeof e&&(e=b.isHorizontal()?"x":"y"),b.getTranslate(b.wrapper[0],e)},b.observers=[],b.initObservers=function(){if(b.params.observeParents)for(var e=b.container.parents(),a=0;ae.length&&(b.loopedSlides=e.length);var t,r=[],i=[];for(e.each(function(t,s){var n=a(this);t=e.length-b.loopedSlides&&r.push(s),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)b.wrapper.prepend(a(r[t].cloneNode(!0)).addClass(b.params.slideDuplicateClass))},b.destroyLoop=function(){b.wrapper.children("."+b.params.slideClass+"."+b.params.slideDuplicateClass).remove(),b.slides.removeAttr("data-swiper-slide-index")},b.reLoop=function(e){var a=b.activeIndex-b.loopedSlides;b.destroyLoop(),b.createLoop(),b.updateSlidesSize(),e&&b.slideTo(a+b.loopedSlides,0,!1)},b.fixLoop=function(){var e;b.activeIndex=2*b.loopedSlides||b.activeIndex>b.slides.length-2*b.params.slidesPerView)&&(e=-b.slides.length+b.activeIndex+b.loopedSlides,e+=b.loopedSlides,b.slideTo(e,0,!1,!0))},b.appendSlide=function(e){if(b.params.loop&&b.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;aa&&t--;t=Math.max(t,0)}else a=e,b.slides[a]&&b.slides.eq(a).remove(),t>a&&t--,t=Math.max(t,0);b.params.loop&&b.createLoop(),b.params.observer&&b.support.observer||b.update(!0),b.params.loop?b.slideTo(t+b.loopedSlides,0,!1):b.slideTo(t,0,!1)},b.removeAllSlides=function(){for(var e=[],a=0;a'),t.append(d)),0===u.length&&(u=a(''),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-r,0)),u.length&&(u[0].style.opacity=Math.max(r,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){if(b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),b.params.virtualTranslate&&0!==e){var t=!1;b.slides.eq(b.activeIndex).transitionEnd(function(){if(!t&&b&&a(this).hasClass(b.params.slideActiveClass)){t=!0,b.animating=!1;for(var e=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],r=0;r'),b.wrapper.append(e)),e.css({height:b.width+"px"})):(e=b.container.find(".swiper-cube-shadow"),0===e.length&&(e=a(''),b.container.append(e))));for(var r=0;r=o&&o>-1&&(t=90*r+90*o,b.rtl&&(t=90*-r-90*o)),i.transform(u),b.params.cube.slideShadows){var c=b.isHorizontal()?i.find(".swiper-slide-shadow-left"):i.find(".swiper-slide-shadow-top"),m=b.isHorizontal()?i.find(".swiper-slide-shadow-right"):i.find(".swiper-slide-shadow-bottom");0===c.length&&(c=a(''),i.append(c)),0===m.length&&(m=a(''),i.append(m)),c.length&&(c[0].style.opacity=Math.max(-o,0)),m.length&&(m[0].style.opacity=Math.max(o,0))}}if(b.wrapper.css({"-webkit-transform-origin":"50% 50% -"+b.size/2+"px","-moz-transform-origin":"50% 50% -"+b.size/2+"px","-ms-transform-origin":"50% 50% -"+b.size/2+"px","transform-origin":"50% 50% -"+b.size/2+"px"}),b.params.cube.shadow)if(b.isHorizontal())e.transform("translate3d(0px, "+(b.width/2+b.params.cube.shadowOffset)+"px, "+-b.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+b.params.cube.shadowScale+")");else{var h=Math.abs(t)-90*Math.floor(Math.abs(t)/90),f=1.5-(Math.sin(2*h*Math.PI/360)/2+Math.cos(2*h*Math.PI/360)/2),g=b.params.cube.shadowScale,v=b.params.cube.shadowScale/f,w=b.params.cube.shadowOffset;e.transform("scale3d("+g+", 1, "+v+") translate3d(0px, "+(b.height/2+w)+"px, "+-b.height/2/v+"px) rotateX(-90deg)")}var y=b.isSafari||b.isUiWebView?-b.size/2:0;b.wrapper.transform("translate3d(0px,0,"+y+"px) rotateX("+(b.isHorizontal()?0:t)+"deg) rotateY("+(b.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),b.params.cube.shadow&&!b.isHorizontal()&&b.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var e=b.translate,t=b.isHorizontal()?-e+b.width/2:-e+b.height/2,r=b.isHorizontal()?b.params.coverflow.rotate:-b.params.coverflow.rotate,i=b.params.coverflow.depth,s=0,n=b.slides.length;n>s;s++){var o=b.slides.eq(s),l=b.slidesSizesGrid[s],p=o[0].swiperSlideOffset,d=(t-p-l/2)/l*b.params.coverflow.modifier,u=b.isHorizontal()?r*d:0,c=b.isHorizontal()?0:r*d,m=-i*Math.abs(d),h=b.isHorizontal()?0:b.params.coverflow.stretch*d,f=b.isHorizontal()?b.params.coverflow.stretch*d:0;Math.abs(f)<.001&&(f=0),Math.abs(h)<.001&&(h=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0),Math.abs(c)<.001&&(c=0);var g="translate3d("+f+"px,"+h+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(g),o[0].style.zIndex=-Math.abs(Math.round(d))+1,b.params.coverflow.slideShadows){var v=b.isHorizontal()?o.find(".swiper-slide-shadow-left"):o.find(".swiper-slide-shadow-top"),w=b.isHorizontal()?o.find(".swiper-slide-shadow-right"):o.find(".swiper-slide-shadow-bottom");0===v.length&&(v=a(''),o.append(v)),0===w.length&&(w=a(''),o.append(w)),v.length&&(v[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(b.browser.ie){var y=b.wrapper[0].style;y.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},b.lazy={initialImageLoaded:!1,loadImageInSlide:function(e,t){if("undefined"!=typeof e&&("undefined"==typeof t&&(t=!0),0!==b.slides.length)){var r=b.slides.eq(e),i=r.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!r.hasClass("swiper-lazy")||r.hasClass("swiper-lazy-loaded")||r.hasClass("swiper-lazy-loading")||(i=i.add(r[0])),0!==i.length&&i.each(function(){var e=a(this);e.addClass("swiper-lazy-loading");var i=e.attr("data-background"),s=e.attr("data-src"),n=e.attr("data-srcset");b.loadImage(e[0],s||i,n,!1,function(){if(i?(e.css("background-image",'url("'+i+'")'),e.removeAttr("data-background")):(n&&(e.attr("srcset",n),e.removeAttr("data-srcset")),s&&(e.attr("src",s),e.removeAttr("data-src"))),e.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),r.find(".swiper-lazy-preloader, .preloader").remove(),b.params.loop&&t){var a=r.attr("data-swiper-slide-index");if(r.hasClass(b.params.slideDuplicateClass)){var o=b.wrapper.children('[data-swiper-slide-index="'+a+'"]:not(.'+b.params.slideDuplicateClass+")");b.lazy.loadImageInSlide(o.index(),!1)}else{var l=b.wrapper.children("."+b.params.slideDuplicateClass+'[data-swiper-slide-index="'+a+'"]');b.lazy.loadImageInSlide(l.index(),!1)}}b.emit("onLazyImageReady",b,r[0],e[0])}),b.emit("onLazyImageLoad",b,r[0],e[0])})}},load:function(){var e;if(b.params.watchSlidesVisibility)b.wrapper.children("."+b.params.slideVisibleClass).each(function(){b.lazy.loadImageInSlide(a(this).index())});else if(b.params.slidesPerView>1)for(e=b.activeIndex;e1||b.params.lazyLoadingInPrevNextAmount&&b.params.lazyLoadingInPrevNextAmount>1){var t=b.params.lazyLoadingInPrevNextAmount,r=b.params.slidesPerView,i=Math.min(b.activeIndex+r+Math.max(t,r),b.slides.length),s=Math.max(b.activeIndex-Math.max(r,t),0);for(e=b.activeIndex+b.params.slidesPerView;i>e;e++)b.slides[e]&&b.lazy.loadImageInSlide(e);for(e=s;e0&&b.lazy.loadImageInSlide(n.index());var o=b.wrapper.children("."+b.params.slidePrevClass);o.length>0&&b.lazy.loadImageInSlide(o.index())}},onTransitionStart:function(){b.params.lazyLoading&&(b.params.lazyLoadingOnTransitionStart||!b.params.lazyLoadingOnTransitionStart&&!b.lazy.initialImageLoaded)&&b.lazy.load()},onTransitionEnd:function(){b.params.lazyLoading&&!b.params.lazyLoadingOnTransitionStart&&b.lazy.load()}},b.scrollbar={isTouched:!1,setDragPosition:function(e){var a=b.scrollbar,t=b.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,r=t-a.track.offset()[b.isHorizontal()?"left":"top"]-a.dragSize/2,i=-b.minTranslate()*a.moveDivider,s=-b.maxTranslate()*a.moveDivider;i>r?r=i:r>s&&(r=s),r=-r/a.moveDivider,b.updateProgress(r),b.setWrapperTranslate(r,!0)},dragStart:function(e){var a=b.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),b.params.scrollbarHide&&a.track.css("opacity",1),b.wrapper.transition(100),a.drag.transition(100),b.emit("onScrollbarDragStart",b)},dragMove:function(e){var a=b.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),b.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),b.emit("onScrollbarDragMove",b))},dragEnd:function(e){var a=b.scrollbar;a.isTouched&&(a.isTouched=!1,b.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),b.emit("onScrollbarDragEnd",b),b.params.scrollbarSnapOnRelease&&b.slideReset())},enableDraggable:function(){var e=b.scrollbar,t=b.support.touch?e.track:document;a(e.track).on(b.touchEvents.start,e.dragStart),a(t).on(b.touchEvents.move,e.dragMove),a(t).on(b.touchEvents.end,e.dragEnd)},disableDraggable:function(){var e=b.scrollbar,t=b.support.touch?e.track:document;a(e.track).off(b.touchEvents.start,e.dragStart),a(t).off(b.touchEvents.move,e.dragMove),a(t).off(b.touchEvents.end,e.dragEnd)},set:function(){if(b.params.scrollbar){var e=b.scrollbar;e.track=a(b.params.scrollbar),b.params.uniqueNavElements&&"string"==typeof b.params.scrollbar&&e.track.length>1&&1===b.container.find(b.params.scrollbar).length&&(e.track=b.container.find(b.params.scrollbar)),e.drag=e.track.find(".swiper-scrollbar-drag"),0===e.drag.length&&(e.drag=a(''),e.track.append(e.drag)),e.drag[0].style.width="",e.drag[0].style.height="",e.trackSize=b.isHorizontal()?e.track[0].offsetWidth:e.track[0].offsetHeight,e.divider=b.size/b.virtualSize,e.moveDivider=e.divider*(e.trackSize/b.size),e.dragSize=e.trackSize*e.divider,b.isHorizontal()?e.drag[0].style.width=e.dragSize+"px":e.drag[0].style.height=e.dragSize+"px",e.divider>=1?e.track[0].style.display="none":e.track[0].style.display="",b.params.scrollbarHide&&(e.track[0].style.opacity=0)}},setTranslate:function(){if(b.params.scrollbar){var e,a=b.scrollbar,t=(b.translate||0,a.dragSize);e=(a.trackSize-a.dragSize)*b.progress,b.rtl&&b.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):0>e?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),b.isHorizontal()?(b.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(b.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),b.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){b.params.scrollbar&&b.scrollbar.drag.transition(e)}},b.controller={LinearSpline:function(e,a){this.x=e,this.y=a,this.lastIndex=e.length-1;var t,r;this.x.length;this.interpolate=function(e){return e?(r=i(this.x,e),t=r-1,(e-this.x[t])*(this.y[r]-this.y[t])/(this.x[r]-this.x[t])+this.y[t]):0};var i=function(){var e,a,t;return function(r,i){for(a=-1,e=r.length;e-a>1;)r[t=e+a>>1]<=i?a=t:e=t;return e}}()},getInterpolateFunction:function(e){b.controller.spline||(b.controller.spline=b.params.loop?new b.controller.LinearSpline(b.slidesGrid,e.slidesGrid):new b.controller.LinearSpline(b.snapGrid,e.snapGrid))},setTranslate:function(e,a){function r(a){e=a.rtl&&"horizontal"===a.params.direction?-b.translate:b.translate,"slide"===b.params.controlBy&&(b.controller.getInterpolateFunction(a),s=-b.controller.spline.interpolate(-e)),s&&"container"!==b.params.controlBy||(i=(a.maxTranslate()-a.minTranslate())/(b.maxTranslate()-b.minTranslate()),s=(e-b.minTranslate())*i+a.minTranslate()),b.params.controlInverse&&(s=a.maxTranslate()-s),a.updateProgress(s),a.setWrapperTranslate(s,!1,b),a.updateActiveIndex()}var i,s,n=b.params.control;if(b.isArray(n))for(var o=0;ot;t++){var i=b.slides.eq(t),s=i.attr("data-hash");if(s===e&&!i.hasClass(b.params.slideDuplicateClass)){var n=i.index();b.slideTo(n,a,b.params.runCallbacksOnInit,!0)}}}},setHash:function(){b.hashnav.initialized&&b.params.hashnav&&(document.location.hash=b.slides.eq(b.activeIndex).attr("data-hash")||"")}},b.disableKeyboardControl=function(){b.params.keyboardControl=!1,a(document).off("keydown",p)},b.enableKeyboardControl=function(){b.params.keyboardControl=!0,a(document).on("keydown",p)},b.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},b.params.mousewheelControl){try{new window.WheelEvent("wheel"),b.mousewheel.event="wheel"}catch(N){(window.WheelEvent||b.container[0]&&"wheel"in b.container[0])&&(b.mousewheel.event="wheel")}!b.mousewheel.event&&window.WheelEvent,b.mousewheel.event||void 0===document.onmousewheel||(b.mousewheel.event="mousewheel"),b.mousewheel.event||(b.mousewheel.event="DOMMouseScroll")}b.disableMousewheelControl=function(){return b.mousewheel.event?(b.container.off(b.mousewheel.event,d),!0):!1},b.enableMousewheelControl=function(){return b.mousewheel.event?(b.container.on(b.mousewheel.event,d),!0):!1},b.parallax={setTranslate:function(){b.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){u(this,b.progress)}),b.slides.each(function(){var e=a(this);e.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var a=Math.min(Math.max(e[0].progress,-1),1);u(this,a)})})},setTransition:function(e){"undefined"==typeof e&&(e=b.params.speed),b.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=a(this),r=parseInt(t.attr("data-swiper-parallax-duration"),10)||e;0===e&&(r=0),t.transition(r)})}},b._plugins=[];for(var R in b.plugins){var W=b.plugins[R](b,b.params[R]);W&&b._plugins.push(W)}return b.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=b.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){b.params.nextButton&&b.nextButton&&b.nextButton.length>0&&(b.a11y.makeFocusable(b.nextButton),b.a11y.addRole(b.nextButton,"button"),b.a11y.addLabel(b.nextButton,b.params.nextSlideMessage)),b.params.prevButton&&b.prevButton&&b.prevButton.length>0&&(b.a11y.makeFocusable(b.prevButton),b.a11y.addRole(b.prevButton,"button"),b.a11y.addLabel(b.prevButton,b.params.prevSlideMessage)),a(b.container).append(b.a11y.liveRegion)},initPagination:function(){b.params.pagination&&b.params.paginationClickable&&b.bullets&&b.bullets.length&&b.bullets.each(function(){var e=a(this);b.a11y.makeFocusable(e),b.a11y.addRole(e,"button"),b.a11y.addLabel(e,b.params.paginationBulletMessage.replace(/{{index}}/,e.index()+1))})},destroy:function(){b.a11y.liveRegion&&b.a11y.liveRegion.length>0&&b.a11y.liveRegion.remove()}},b.init=function(){b.params.loop&&b.createLoop(),b.updateContainerSize(),b.updateSlidesSize(),b.updatePagination(),b.params.scrollbar&&b.scrollbar&&(b.scrollbar.set(),b.params.scrollbarDraggable&&b.scrollbar.enableDraggable()),"slide"!==b.params.effect&&b.effects[b.params.effect]&&(b.params.loop||b.updateProgress(),b.effects[b.params.effect].setTranslate()),b.params.loop?b.slideTo(b.params.initialSlide+b.loopedSlides,0,b.params.runCallbacksOnInit):(b.slideTo(b.params.initialSlide,0,b.params.runCallbacksOnInit),0===b.params.initialSlide&&(b.parallax&&b.params.parallax&&b.parallax.setTranslate(),b.lazy&&b.params.lazyLoading&&(b.lazy.load(),b.lazy.initialImageLoaded=!0))),b.attachEvents(),b.params.observer&&b.support.observer&&b.initObservers(),b.params.preloadImages&&!b.params.lazyLoading&&b.preloadImages(),b.params.autoplay&&b.startAutoplay(),b.params.keyboardControl&&b.enableKeyboardControl&&b.enableKeyboardControl(),b.params.mousewheelControl&&b.enableMousewheelControl&&b.enableMousewheelControl(),
17 | b.params.hashnav&&b.hashnav&&b.hashnav.init(),b.params.a11y&&b.a11y&&b.a11y.init(),b.emit("onInit",b)},b.cleanupStyles=function(){b.container.removeClass(b.classNames.join(" ")).removeAttr("style"),b.wrapper.removeAttr("style"),b.slides&&b.slides.length&&b.slides.removeClass([b.params.slideVisibleClass,b.params.slideActiveClass,b.params.slideNextClass,b.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),b.paginationContainer&&b.paginationContainer.length&&b.paginationContainer.removeClass(b.params.paginationHiddenClass),b.bullets&&b.bullets.length&&b.bullets.removeClass(b.params.bulletActiveClass),b.params.prevButton&&a(b.params.prevButton).removeClass(b.params.buttonDisabledClass),b.params.nextButton&&a(b.params.nextButton).removeClass(b.params.buttonDisabledClass),b.params.scrollbar&&b.scrollbar&&(b.scrollbar.track&&b.scrollbar.track.length&&b.scrollbar.track.removeAttr("style"),b.scrollbar.drag&&b.scrollbar.drag.length&&b.scrollbar.drag.removeAttr("style"))},b.destroy=function(e,a){b.detachEvents(),b.stopAutoplay(),b.params.scrollbar&&b.scrollbar&&b.params.scrollbarDraggable&&b.scrollbar.disableDraggable(),b.params.loop&&b.destroyLoop(),a&&b.cleanupStyles(),b.disconnectObservers(),b.params.keyboardControl&&b.disableKeyboardControl&&b.disableKeyboardControl(),b.params.mousewheelControl&&b.disableMousewheelControl&&b.disableMousewheelControl(),b.params.a11y&&b.a11y&&b.a11y.destroy(),b.emit("onDestroy"),e!==!1&&(b=null)},b.init(),b}};t.prototype={isSafari:function(){var e=navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1},device:function(){var e=navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),i=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||i||r,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t=0&&o.indexOf(">")>=0){var l="div";for(0===o.indexOf(":~]/)?(t||document).querySelectorAll(a):[document.getElementById(a.split("#")[1])],i=0;i0&&a[0].nodeType)for(i=0;i0?parseFloat(this.css("width")):null},outerWidth:function(e){return this.length>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null},height:function(){return this[0]===window?window.innerHeight:this.length>0?parseFloat(this.css("height")):null},outerHeight:function(e){return this.length>0?e?this[0].offsetHeight+parseFloat(this.css("margin-top"))+parseFloat(this.css("margin-bottom")):this[0].offsetHeight:null},offset:function(){if(this.length>0){var e=this[0],a=e.getBoundingClientRect(),t=document.body,r=e.clientTop||t.clientTop||0,i=e.clientLeft||t.clientLeft||0,s=window.pageYOffset||e.scrollTop,n=window.pageXOffset||e.scrollLeft;return{top:a.top+s-r,left:a.left+n-i}}return null},css:function(e,a){var t;if(1===arguments.length){if("string"!=typeof e){for(t=0;tr-1?new e([]):0>a?(t=r+a,new e(0>t?[]:[this[t]])):new e([this[a]])},append:function(a){var t,r;for(t=0;t=0;r--)this[t].insertBefore(i.childNodes[r],this[t].childNodes[0])}else if(a instanceof e)for(r=0;r1)for(var i=0;i1)for(var i=0;i0?t?this[0].nextElementSibling&&a(this[0].nextElementSibling).is(t)?[this[0].nextElementSibling]:[]:this[0].nextElementSibling?[this[0].nextElementSibling]:[]:[])},nextAll:function(t){var r=[],i=this[0];if(!i)return new e([]);for(;i.nextElementSibling;){var s=i.nextElementSibling;t?a(s).is(t)&&r.push(s):r.push(s),i=s}return new e(r)},prev:function(t){return new e(this.length>0?t?this[0].previousElementSibling&&a(this[0].previousElementSibling).is(t)?[this[0].previousElementSibling]:[]:this[0].previousElementSibling?[this[0].previousElementSibling]:[]:[])},prevAll:function(t){var r=[],i=this[0];if(!i)return new e([]);for(;i.previousElementSibling;){var s=i.previousElementSibling;t?a(s).is(t)&&r.push(s):r.push(s),i=s}return new e(r)},parent:function(e){for(var t=[],r=0;r
2 |
3 |
4 |
5 |
6 | JD_demo
7 |
12 |
13 |
14 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | JD_demo
7 |
12 |
13 |
14 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/index.jsx:
--------------------------------------------------------------------------------
1 |
2 | require('./app/lib/common.css');
3 | import React from 'react';
4 | import ReactDOM from 'react-dom';
5 |
6 | import Search from './app/components/search.jsx';
7 | import Header from './app/components/header.jsx';
8 | import Otherapp from './app/components/otherapp.jsx';
9 | import Spike from './app/components/spike.jsx';
10 | import More from './app/components/more.jsx';
11 | import Like from './app/components/like.jsx';
12 |
13 | ReactDOM.render(
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
,
22 | document.querySelector("#myApp")
23 | );
24 |
--------------------------------------------------------------------------------
/jd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/jd.png
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-webpack-babel",
3 | "version": "0.0.2",
4 | "description": "React Webpack Babel Starter Kit",
5 | "main": "''",
6 | "scripts": {
7 | "build": "NODE_ENV=production webpack -p --config webpack.production.config.js --progress --profile --colors",
8 | "dev": "webpack-dev-server --progress --profile --colors --hot"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "https://github.com/alicoding/react-webpack-babel"
13 | },
14 | "keywords": [
15 | "React",
16 | "Webpack",
17 | "Babel",
18 | "Starter",
19 | "template"
20 | ],
21 | "author": "Ali Al Dallal",
22 | "license": "MIT",
23 | "bugs": {
24 | "url": "https://github.com/alicoding/react-webpack-babel/issues"
25 | },
26 | "homepage": "https://github.com/alicoding/react-webpack-babel#readme",
27 | "dependencies": {
28 | "json-loader": "^0.5.4",
29 | "json5-loader": "^0.6.0",
30 | "jsx-loader": "^0.13.2",
31 | "node-libs-browser": "1.0.0",
32 | "react": "15.0.1",
33 | "react-dom": "15.0.1"
34 | },
35 | "devDependencies": {
36 | "babel-core": "6.7.7",
37 | "babel-loader": "6.2.4",
38 | "babel-preset-es2015": "6.6.0",
39 | "babel-preset-react": "6.5.0",
40 | "copy-webpack-plugin": "^3.0.1",
41 | "css-loader": "0.23.1",
42 | "file-loader": "0.8.5",
43 | "react-hot-loader": "1.3.0",
44 | "style-loader": "0.13.1",
45 | "url-loader": "0.5.7",
46 | "webpack": "1.13.0",
47 | "webpack-dev-server": "1.14.1"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/server/app.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var path = require('path');
3 | var favicon = require('serve-favicon');
4 | var logger = require('morgan');
5 | var cookieParser = require('cookie-parser');
6 | var bodyParser = require('body-parser');
7 |
8 | var data = require('./routes/data');
9 |
10 |
11 | var app = express();
12 |
13 | // view engine setup
14 | app.set('views', path.join(__dirname, 'views'));
15 | app.set('view engine', 'ejs');
16 |
17 | // uncomment after placing your favicon in /public
18 | //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
19 | app.use(logger('dev'));
20 | app.use(bodyParser.json());
21 | app.use(bodyParser.urlencoded({ extended: false }));
22 | app.use(cookieParser());
23 | app.use(express.static(path.join(__dirname, 'public')));
24 |
25 | app.use("/data/swiper", data.swiper);
26 | app.use("/data/otherapp", data.otherapp);
27 | app.use("/data/spike", data.spike);
28 | app.use("/data/more", data.more);
29 | app.use("/data/like", data.like);
30 |
31 |
32 | // catch 404 and forward to error handler
33 | app.use(function(req, res, next) {
34 | var err = new Error('Not Found');
35 | err.status = 404;
36 | next(err);
37 | });
38 |
39 | // error handlers
40 |
41 | // development error handler
42 | // will print stacktrace
43 | if (app.get('env') === 'development') {
44 | app.use(function(err, req, res, next) {
45 | res.status(err.status || 500);
46 | res.render('error', {
47 | message: err.message,
48 | error: err
49 | });
50 | });
51 | }
52 |
53 | // production error handler
54 | // no stacktraces leaked to user
55 | app.use(function(err, req, res, next) {
56 | res.status(err.status || 500);
57 | res.render('error', {
58 | message: err.message,
59 | error: {}
60 | });
61 | });
62 |
63 | module.exports = app;
64 |
--------------------------------------------------------------------------------
/server/bin/www:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Module dependencies.
5 | */
6 |
7 | var app = require('../app');
8 | var debug = require('debug')('server:server');
9 | var http = require('http');
10 |
11 | /**
12 | * Get port from environment and store in Express.
13 | */
14 |
15 | var port = normalizePort(process.env.PORT || '3000');
16 | app.set('port', port);
17 |
18 | /**
19 | * Create HTTP server.
20 | */
21 |
22 | var server = http.createServer(app);
23 |
24 | /**
25 | * Listen on provided port, on all network interfaces.
26 | */
27 |
28 | server.listen(port);
29 | server.on('error', onError);
30 | server.on('listening', onListening);
31 |
32 | /**
33 | * Normalize a port into a number, string, or false.
34 | */
35 |
36 | function normalizePort(val) {
37 | var port = parseInt(val, 10);
38 |
39 | if (isNaN(port)) {
40 | // named pipe
41 | return val;
42 | }
43 |
44 | if (port >= 0) {
45 | // port number
46 | return port;
47 | }
48 |
49 | return false;
50 | }
51 |
52 | /**
53 | * Event listener for HTTP server "error" event.
54 | */
55 |
56 | function onError(error) {
57 | if (error.syscall !== 'listen') {
58 | throw error;
59 | }
60 |
61 | var bind = typeof port === 'string'
62 | ? 'Pipe ' + port
63 | : 'Port ' + port;
64 |
65 | // handle specific listen errors with friendly messages
66 | switch (error.code) {
67 | case 'EACCES':
68 | console.error(bind + ' requires elevated privileges');
69 | process.exit(1);
70 | break;
71 | case 'EADDRINUSE':
72 | console.error(bind + ' is already in use');
73 | process.exit(1);
74 | break;
75 | default:
76 | throw error;
77 | }
78 | }
79 |
80 | /**
81 | * Event listener for HTTP server "listening" event.
82 | */
83 |
84 | function onListening() {
85 | var addr = server.address();
86 | var bind = typeof addr === 'string'
87 | ? 'pipe ' + addr
88 | : 'port ' + addr.port;
89 | debug('Listening on ' + bind);
90 | console.log("server running on localhost:3000");
91 | }
92 |
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "node --use-strict ./bin/www"
7 | },
8 | "dependencies": {
9 | "body-parser": "~1.15.1",
10 | "cookie-parser": "~1.4.3",
11 | "debug": "~2.2.0",
12 | "ejs": "~2.4.1",
13 | "express": "~4.13.4",
14 | "morgan": "~1.7.0",
15 | "serve-favicon": "~2.3.0"
16 | },
17 | "devDependencies": {
18 | "url": "^0.11.0"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/server/public/database/database.json:
--------------------------------------------------------------------------------
1 | {
2 | "otherapp": [
3 | {
4 | "title": "京东超市",
5 | "url": "http://h5.m.jd.com/active/2hqsQcyM5bEUVSStkN3BwrBHqVLd/index.html?has_native=1"
6 | },
7 | {
8 | "title": "全球购",
9 | "url": "http://jdw.jd.hk/?vs=m"
10 | },
11 | {
12 | "title": "充值中心",
13 | "url": "http://newcz.m.jd.com"
14 | },
15 | {
16 | "title": "服装城",
17 | "url": "http://h5.m.jd.com/active/3GTca2WsjgRdohGtJCUnWB3bDs8o/index.html"
18 | },
19 | {
20 | "title": "京东金融",
21 | "url": "http://h5.m.jd.com/active/2hqsQcyM5bEUVSStkN3BwrBHqVLd/index.html?has_native=1"
22 | },
23 | {
24 | "title": "领券",
25 | "url": "http://coupon.m.jd.com/center/getCouponCenter.action"
26 | },
27 | {
28 | "title": "物流查询",
29 | "url": "http://home.m.jd.com/user/userAllOrderList.action"
30 | },
31 | {
32 | "title": "京东超市",
33 | "url": "http://home.m.jd.com/myJd/myFocus/focusWare.action"
34 | }
35 |
36 | ],
37 | "spike": {
38 | "store": [
39 | {
40 | "url": "http://ms.m.jd.com/seckill/seckillList?wareId=2537829",
41 | "sprice": 299,
42 | "price": 399
43 | },
44 | {
45 | "url": "http://ms.m.jd.com/seckill/seckillList?wareId=2537829",
46 | "sprice": 3999,
47 | "price": 4999
48 | },
49 | {
50 | "url": "http://ms.m.jd.com/seckill/seckillList?wareId=2537829",
51 | "sprice": 1099,
52 | "price": 1299
53 | }
54 | ],
55 | "times": 3680,
56 | "more": "http://ms.m.jd.com/seckill/seckillList?wareId=2537829"
57 | },
58 | "more": ["http://h5.m.jd.com/active/2hqsQcyM5bEUVSStkN3BwrBHqVLd/index.html?has_native=1", "http://h5.m.jd.com/active/2hqsQcyM5bEUVSStkN3BwrBHqVLd/index.html?has_native=1", "http://h5.m.jd.com/active/2hqsQcyM5bEUVSStkN3BwrBHqVLd/index.html?has_native=1", "http://h5.m.jd.com/active/2hqsQcyM5bEUVSStkN3BwrBHqVLd/index.html?has_native=1", "http://h5.m.jd.com/active/2hqsQcyM5bEUVSStkN3BwrBHqVLd/index.html?has_native=1", "http://h5.m.jd.com/active/2hqsQcyM5bEUVSStkN3BwrBHqVLd/index.html?has_native=1", "http://h5.m.jd.com/active/2hqsQcyM5bEUVSStkN3BwrBHqVLd/index.html?has_native=1"],
59 | "like": [
60 | {
61 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
62 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
63 | "price": 99.00,
64 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
65 | },
66 | {
67 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
68 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
69 | "price": 99.00,
70 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
71 | },
72 | {
73 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
74 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
75 | "price": 99.00,
76 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
77 | },
78 | {
79 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
80 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
81 | "price": 99.00,
82 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
83 | },
84 | {
85 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
86 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
87 | "price": 99.00,
88 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
89 | },
90 | {
91 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
92 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
93 | "price": 99.00,
94 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
95 | },
96 | {
97 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
98 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
99 | "price": 99.00,
100 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
101 | },
102 | {
103 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
104 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
105 | "price": 99.00,
106 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
107 | },
108 | {
109 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
110 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
111 | "price": 99.00,
112 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
113 | },
114 | {
115 | "url": "http://mercury.jd.com/log.gif?t=rec.621017&v=src=rec$action=1$reqsig=587d7faebebd1b39a72f6a4585dc53b4d2712232$enb=1$sku=0$p=621017$pin=$uuid=afc6b5fc22f06d60cf1d80dae754de38$csku=1962981185$index=1$st=0$adcli=$expid=104$im=&rid=5429717235485556179&ver=1&sig=d4e215d315c40777940a4df589e2c960670c396f",
116 | "desc": "苹果原装数据线iPhone6s/6Plus/5SE/iPadpro/4 USB头线充电器 lighting数据线",
117 | "price": 99.00,
118 | "more": "http://m.jd.com/index/lookSimilar.action?wid=1962981185"
119 | }
120 | ]
121 | }
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
--------------------------------------------------------------------------------
/server/public/images/like/like1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like1.jpg
--------------------------------------------------------------------------------
/server/public/images/like/like10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like10.jpg
--------------------------------------------------------------------------------
/server/public/images/like/like2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like2.jpg
--------------------------------------------------------------------------------
/server/public/images/like/like3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like3.jpg
--------------------------------------------------------------------------------
/server/public/images/like/like4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like4.jpg
--------------------------------------------------------------------------------
/server/public/images/like/like5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like5.jpg
--------------------------------------------------------------------------------
/server/public/images/like/like6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like6.jpg
--------------------------------------------------------------------------------
/server/public/images/like/like7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like7.jpg
--------------------------------------------------------------------------------
/server/public/images/like/like8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like8.jpg
--------------------------------------------------------------------------------
/server/public/images/like/like9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/like/like9.jpg
--------------------------------------------------------------------------------
/server/public/images/more/more1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/more/more1.jpg
--------------------------------------------------------------------------------
/server/public/images/more/more2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/more/more2.jpg
--------------------------------------------------------------------------------
/server/public/images/more/more3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/more/more3.jpg
--------------------------------------------------------------------------------
/server/public/images/more/more4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/more/more4.jpg
--------------------------------------------------------------------------------
/server/public/images/more/more5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/more/more5.jpg
--------------------------------------------------------------------------------
/server/public/images/more/more6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/more/more6.jpg
--------------------------------------------------------------------------------
/server/public/images/more/more7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/more/more7.jpg
--------------------------------------------------------------------------------
/server/public/images/otherapp/app1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/otherapp/app1.png
--------------------------------------------------------------------------------
/server/public/images/otherapp/app2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/otherapp/app2.png
--------------------------------------------------------------------------------
/server/public/images/otherapp/app3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/otherapp/app3.png
--------------------------------------------------------------------------------
/server/public/images/otherapp/app4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/otherapp/app4.png
--------------------------------------------------------------------------------
/server/public/images/otherapp/app5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/otherapp/app5.png
--------------------------------------------------------------------------------
/server/public/images/otherapp/app6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/otherapp/app6.png
--------------------------------------------------------------------------------
/server/public/images/otherapp/app7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/otherapp/app7.png
--------------------------------------------------------------------------------
/server/public/images/otherapp/app8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/otherapp/app8.png
--------------------------------------------------------------------------------
/server/public/images/spike/spike1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/spike/spike1.jpg
--------------------------------------------------------------------------------
/server/public/images/spike/spike2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/spike/spike2.jpg
--------------------------------------------------------------------------------
/server/public/images/spike/spike3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/spike/spike3.jpg
--------------------------------------------------------------------------------
/server/public/images/swiper/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/swiper/1.jpg
--------------------------------------------------------------------------------
/server/public/images/swiper/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/swiper/2.jpg
--------------------------------------------------------------------------------
/server/public/images/swiper/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/swiper/3.jpg
--------------------------------------------------------------------------------
/server/public/images/swiper/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/swiper/4.jpg
--------------------------------------------------------------------------------
/server/public/images/swiper/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cathy0807/react/7ff5b903fb4579700d977aa421dfc3562a9deec2/server/public/images/swiper/5.jpg
--------------------------------------------------------------------------------
/server/routes/data.js:
--------------------------------------------------------------------------------
1 |
2 | let express = require('express');
3 | let router = express.Router();
4 | let fs = require('fs');
5 |
6 |
7 | let dataBase = null;
8 |
9 | /**
10 | * 通过Promise读取存储的数据,确保有数据后再执行其他操作
11 | * @return {null} [无]
12 | */
13 | let readFileData = () => {
14 | let promise = new Promise((resolve, reject) => {
15 | fs.readFile("./public/database/database.json", "utf-8", (err, data) => {
16 | if(err) {
17 | console.log(err);
18 | reject("read filedata error!");
19 | }else {
20 | data = JSON.parse(data);
21 | dataBase = data;
22 | resolve();
23 | }
24 | })
25 | });
26 | return promise;
27 | }
28 |
29 |
30 | /**
31 | * 通过Promise获取文件名
32 | * @param {String} path [文件的路径名]
33 | * @param {String} fileClass [文件所属的种类,用于区别请求]
34 | * @return {null} [无]
35 | */
36 | let getFileName = (path, fileClass) => {
37 | let promise = new Promise((resolve, reject) => {
38 | fs.readdir(path, (err, files) => {
39 | if (err) {
40 | reject("read fileName err!")
41 | } else {
42 | files = files.map((file) => {
43 | return "http://localhost:3000/images/" + fileClass + "/" + file;
44 | });
45 | resolve(files);
46 | }
47 | });
48 | });
49 | return promise;
50 | }
51 |
52 | let imgNames = [];
53 | let appNames = [];
54 | let spikeNames = [];
55 | let moreNames = [];
56 | let likeNames = [];
57 |
58 | readFileData().then(() => {
59 | getFileName("./public/images/swiper", "swiper").then((files) => {
60 | imgNames = files;
61 | },() => {
62 | console.log(err);
63 | imgNames = false;
64 | });
65 |
66 | getFileName("./public/images/otherapp", "otherapp").then((files) => {
67 | let obj = dataBase.otherapp;
68 | appNames = files.map((file, index) => {
69 | obj[index].icon = file;
70 | return obj[index];
71 | });
72 | },() => {
73 | console.log(err);
74 | });
75 |
76 | getFileName("./public/images/spike", "spike").then((files) => {
77 | let obj = dataBase.spike.store;
78 | spikeNames = files.map((file, index) => {
79 | obj[index].icon = file;
80 | return obj[index];
81 | });
82 | },() => {
83 | console.log(err);
84 | })
85 |
86 | getFileName("./public/images/more", "more").then((files) => {
87 | moreNames = files.map((file, index) => {
88 | return {
89 | icon: file,
90 | url: dataBase.more[index],
91 | }
92 | });
93 | },() => {
94 | console.log(err);
95 | })
96 |
97 | getFileName("./public/images/like", "like").then((files) => {
98 | let obj = dataBase.like;
99 | likeNames = files.map((file, index) => {
100 | obj[index].icon = file;
101 | return obj[index];
102 | })
103 | },() => {
104 | console.log(err);
105 | })
106 |
107 |
108 | }, (err) => {
109 | console.log(err);
110 | })
111 |
112 |
113 | exports.swiper = (req, res) => {
114 | let reg = /\?callback=(.*)/;
115 | let callback = reg.exec(req.url)[1];
116 | const sendData = {
117 | status: 0,
118 | msg: "",
119 | data: "",
120 | }
121 | if(imgNames) {
122 | sendData.status = 1;
123 | sendData.msg = "success";
124 | sendData.data = imgNames;
125 | }else {
126 | sendData.msg = "error";
127 | }
128 | let json = JSON.stringify(sendData);
129 | res.send(callback + '(' + json + ')');
130 | };
131 |
132 | exports.otherapp = (req, res) => {
133 | let reg = /\?callback=(.*)/;
134 | let callback = reg.exec(req.url)[1];
135 | const sendData = {
136 | status: 0,
137 | msg: "",
138 | data: [],
139 | }
140 |
141 | if(appNames) {
142 | sendData.status = 1;
143 | sendData.msg = "success";
144 | sendData.data = appNames;
145 |
146 | }else {
147 | sendData.msg = "error";
148 | }
149 |
150 | let json = JSON.stringify(sendData);
151 | res.send(callback + '(' + json + ')');
152 | };
153 |
154 | exports.spike = (req, res) => {
155 | let reg = /\?callback=(.*)/;
156 | let callback = reg.exec(req.url)[1];
157 | const sendData = {
158 | status: 0,
159 | msg: "",
160 | data: [],
161 | times: "",
162 | more: "",
163 | }
164 |
165 | if(spikeNames) {
166 | sendData.status = 1;
167 | sendData.msg = "success";
168 | sendData.data = spikeNames;
169 | sendData.times = dataBase.spike.times;
170 | sendData.more = dataBase.spike.more;
171 | }else {
172 | sendData.msg = "error";
173 | }
174 |
175 | let json = JSON.stringify(sendData);
176 | res.send(callback + '(' + json + ')');
177 | };
178 |
179 | exports.more = (req, res) => {
180 | let reg = /\?callback=(.*)/;
181 | let callback = reg.exec(req.url)[1];
182 | const sendData = {
183 | status: 0,
184 | msg: "",
185 | data: [],
186 | }
187 |
188 | if(moreNames) {
189 | sendData.status = 1;
190 | sendData.msg = "success";
191 | sendData.data = moreNames;
192 | }else {
193 | sendData.msg = "error";
194 | }
195 |
196 | let json = JSON.stringify(sendData);
197 | res.send(callback + '(' + json + ')');
198 | };
199 |
200 | exports.like = (req, res) => {
201 | let reg = /\?callback=(.*)/;
202 | let callback = reg.exec(req.url)[1];
203 | const sendData = {
204 | status: 0,
205 | msg: "",
206 | data: [],
207 | }
208 |
209 | if(likeNames) {
210 | sendData.status = 1;
211 | sendData.msg = "success";
212 | sendData.data = likeNames;
213 | }else {
214 | sendData.msg = "error";
215 | }
216 |
217 | let json = JSON.stringify(sendData);
218 | res.send(callback + '(' + json + ')');
219 | };
220 |
221 |
222 |
223 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | var webpack = require('webpack');
2 | var path = require('path');
3 | var loaders = require('./webpack.loaders');
4 | var CopyWebpackPlugin = require('copy-webpack-plugin');
5 |
6 | module.exports = {
7 | entry: [
8 | 'webpack-dev-server/client?http://0.0.0.0:8080', // WebpackDevServer host and port
9 | 'webpack/hot/only-dev-server',
10 | './index.jsx' // Your appʼs entry point
11 | ],
12 | //生成的sourcemap的方式
13 | devtool: process.env.WEBPACK_DEVTOOL || 'source-map',
14 | output: {
15 | path: path.join(__dirname, 'build'),
16 | filename: 'bundle.js'
17 | },
18 | resolve: {
19 | extensions: ['', '.js', '.jsx']
20 | },
21 | module: {
22 | loaders: loaders
23 | },
24 | devServer: {
25 | contentBase: "./build", //静态资源的目录
26 | noInfo: true, // --no-info option
27 | hot: true, //自动刷新
28 | inline: true
29 | },
30 | plugins: [
31 | new webpack.DefinePlugin({
32 | 'process.env':{
33 | 'NODE_ENV': JSON.stringify('production')
34 | }
35 | }),
36 | new CopyWebpackPlugin([
37 | {from: './index.html'}
38 | ])
39 | ]
40 | };
41 |
--------------------------------------------------------------------------------
/webpack.loaders.js:
--------------------------------------------------------------------------------
1 | module.exports = [
2 | {
3 | test: /\.jsx?$/,
4 | exclude: /(node_modules|bower_components)/,
5 | loaders: ['react-hot', 'babel'],
6 | },
7 |
8 | {
9 | test: /\.css$/,
10 | loader: 'style-loader!css-loader'
11 | },
12 | {
13 | test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
14 | loader: "file"
15 | },
16 | {
17 | test: /\.(woff|woff2)$/,
18 | loader: "url?prefix=font/&limit=5000"
19 | },
20 | {
21 | test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
22 | loader: "url?limit=10000&mimetype=application/octet-stream"
23 | },
24 | {
25 | test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
26 | loader: "url?limit=10000&mimetype=image/svg+xml"
27 | },
28 | {
29 | test: /\.gif/,
30 | loader: "url-loader?limit=10000&mimetype=image/gif"
31 | },
32 | {
33 | test: /\.jpg/,
34 | loader: "url-loader?limit=10000&mimetype=image/jpg"
35 | },
36 | {
37 | test: /\.png/,
38 | loader: "url-loader?limit=10000&mimetype=image/png"
39 | }
40 | ];
41 |
--------------------------------------------------------------------------------
/webpack.production.config.js:
--------------------------------------------------------------------------------
1 | var webpack = require('webpack');
2 | var path = require('path');
3 | var loaders = require('./webpack.loaders');
4 | var CopyWebpackPlugin = require('copy-webpack-plugin');
5 |
6 | //先清空build文件夹下的文件
7 | var fs = require('fs');
8 | var buildPath='./build/';
9 | var folder_exists = fs.existsSync(buildPath);
10 | if(folder_exists == true)
11 | {
12 | var dirList = fs.readdirSync(buildPath);
13 | dirList.forEach(function(fileName)
14 | {
15 | fs.unlinkSync(buildPath + fileName);
16 | });
17 | console.log("clearing " + buildPath);
18 | };
19 |
20 | module.exports = {
21 | //入口文件配置
22 | entry: [
23 | './index.jsx' // Your appʼs entry point
24 | ],
25 | //输出文件配置
26 | output: {
27 | path: path.join(__dirname, 'build'),
28 | filename: 'bundle.js'
29 | },
30 | //更多配置项
31 | resolve: {
32 | extensions: ['', '.js', '.jsx'] //自动扩展文件后缀名,意味着我们require模块可以省略不写后缀名
33 | },
34 | //文件的加载配置
35 | module: {
36 | loaders: loaders
37 | },
38 | //插件配置
39 | plugins: [
40 | //Webpack提供了设置环境变量来优化代码的方案
41 | new webpack.DefinePlugin({
42 | 'process.env':{
43 | 'NODE_ENV': JSON.stringify('production')
44 | }
45 | }),
46 | //复制文件到构建目录
47 | new CopyWebpackPlugin([
48 | {from: './index.html'}
49 | ])
50 | ]
51 | };
52 |
--------------------------------------------------------------------------------