├── .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 | ![Mou icon](./jd.png) 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 |
37 | 38 | 39 | 40 |
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
50 | 51 | 52 | 53 |
54 | }) 55 | } 56 |
57 |
58 | { 59 | this.state.more2.map((item) => { 60 | return
61 | 62 | 63 | 64 |
65 | }) 66 | } 67 |
68 |
69 |
70 |
71 | { 72 | this.state.more3.map((item) => { 73 | return
74 | 75 | 76 | 77 |
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 |
32 | 46 |
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 | 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 |
104 | 105 | 106 | 更多秒杀 107 | 108 | 109 |
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.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 |
15 |
16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | JD_demo 7 | 12 | 13 | 14 |
15 |
16 |
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 | --------------------------------------------------------------------------------