├── README.md
├── __pycache__
├── app.cpython-37.pyc
├── fake_user_agent.cpython-37.pyc
├── spider_modul.cpython-37.pyc
└── useful_functions.cpython-37.pyc
├── app.py
├── fake_user_agent.py
├── guanchazhe.sql
├── img-storage
├── image-20200720154016179.png
├── image-20200720154157803.png
├── search.gif
├── word_cloud.gif
└── words_weights.gif
├── model
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-37.pyc
│ └── forms.cpython-37.pyc
└── forms.py
├── spider_modul.py
├── static
├── assets
│ ├── css
│ │ └── style.css
│ ├── img
│ │ ├── about.jpg
│ │ ├── apple-touch-icon.png
│ │ ├── favicon.png
│ │ ├── key_word.jpg
│ │ ├── portfolio
│ │ │ ├── portfolio-1.jpg
│ │ │ ├── portfolio-2.jpg
│ │ │ ├── portfolio-3.jpg
│ │ │ ├── portfolio-4.jpg
│ │ │ ├── portfolio-5.jpg
│ │ │ ├── portfolio-6.jpg
│ │ │ ├── portfolio-7.jpg
│ │ │ ├── portfolio-8.jpg
│ │ │ └── portfolio-9.jpg
│ │ ├── slide
│ │ │ ├── slide-1.jpg
│ │ │ ├── slide-2.jpg
│ │ │ └── slide-3.jpg
│ │ ├── team
│ │ │ ├── team-1.jpg
│ │ │ ├── team-2.jpg
│ │ │ ├── team-3.jpg
│ │ │ ├── team-4.jpg
│ │ │ └── tree.jpg
│ │ ├── tree.jpg
│ │ └── word.png
│ ├── js
│ │ ├── echarts.min.js
│ │ └── main.js
│ └── vendor
│ │ ├── animate.css
│ │ ├── animate.css
│ │ └── animate.min.css
│ │ ├── aos
│ │ ├── aos.css
│ │ └── aos.js
│ │ ├── bootstrap
│ │ ├── css
│ │ │ ├── bootstrap-grid.css
│ │ │ ├── bootstrap-grid.css.map
│ │ │ ├── bootstrap-grid.min.css
│ │ │ ├── bootstrap-grid.min.css.map
│ │ │ ├── bootstrap-reboot.css
│ │ │ ├── bootstrap-reboot.css.map
│ │ │ ├── bootstrap-reboot.min.css
│ │ │ ├── bootstrap-reboot.min.css.map
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ ├── bootstrap.min.css
│ │ │ └── bootstrap.min.css.map
│ │ └── js
│ │ │ ├── bootstrap.bundle.js
│ │ │ ├── bootstrap.bundle.js.map
│ │ │ ├── bootstrap.bundle.min.js
│ │ │ ├── bootstrap.bundle.min.js.map
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.js.map
│ │ │ ├── bootstrap.min.js
│ │ │ └── bootstrap.min.js.map
│ │ ├── boxicons
│ │ ├── css
│ │ │ ├── animations.css
│ │ │ ├── boxicons.css
│ │ │ ├── boxicons.min.css
│ │ │ └── transformations.css
│ │ └── fonts
│ │ │ ├── boxicons.eot
│ │ │ ├── boxicons.svg
│ │ │ ├── boxicons.ttf
│ │ │ ├── boxicons.woff
│ │ │ └── boxicons.woff2
│ │ ├── counterup
│ │ └── counterup.min.js
│ │ ├── icofont
│ │ ├── fonts
│ │ │ ├── icofont.woff
│ │ │ └── icofont.woff2
│ │ └── icofont.min.css
│ │ ├── isotope-layout
│ │ ├── isotope.pkgd.js
│ │ └── isotope.pkgd.min.js
│ │ ├── jquery-sticky
│ │ └── jquery.sticky.js
│ │ ├── jquery.easing
│ │ └── jquery.easing.min.js
│ │ ├── jquery
│ │ ├── jquery.min.js
│ │ └── jquery.min.map
│ │ ├── venobox
│ │ ├── venobox.css
│ │ ├── venobox.js
│ │ └── venobox.min.js
│ │ └── waypoints
│ │ └── jquery.waypoints.min.js
└── spatial
│ ├── assets
│ ├── css
│ │ ├── font-awesome.min.css
│ │ ├── images
│ │ │ └── overlay.png
│ │ ├── main.css
│ │ └── paginate.css
│ ├── fonts
│ │ ├── FontAwesome.otf
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.svg
│ │ ├── fontawesome-webfont.ttf
│ │ ├── fontawesome-webfont.woff
│ │ └── fontawesome-webfont.woff2
│ └── js
│ │ ├── jquery.min.js
│ │ ├── main.js
│ │ ├── skel.min.js
│ │ └── util.js
│ └── images
│ ├── banner.jpg
│ ├── caledonie.jpg
│ ├── pic01.jpg
│ ├── pic02.jpg
│ ├── pic03.jpg
│ ├── pic04.jpg
│ ├── pic05.jpg
│ ├── pic06.jpg
│ └── pic07.jpg
├── templates
├── analysis.html
├── index.html
├── news.html
├── news_result.html
├── search.html
├── team.html
├── temp.html
├── test
│ ├── echarts.min.js
│ └── test_echarts.html
└── word.html
├── upload
├── image-20200720163344959.png
├── image-20200720163623725.png
├── image-20200720163827319.png
└── image-20200720164113633.png
├── useful_functions.py
└── word_cloud.py
/README.md:
--------------------------------------------------------------------------------
1 | 项目中更新了sql文件,但是我没有测试过是否可行,如果在数据库连接部分还有问题,请见issues。
2 |
3 | # 观察者新闻网爬虫(新闻爬虫)
4 |
5 | ## 项目包含技术
6 |
7 | 爬虫: Requests + etree + Xpath
8 |
9 | 可视化: Flask + Echarts + WordCloud
10 |
11 | 文本分析:jieba分词
12 |
13 | 数据库: MySQL
14 |
15 | ## 说明
16 |
17 | 本项目是完成学校实训的作业,实现了对观察者新闻网的新闻内容爬取,存储,文本分析与可视化。(只供学习,如果涉及新闻版权等问题,作者立刻删仓库跑路!)
18 |
19 | 完成的时间很仓促,项目整个完成时间大约4天。这期间,由于没有任何爬虫基础,所以边学边做,项目疏漏的地方一定很多,欢迎指正!
20 |
21 | 本项目在实现过程中参考了以下内容
22 |
23 | B站: [基础python+Flask+爬虫 ](https://www.bilibili.com/video/BV12E411A7ZQ?from=search&seid=17327553224685529336) 通过这个课程了解了爬虫的基础知识并且学习了网站搭建的知识(负基础教程,老师讲的很细很细,我是跳着看的
24 |
25 | 爬虫模块,参考了一个爬取观察者网的代码(但是我找不到链接了,找到了再来补,在上面做了很多改进)
26 |
27 | B站:[Xpath相关内容](https://www.bilibili.com/video/BV1mW411D7wC?from=search&seid=2199964054070293764) 通过这个学习的Xpath 讲的也很清楚
28 |
29 | 搜索界面的网页模板参考的是github上一个demo [搜索界面UI](https://github.com/kaibush/flask_search_ui)
30 |
31 | ## 使用
32 |
33 | > 因为时间匆忙,忘记创建虚拟环境,所以暂时无法提供requrements.txt, 不过用的都是很常见的库,都可以通过pip来安装!
34 |
35 | 1. 配置环境
36 |
37 | ```
38 | pip install XXX
39 | ```
40 |
41 | 2. 运行app, 然后点击命令行中的地址
42 |
43 | 
44 |
45 |
46 |
47 | 
48 |
49 | ## 实现效果
50 |
51 | 1. 词频可视化
52 |
53 | 2. 词云
54 |
55 | 3. 搜索
56 |
57 |
58 |
--------------------------------------------------------------------------------
/__pycache__/app.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/__pycache__/app.cpython-37.pyc
--------------------------------------------------------------------------------
/__pycache__/fake_user_agent.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/__pycache__/fake_user_agent.cpython-37.pyc
--------------------------------------------------------------------------------
/__pycache__/spider_modul.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/__pycache__/spider_modul.cpython-37.pyc
--------------------------------------------------------------------------------
/__pycache__/useful_functions.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/__pycache__/useful_functions.cpython-37.pyc
--------------------------------------------------------------------------------
/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask,render_template
2 | import pymysql
3 | from model.forms import SearchForm
4 | from flask import request
5 | import useful_functions
6 | import spider_modul
7 | # 这里对数据库内容进行提取
8 | # spider_modul.run()
9 | datalist = useful_functions.get_datalist()
10 | # datalist_reverse = datalist
11 | # datalist_reverse.reverse()
12 |
13 | # 这里分析数据库内容,提炼出数据库信息,并对文本内容分词
14 | datainfo1, string = useful_functions.get_datalist_info(datalist)
15 |
16 | # 计算 topK=8 的词汇对应的词频
17 | words,weights = useful_functions.get_word_weights(string, topK=8)
18 |
19 | app = Flask(__name__)
20 | app.config["SECRET_KEY"] = "12345678"
21 |
22 |
23 |
24 |
25 |
26 | # 首页重定位
27 | @app.route('/index')
28 | def home_page():
29 | return index()
30 |
31 |
32 | @app.route('/temp')
33 | def temp_page():
34 | return index()
35 |
36 |
37 | # 首页
38 | @app.route('/')
39 | def index():
40 | global weights
41 | global words
42 | global data_info
43 | print(words, weights)
44 | data_info = datainfo1
45 | return render_template("index.html", news_info=data_info)
46 |
47 | # 新闻缩略页
48 | @app.route('/news')
49 | def news_page():
50 | return render_template("news.html",news=datalist)
51 |
52 |
53 | # 基于词频绘制的词云
54 | @app.route('/word')
55 | def word_page():
56 | return render_template("word.html",news_info=data_info)
57 |
58 |
59 | # 链接到我的个人主页
60 | @app.route('/team')
61 | def team_page():
62 | return render_template("team.html")
63 |
64 |
65 | # 数据库文本信息分析,topK8的词语及频率,暂时用的是直方图
66 | @app.route('/analysis')
67 | def analysis_page():
68 | return render_template("analysis.html",words = words,weights = weights)
69 |
70 |
71 | # 搜索界面
72 | @app.route('/search')
73 | def search_page():
74 | form = SearchForm()
75 | return render_template('search.html', form=form)
76 |
77 |
78 | # 搜索结果返回界面,返回时展示数据库中所有内容,包括正文文本
79 | @app.route('/news_result',methods=['POST','GET'])
80 | def newsResult_page():
81 | form = SearchForm()
82 | search = request.args.get("query")
83 | search_list = []
84 | cnn_search = pymysql.connect(host='127.0.0.1', user='root', password='shujuku', port=3306, database='news_with_keyword',
85 | charset='utf8')
86 | cursor_search = cnn_search.cursor()
87 | sql_search = "select * from guanchazhe where content like '{}'".format('%'+search+'%')
88 | print(sql_search)
89 | cursor_search.execute(sql_search)
90 | for item_search in cursor_search.fetchall():
91 | search_list.append(item_search)
92 | cursor_search.close()
93 | cnn_search.close()
94 | print(search_list)
95 | return render_template("news_result.html",form=form,news=search_list)
96 |
97 |
98 | if __name__ == '__main__':
99 | app.run()
100 |
--------------------------------------------------------------------------------
/fake_user_agent.py:
--------------------------------------------------------------------------------
1 | import random
2 |
3 | FAKE_USER_AGENT = [
4 | "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
5 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
6 | "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
7 | "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
8 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
9 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
10 | "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
11 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
12 | "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
13 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
14 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
15 | "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
16 | "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
17 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
18 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
19 | "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
20 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",
21 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
22 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)",
23 | "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)",
24 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
25 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
26 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)",
27 | "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
28 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
29 | "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
30 | "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
31 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
32 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
33 | "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
34 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
35 | "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
36 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
37 | "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10",
38 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/53"
39 | ]
40 |
41 |
42 | def useragent_random():
43 | return {"User-Agent": random.choice(FAKE_USER_AGENT)}
--------------------------------------------------------------------------------
/img-storage/image-20200720154016179.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/img-storage/image-20200720154016179.png
--------------------------------------------------------------------------------
/img-storage/image-20200720154157803.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/img-storage/image-20200720154157803.png
--------------------------------------------------------------------------------
/img-storage/search.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/img-storage/search.gif
--------------------------------------------------------------------------------
/img-storage/word_cloud.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/img-storage/word_cloud.gif
--------------------------------------------------------------------------------
/img-storage/words_weights.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/img-storage/words_weights.gif
--------------------------------------------------------------------------------
/model/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/model/__init__.py
--------------------------------------------------------------------------------
/model/__pycache__/__init__.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/model/__pycache__/__init__.cpython-37.pyc
--------------------------------------------------------------------------------
/model/__pycache__/forms.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/model/__pycache__/forms.cpython-37.pyc
--------------------------------------------------------------------------------
/model/forms.py:
--------------------------------------------------------------------------------
1 | from flask_wtf import FlaskForm
2 | from wtforms import StringField,SubmitField
3 | from wtforms.validators import DataRequired
4 |
5 | class SearchForm(FlaskForm):
6 | search_creater=StringField('creater',validators=[DataRequired()])
7 | submit=SubmitField('搜索')
--------------------------------------------------------------------------------
/spider_modul.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import queue
3 | import pymysql
4 | from lxml import etree
5 | import threading
6 | import re
7 | import useful_functions
8 | import fake_user_agent
9 |
10 | # headers = {
11 | # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
12 | # }
13 |
14 | # 代理池
15 | headers = fake_user_agent.useragent_random()
16 |
17 | # 爬取线程
18 | class MyThread(threading.Thread):
19 | def __init__(self, url_queue):
20 | super(MyThread, self).__init__()
21 | self.url_queue = url_queue
22 | self.urls = []
23 |
24 | # 连接Mysql数据库
25 | self.cnn = pymysql.connect(host='127.0.0.1', user='root', password='shujuku', port=3306, database='news_with_keyword',
26 | charset='utf8')
27 | self.cursor = self.cnn.cursor()
28 | self.sql = 'insert into guanchazhe(title, author, publish_time, content, url, key_word) values(%s, %s, %s, %s, %s, %s)'
29 |
30 | # 获取已爬取的url数据并写入列表,用于判断
31 | sql = 'select url from guanchazhe'
32 | self.cursor.execute(sql)
33 | for url in self.cursor.fetchall():
34 | self.urls.append(url[0])
35 |
36 |
37 | def run(self):
38 | self.spider()
39 |
40 | def spider(self):
41 | while not self.url_queue.empty():
42 | item = {}
43 | url = self.url_queue.get()
44 | if self.check_url(url):
45 | print(f'正在爬取{url}')
46 | response = requests.get(url, headers=headers)
47 | response.encoding = "utf-8"
48 | html = etree.HTML(response.text)
49 | results = html.xpath('//ul/li[contains(@class,"left left-main")]')
50 | for result in results:
51 | item['url'] = url
52 | author = result.xpath('./ul/li/div[contains(@class,author-intro)]/p/a/text()')
53 | if not author:
54 | author = html.xpath('//div[contains(@class,"time")]/span[3]/text()')
55 | if not author:
56 | self.get_news(response.text, item)
57 | continue
58 | item['author'] = author[0]
59 |
60 | item['title'] = result.xpath('./h3/text()')[0]
61 |
62 | item['publish_time'] = result.xpath('./div[contains(@class,"time")]/span[1]/text()')[0]
63 |
64 | content = result.xpath('./div[contains(@class,"content")]/p/text()')
65 | content = ''.join(content)
66 | content = re.sub('\s', '', content)
67 | item['content'] = content
68 |
69 | key_word = result.xpath("//div[@class='key-word fix mt15']/a/text()")
70 | key_word = ",".join(key_word)
71 | if not key_word:
72 | key_word = useful_functions.get_keyword_from_content(content)
73 | item['key_word'] = key_word
74 | print(key_word)
75 |
76 | self.save(item)
77 |
78 | def save(self, item):
79 | self.cursor.execute(self.sql,
80 | [item['title'], item['author'], item['publish_time'],item['content'], item['url'],item['key_word']])
81 | self.cnn.commit()
82 |
83 | def check_url(self, url):
84 | # 查看数据库中是否存在当前爬取的url,如果存在则放弃爬取
85 | if url in self.urls:
86 | print(f'{url}已存在')
87 | return False
88 | else:
89 | self.urls.append(url)
90 | return True
91 |
92 | def get_news(self, text, item):
93 | # 获取js渲染后的网址并请求
94 | str = re.search('window.location.href=".*?"', text).group()
95 | link = re.split('"', str)[1] + '&page=0'
96 |
97 | response = requests.get(url=link, headers=headers)
98 | response.encoding = "utf-8"
99 | html = etree.HTML(response.text)
100 | item['author'] = \
101 | html.xpath('//div[contains(@class,"article-content")]/div[2]/div[@class="user-main"]/h4/a/text()')[0]
102 |
103 | item['title'] = html.xpath('//div[@class="article-content"]/h1/text()')[0]
104 |
105 | item['publish_time'] = html.xpath('//span[@class="time1"]/text()')[0]
106 |
107 | content = html.xpath('//div[@class="article-txt-content"]/p/text()')
108 | content = ''.join(content)
109 | content = re.sub('\s', '', content)
110 | item['content'] = content
111 |
112 | key_word = html.xpath("//div[@class='key-word fix mt15']/a/text()")
113 | key_word = ",".join(key_word)
114 | if not key_word:
115 | key_word = useful_functions.get_keyword_from_content(content)
116 | if not key_word:
117 | key_word = '无关键词'
118 | else:
119 | key_word.append()
120 | key_word = ", ".join(key_word)
121 | item['key_word'] = key_word
122 |
123 | # 将获取到的url添加到队列中去
124 | def add_urls(urls, queue):
125 | for url in urls:
126 | url = 'https://www.guancha.cn' + url
127 | queue.put(url)
128 |
129 | # 从观察者网首页网页中获取url
130 | def get_url(queue):
131 | url = 'https://www.guancha.cn/'
132 | response = requests.get(url, headers=headers).text
133 | html = etree.HTML(response)
134 | head_line = html.xpath("//div[(@class ='content-headline')]/a/@href")
135 | left_urls = html.xpath('//ul[contains(@class, "Review-item")]/li/a[contains(@class, "module-img")]/@href')
136 | center_right_urls = html.xpath('//ul[contains(@class, "img-List")]/li/h4[contains(@class, "module-title")]/a/@href')
137 | # right_urls = html.xpath('//ul[contains(@class, "fengwen-list")]/li/h4[contains(@class, "module-title")]/a/@href')
138 | add_urls(left_urls, queue)
139 | add_urls(center_right_urls, queue)
140 | add_urls(head_line,queue)
141 |
142 | # 从观察者网首页末尾的更多网页中获取url
143 | def get_urlFromMore(queue):
144 | for index in range(1,16):
145 | url = f'https://www.guancha.cn/mainnews-yw/list_{index}.shtml'
146 | response = requests.get(url, headers=headers).text
147 | html = etree.HTML(response)
148 | more_urls = html.xpath("//div[@class = 'right fn']/h4/a/@href")
149 | add_urls(more_urls,queue)
150 |
151 | # 爬虫运行程序
152 | def run():
153 | threads = []
154 |
155 | url_que = queue.Queue()
156 | get_urlFromMore(url_que)
157 |
158 | for i in range(10):
159 | thread = MyThread(url_que)
160 | threads.append(thread)
161 | thread.start()
162 |
--------------------------------------------------------------------------------
/static/assets/img/about.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/about.jpg
--------------------------------------------------------------------------------
/static/assets/img/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/apple-touch-icon.png
--------------------------------------------------------------------------------
/static/assets/img/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/favicon.png
--------------------------------------------------------------------------------
/static/assets/img/key_word.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/key_word.jpg
--------------------------------------------------------------------------------
/static/assets/img/portfolio/portfolio-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/portfolio/portfolio-1.jpg
--------------------------------------------------------------------------------
/static/assets/img/portfolio/portfolio-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/portfolio/portfolio-2.jpg
--------------------------------------------------------------------------------
/static/assets/img/portfolio/portfolio-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/portfolio/portfolio-3.jpg
--------------------------------------------------------------------------------
/static/assets/img/portfolio/portfolio-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/portfolio/portfolio-4.jpg
--------------------------------------------------------------------------------
/static/assets/img/portfolio/portfolio-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/portfolio/portfolio-5.jpg
--------------------------------------------------------------------------------
/static/assets/img/portfolio/portfolio-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/portfolio/portfolio-6.jpg
--------------------------------------------------------------------------------
/static/assets/img/portfolio/portfolio-7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/portfolio/portfolio-7.jpg
--------------------------------------------------------------------------------
/static/assets/img/portfolio/portfolio-8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/portfolio/portfolio-8.jpg
--------------------------------------------------------------------------------
/static/assets/img/portfolio/portfolio-9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/portfolio/portfolio-9.jpg
--------------------------------------------------------------------------------
/static/assets/img/slide/slide-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/slide/slide-1.jpg
--------------------------------------------------------------------------------
/static/assets/img/slide/slide-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/slide/slide-2.jpg
--------------------------------------------------------------------------------
/static/assets/img/slide/slide-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/slide/slide-3.jpg
--------------------------------------------------------------------------------
/static/assets/img/team/team-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/team/team-1.jpg
--------------------------------------------------------------------------------
/static/assets/img/team/team-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/team/team-2.jpg
--------------------------------------------------------------------------------
/static/assets/img/team/team-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/team/team-3.jpg
--------------------------------------------------------------------------------
/static/assets/img/team/team-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/team/team-4.jpg
--------------------------------------------------------------------------------
/static/assets/img/team/tree.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/team/tree.jpg
--------------------------------------------------------------------------------
/static/assets/img/tree.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/tree.jpg
--------------------------------------------------------------------------------
/static/assets/img/word.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/img/word.png
--------------------------------------------------------------------------------
/static/assets/js/main.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Template Name: Mamba - v2.0.1
3 | * Template URL: https://bootstrapmade.com/mamba-one-page-bootstrap-template-free/
4 | * Author: BootstrapMade.com
5 | * License: https://bootstrapmade.com/license/
6 | */
7 | !(function($) {
8 | "use strict";
9 |
10 | // Toggle .header-scrolled class to #header when page is scrolled
11 | $(window).scroll(function() {
12 | if ($(this).scrollTop() > 100) {
13 | $('#header').addClass('header-scrolled');
14 | } else {
15 | $('#header').removeClass('header-scrolled');
16 | }
17 | });
18 |
19 | if ($(window).scrollTop() > 100) {
20 | $('#header').addClass('header-scrolled');
21 | }
22 |
23 | // Stick the header at top on scroll
24 | $("#header").sticky({
25 | topSpacing: 0,
26 | zIndex: '50'
27 | });
28 |
29 | // Smooth scroll for the navigation menu and links with .scrollto classes
30 | $(document).on('click', '.nav-menu a, .mobile-nav a, .scrollto', function(e) {
31 | if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
32 | e.preventDefault();
33 | var target = $(this.hash);
34 | if (target.length) {
35 |
36 | var scrollto = target.offset().top;
37 | var scrolled = 2;
38 |
39 | if ($('#header-sticky-wrapper').length) {
40 | scrollto -= $('#header-sticky-wrapper').outerHeight() - scrolled;
41 | }
42 |
43 | if ($(this).attr("href") == '#header') {
44 | scrollto = 0;
45 | }
46 |
47 | $('html, body').animate({
48 | scrollTop: scrollto
49 | }, 1500, 'easeInOutExpo');
50 |
51 | if ($(this).parents('.nav-menu, .mobile-nav').length) {
52 | $('.nav-menu .active, .mobile-nav .active').removeClass('active');
53 | $(this).closest('li').addClass('active');
54 | }
55 |
56 | if ($('body').hasClass('mobile-nav-active')) {
57 | $('body').removeClass('mobile-nav-active');
58 | $('.mobile-nav-toggle i').toggleClass('icofont-navigation-menu icofont-close');
59 | $('.mobile-nav-overly').fadeOut();
60 | }
61 | return false;
62 | }
63 | }
64 | });
65 |
66 | // Mobile Navigation
67 | if ($('.nav-menu').length) {
68 | var $mobile_nav = $('.nav-menu').clone().prop({
69 | class: 'mobile-nav d-lg-none'
70 | });
71 | $('body').append($mobile_nav);
72 | $('body').prepend('');
73 | $('body').append('
');
74 |
75 | $(document).on('click', '.mobile-nav-toggle', function(e) {
76 | $('body').toggleClass('mobile-nav-active');
77 | $('.mobile-nav-toggle i').toggleClass('icofont-navigation-menu icofont-close');
78 | $('.mobile-nav-overly').toggle();
79 | });
80 |
81 | $(document).on('click', '.mobile-nav .drop-down > a', function(e) {
82 | e.preventDefault();
83 | $(this).next().slideToggle(300);
84 | $(this).parent().toggleClass('active');
85 | });
86 |
87 | $(document).click(function(e) {
88 | var container = $(".mobile-nav, .mobile-nav-toggle");
89 | if (!container.is(e.target) && container.has(e.target).length === 0) {
90 | if ($('body').hasClass('mobile-nav-active')) {
91 | $('body').removeClass('mobile-nav-active');
92 | $('.mobile-nav-toggle i').toggleClass('icofont-navigation-menu icofont-close');
93 | $('.mobile-nav-overly').fadeOut();
94 | }
95 | }
96 | });
97 | } else if ($(".mobile-nav, .mobile-nav-toggle").length) {
98 | $(".mobile-nav, .mobile-nav-toggle").hide();
99 | }
100 |
101 | // Intro carousel
102 | var heroCarousel = $("#heroCarousel");
103 | var heroCarouselIndicators = $("#hero-carousel-indicators");
104 | heroCarousel.find(".carousel-inner").children(".carousel-item").each(function(index) {
105 | (index === 0) ?
106 | heroCarouselIndicators.append(""):
107 | heroCarouselIndicators.append("");
108 | });
109 |
110 | heroCarousel.on('slid.bs.carousel', function(e) {
111 | $(this).find('h2').addClass('animated fadeInDown');
112 | $(this).find('p').addClass('animated fadeInUp');
113 | $(this).find('.btn-get-started').addClass('animated fadeInUp');
114 | });
115 |
116 | // Back to top button
117 | $(window).scroll(function() {
118 | if ($(this).scrollTop() > 100) {
119 | $('.back-to-top').fadeIn('slow');
120 | } else {
121 | $('.back-to-top').fadeOut('slow');
122 | }
123 | });
124 |
125 | $('.back-to-top').click(function() {
126 | $('html, body').animate({
127 | scrollTop: 0
128 | }, 1500, 'easeInOutExpo');
129 | return false;
130 | });
131 |
132 | // Initiate the venobox plugin
133 | $(window).on('load', function() {
134 | $('.venobox').venobox();
135 | });
136 |
137 | // jQuery counterUp
138 | $('[data-toggle="counter-up"]').counterUp({
139 | delay: 10,
140 | time: 1000
141 | });
142 |
143 | // Porfolio isotope and filter
144 | $(window).on('load', function() {
145 | var portfolioIsotope = $('.portfolio-container').isotope({
146 | itemSelector: '.portfolio-item',
147 | layoutMode: 'fitRows'
148 | });
149 |
150 | $('#portfolio-flters li').on('click', function() {
151 | $("#portfolio-flters li").removeClass('filter-active');
152 | $(this).addClass('filter-active');
153 |
154 | portfolioIsotope.isotope({
155 | filter: $(this).data('filter')
156 | });
157 | });
158 |
159 | // Initiate venobox (lightbox feature used in portofilo)
160 | $(document).ready(function() {
161 | $('.venobox').venobox();
162 | });
163 | });
164 |
165 | // Initi AOS
166 | AOS.init({
167 | duration: 1000,
168 | easing: "ease-in-out-back"
169 | });
170 |
171 | })(jQuery);
--------------------------------------------------------------------------------
/static/assets/vendor/aos/aos.css:
--------------------------------------------------------------------------------
1 | [data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,transform}[data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;transform:translateZ(0)}[data-aos=fade-up]{transform:translate3d(0,100px,0)}[data-aos=fade-down]{transform:translate3d(0,-100px,0)}[data-aos=fade-right]{transform:translate3d(-100px,0,0)}[data-aos=fade-left]{transform:translate3d(100px,0,0)}[data-aos=fade-up-right]{transform:translate3d(-100px,100px,0)}[data-aos=fade-up-left]{transform:translate3d(100px,100px,0)}[data-aos=fade-down-right]{transform:translate3d(-100px,-100px,0)}[data-aos=fade-down-left]{transform:translate3d(100px,-100px,0)}[data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,transform}[data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;transform:translateZ(0) scale(1)}[data-aos=zoom-in]{transform:scale(.6)}[data-aos=zoom-in-up]{transform:translate3d(0,100px,0) scale(.6)}[data-aos=zoom-in-down]{transform:translate3d(0,-100px,0) scale(.6)}[data-aos=zoom-in-right]{transform:translate3d(-100px,0,0) scale(.6)}[data-aos=zoom-in-left]{transform:translate3d(100px,0,0) scale(.6)}[data-aos=zoom-out]{transform:scale(1.2)}[data-aos=zoom-out-up]{transform:translate3d(0,100px,0) scale(1.2)}[data-aos=zoom-out-down]{transform:translate3d(0,-100px,0) scale(1.2)}[data-aos=zoom-out-right]{transform:translate3d(-100px,0,0) scale(1.2)}[data-aos=zoom-out-left]{transform:translate3d(100px,0,0) scale(1.2)}[data-aos^=slide][data-aos^=slide]{transition-property:transform}[data-aos^=slide][data-aos^=slide].aos-animate{transform:translateZ(0)}[data-aos=slide-up]{transform:translate3d(0,100%,0)}[data-aos=slide-down]{transform:translate3d(0,-100%,0)}[data-aos=slide-right]{transform:translate3d(-100%,0,0)}[data-aos=slide-left]{transform:translate3d(100%,0,0)}[data-aos^=flip][data-aos^=flip]{backface-visibility:hidden;transition-property:transform}[data-aos=flip-left]{transform:perspective(2500px) rotateY(-100deg)}[data-aos=flip-left].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-right]{transform:perspective(2500px) rotateY(100deg)}[data-aos=flip-right].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-up]{transform:perspective(2500px) rotateX(-100deg)}[data-aos=flip-up].aos-animate{transform:perspective(2500px) rotateX(0)}[data-aos=flip-down]{transform:perspective(2500px) rotateX(100deg)}[data-aos=flip-down].aos-animate{transform:perspective(2500px) rotateX(0)}
--------------------------------------------------------------------------------
/static/assets/vendor/aos/aos.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute("data-aos"),e.node.removeAttribute("data-aos-easing"),e.node.removeAttribute("data-aos-duration"),e.node.removeAttribute("data-aos-delay")})},S=function(e){return e===!0||"mobile"===e&&p.default.mobile()||"phone"===e&&p.default.phone()||"tablet"===e&&p.default.tablet()||"function"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n '),x.disableMutationObserver=!0),document.querySelector("body").setAttribute("data-aos-easing",x.easing),document.querySelector("body").setAttribute("data-aos-duration",x.duration),document.querySelector("body").setAttribute("data-aos-delay",x.delay),"DOMContentLoaded"===x.startEvent&&["complete","interactive"].indexOf(document.readyState)>-1?j(!0):"load"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener("resize",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener("orientationchange",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener("scroll",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready("[data-aos]",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){"use strict";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if("function"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S="maxWait"in n,y=S?x(u(n.maxWait)||0,t):y,_="trailing"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if("function"!=typeof e)throw new TypeError(s);return i(o)&&(r="leading"in o?!!o.leading:r,a="trailing"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t="undefined"==typeof e?"undefined":c(e);return!!e&&("object"==t||"function"==t)}function r(e){return!!e&&"object"==("undefined"==typeof e?"undefined":c(e))}function a(e){return"symbol"==("undefined"==typeof e?"undefined":c(e))||r(e)&&k.call(e)==d}function u(e){if("number"==typeof e)return e;if(a(e))return f;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(l,"");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s="Expected a function",f=NaN,d="[object Symbol]",l=/^\s+|\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y="object"==("undefined"==typeof t?"undefined":c(t))&&t&&t.Object===Object&&t,g="object"==("undefined"==typeof self?"undefined":c(self))&&self&&self.Object===Object&&self,h=y||g||Function("return this")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){"use strict";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if("function"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S="maxWait"in n,y=S?k(a(n.maxWait)||0,t):y,_="trailing"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t="undefined"==typeof e?"undefined":u(e);return!!e&&("object"==t||"function"==t)}function i(e){return!!e&&"object"==("undefined"==typeof e?"undefined":u(e))}function r(e){return"symbol"==("undefined"==typeof e?"undefined":u(e))||i(e)&&w.call(e)==f}function a(e){if("number"==typeof e)return e;if(r(e))return s;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(d,"");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c="Expected a function",s=NaN,f="[object Symbol]",d=/^\s+|\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v="object"==("undefined"==typeof t?"undefined":u(t))&&t&&t.Object===Object&&t,y="object"==("undefined"==typeof self?"undefined":u(self))&&self&&self.Object===Object&&self,g=v||y||Function("return this")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){"use strict";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;te.position?e.node.classList.add("aos-animate"):"undefined"!=typeof o&&("false"===o||!n&&"true"!==o)&&e.node.classList.remove("aos-animate")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add("aos-init"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute("data-aos-offset"),anchor:e.getAttribute("data-aos-anchor"),anchorPlacement:e.getAttribute("data-aos-anchor-placement")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case"top-bottom":break;case"center-bottom":n+=e.offsetHeight/2;break;case"bottom-bottom":n+=e.offsetHeight;break;case"top-center":n+=i/2;break;case"bottom-center":n+=i/2+e.offsetHeight;break;case"center-center":n+=i/2+e.offsetHeight/2;break;case"top-top":n+=i;break;case"bottom-top":n+=e.offsetHeight+i;break;case"center-top":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-("BODY"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-("BODY"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return e=e||document.querySelectorAll("[data-aos]"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])});
--------------------------------------------------------------------------------
/static/assets/vendor/bootstrap/css/bootstrap-reboot.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)
3 | * Copyright 2011-2019 The Bootstrap Authors
4 | * Copyright 2011-2019 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7 | */
8 | *,
9 | *::before,
10 | *::after {
11 | box-sizing: border-box;
12 | }
13 |
14 | html {
15 | font-family: sans-serif;
16 | line-height: 1.15;
17 | -webkit-text-size-adjust: 100%;
18 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
19 | }
20 |
21 | article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
22 | display: block;
23 | }
24 |
25 | body {
26 | margin: 0;
27 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
28 | font-size: 1rem;
29 | font-weight: 400;
30 | line-height: 1.5;
31 | color: #212529;
32 | text-align: left;
33 | background-color: #fff;
34 | }
35 |
36 | [tabindex="-1"]:focus:not(:focus-visible) {
37 | outline: 0 !important;
38 | }
39 |
40 | hr {
41 | box-sizing: content-box;
42 | height: 0;
43 | overflow: visible;
44 | }
45 |
46 | h1, h2, h3, h4, h5, h6 {
47 | margin-top: 0;
48 | margin-bottom: 0.5rem;
49 | }
50 |
51 | p {
52 | margin-top: 0;
53 | margin-bottom: 1rem;
54 | }
55 |
56 | abbr[title],
57 | abbr[data-original-title] {
58 | text-decoration: underline;
59 | -webkit-text-decoration: underline dotted;
60 | text-decoration: underline dotted;
61 | cursor: help;
62 | border-bottom: 0;
63 | -webkit-text-decoration-skip-ink: none;
64 | text-decoration-skip-ink: none;
65 | }
66 |
67 | address {
68 | margin-bottom: 1rem;
69 | font-style: normal;
70 | line-height: inherit;
71 | }
72 |
73 | ol,
74 | ul,
75 | dl {
76 | margin-top: 0;
77 | margin-bottom: 1rem;
78 | }
79 |
80 | ol ol,
81 | ul ul,
82 | ol ul,
83 | ul ol {
84 | margin-bottom: 0;
85 | }
86 |
87 | dt {
88 | font-weight: 700;
89 | }
90 |
91 | dd {
92 | margin-bottom: .5rem;
93 | margin-left: 0;
94 | }
95 |
96 | blockquote {
97 | margin: 0 0 1rem;
98 | }
99 |
100 | b,
101 | strong {
102 | font-weight: bolder;
103 | }
104 |
105 | small {
106 | font-size: 80%;
107 | }
108 |
109 | sub,
110 | sup {
111 | position: relative;
112 | font-size: 75%;
113 | line-height: 0;
114 | vertical-align: baseline;
115 | }
116 |
117 | sub {
118 | bottom: -.25em;
119 | }
120 |
121 | sup {
122 | top: -.5em;
123 | }
124 |
125 | a {
126 | color: #007bff;
127 | text-decoration: none;
128 | background-color: transparent;
129 | }
130 |
131 | a:hover {
132 | color: #0056b3;
133 | text-decoration: underline;
134 | }
135 |
136 | a:not([href]) {
137 | color: inherit;
138 | text-decoration: none;
139 | }
140 |
141 | a:not([href]):hover {
142 | color: inherit;
143 | text-decoration: none;
144 | }
145 |
146 | pre,
147 | code,
148 | kbd,
149 | samp {
150 | font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
151 | font-size: 1em;
152 | }
153 |
154 | pre {
155 | margin-top: 0;
156 | margin-bottom: 1rem;
157 | overflow: auto;
158 | }
159 |
160 | figure {
161 | margin: 0 0 1rem;
162 | }
163 |
164 | img {
165 | vertical-align: middle;
166 | border-style: none;
167 | }
168 |
169 | svg {
170 | overflow: hidden;
171 | vertical-align: middle;
172 | }
173 |
174 | table {
175 | border-collapse: collapse;
176 | }
177 |
178 | caption {
179 | padding-top: 0.75rem;
180 | padding-bottom: 0.75rem;
181 | color: #6c757d;
182 | text-align: left;
183 | caption-side: bottom;
184 | }
185 |
186 | th {
187 | text-align: inherit;
188 | }
189 |
190 | label {
191 | display: inline-block;
192 | margin-bottom: 0.5rem;
193 | }
194 |
195 | button {
196 | border-radius: 0;
197 | }
198 |
199 | button:focus {
200 | outline: 1px dotted;
201 | outline: 5px auto -webkit-focus-ring-color;
202 | }
203 |
204 | input,
205 | button,
206 | select,
207 | optgroup,
208 | textarea {
209 | margin: 0;
210 | font-family: inherit;
211 | font-size: inherit;
212 | line-height: inherit;
213 | }
214 |
215 | button,
216 | input {
217 | overflow: visible;
218 | }
219 |
220 | button,
221 | select {
222 | text-transform: none;
223 | }
224 |
225 | select {
226 | word-wrap: normal;
227 | }
228 |
229 | button,
230 | [type="button"],
231 | [type="reset"],
232 | [type="submit"] {
233 | -webkit-appearance: button;
234 | }
235 |
236 | button:not(:disabled),
237 | [type="button"]:not(:disabled),
238 | [type="reset"]:not(:disabled),
239 | [type="submit"]:not(:disabled) {
240 | cursor: pointer;
241 | }
242 |
243 | button::-moz-focus-inner,
244 | [type="button"]::-moz-focus-inner,
245 | [type="reset"]::-moz-focus-inner,
246 | [type="submit"]::-moz-focus-inner {
247 | padding: 0;
248 | border-style: none;
249 | }
250 |
251 | input[type="radio"],
252 | input[type="checkbox"] {
253 | box-sizing: border-box;
254 | padding: 0;
255 | }
256 |
257 | input[type="date"],
258 | input[type="time"],
259 | input[type="datetime-local"],
260 | input[type="month"] {
261 | -webkit-appearance: listbox;
262 | }
263 |
264 | textarea {
265 | overflow: auto;
266 | resize: vertical;
267 | }
268 |
269 | fieldset {
270 | min-width: 0;
271 | padding: 0;
272 | margin: 0;
273 | border: 0;
274 | }
275 |
276 | legend {
277 | display: block;
278 | width: 100%;
279 | max-width: 100%;
280 | padding: 0;
281 | margin-bottom: .5rem;
282 | font-size: 1.5rem;
283 | line-height: inherit;
284 | color: inherit;
285 | white-space: normal;
286 | }
287 |
288 | progress {
289 | vertical-align: baseline;
290 | }
291 |
292 | [type="number"]::-webkit-inner-spin-button,
293 | [type="number"]::-webkit-outer-spin-button {
294 | height: auto;
295 | }
296 |
297 | [type="search"] {
298 | outline-offset: -2px;
299 | -webkit-appearance: none;
300 | }
301 |
302 | [type="search"]::-webkit-search-decoration {
303 | -webkit-appearance: none;
304 | }
305 |
306 | ::-webkit-file-upload-button {
307 | font: inherit;
308 | -webkit-appearance: button;
309 | }
310 |
311 | output {
312 | display: inline-block;
313 | }
314 |
315 | summary {
316 | display: list-item;
317 | cursor: pointer;
318 | }
319 |
320 | template {
321 | display: none;
322 | }
323 |
324 | [hidden] {
325 | display: none !important;
326 | }
327 | /*# sourceMappingURL=bootstrap-reboot.css.map */
--------------------------------------------------------------------------------
/static/assets/vendor/bootstrap/css/bootstrap-reboot.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)
3 | * Copyright 2011-2019 The Bootstrap Authors
4 | * Copyright 2011-2019 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7 | */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */
--------------------------------------------------------------------------------
/static/assets/vendor/boxicons/css/animations.css:
--------------------------------------------------------------------------------
1 | @-webkit-keyframes spin
2 | {
3 | 0%
4 | {
5 | -webkit-transform: rotate(0);
6 | transform: rotate(0);
7 | }
8 | 100%
9 | {
10 | -webkit-transform: rotate(359deg);
11 | transform: rotate(359deg);
12 | }
13 | }
14 | @keyframes spin
15 | {
16 | 0%
17 | {
18 | -webkit-transform: rotate(0);
19 | transform: rotate(0);
20 | }
21 | 100%
22 | {
23 | -webkit-transform: rotate(359deg);
24 | transform: rotate(359deg);
25 | }
26 | }
27 | @-webkit-keyframes burst
28 | {
29 | 0%
30 | {
31 | -webkit-transform: scale(1);
32 | transform: scale(1);
33 |
34 | opacity: 1;
35 | }
36 | 90%
37 | {
38 | -webkit-transform: scale(1.5);
39 | transform: scale(1.5);
40 |
41 | opacity: 0;
42 | }
43 | }
44 | @keyframes burst
45 | {
46 | 0%
47 | {
48 | -webkit-transform: scale(1);
49 | transform: scale(1);
50 |
51 | opacity: 1;
52 | }
53 | 90%
54 | {
55 | -webkit-transform: scale(1.5);
56 | transform: scale(1.5);
57 |
58 | opacity: 0;
59 | }
60 | }
61 | @-webkit-keyframes flashing
62 | {
63 | 0%
64 | {
65 | opacity: 1;
66 | }
67 | 45%
68 | {
69 | opacity: 0;
70 | }
71 | 90%
72 | {
73 | opacity: 1;
74 | }
75 | }
76 | @keyframes flashing
77 | {
78 | 0%
79 | {
80 | opacity: 1;
81 | }
82 | 45%
83 | {
84 | opacity: 0;
85 | }
86 | 90%
87 | {
88 | opacity: 1;
89 | }
90 | }
91 | @-webkit-keyframes fade-left
92 | {
93 | 0%
94 | {
95 | -webkit-transform: translateX(0);
96 | transform: translateX(0);
97 |
98 | opacity: 1;
99 | }
100 | 75%
101 | {
102 | -webkit-transform: translateX(-20px);
103 | transform: translateX(-20px);
104 |
105 | opacity: 0;
106 | }
107 | }
108 | @keyframes fade-left
109 | {
110 | 0%
111 | {
112 | -webkit-transform: translateX(0);
113 | transform: translateX(0);
114 |
115 | opacity: 1;
116 | }
117 | 75%
118 | {
119 | -webkit-transform: translateX(-20px);
120 | transform: translateX(-20px);
121 |
122 | opacity: 0;
123 | }
124 | }
125 | @-webkit-keyframes fade-right
126 | {
127 | 0%
128 | {
129 | -webkit-transform: translateX(0);
130 | transform: translateX(0);
131 |
132 | opacity: 1;
133 | }
134 | 75%
135 | {
136 | -webkit-transform: translateX(20px);
137 | transform: translateX(20px);
138 |
139 | opacity: 0;
140 | }
141 | }
142 | @keyframes fade-right
143 | {
144 | 0%
145 | {
146 | -webkit-transform: translateX(0);
147 | transform: translateX(0);
148 |
149 | opacity: 1;
150 | }
151 | 75%
152 | {
153 | -webkit-transform: translateX(20px);
154 | transform: translateX(20px);
155 |
156 | opacity: 0;
157 | }
158 | }
159 | @-webkit-keyframes fade-up
160 | {
161 | 0%
162 | {
163 | -webkit-transform: translateY(0);
164 | transform: translateY(0);
165 |
166 | opacity: 1;
167 | }
168 | 75%
169 | {
170 | -webkit-transform: translateY(-20px);
171 | transform: translateY(-20px);
172 |
173 | opacity: 0;
174 | }
175 | }
176 | @keyframes fade-up
177 | {
178 | 0%
179 | {
180 | -webkit-transform: translateY(0);
181 | transform: translateY(0);
182 |
183 | opacity: 1;
184 | }
185 | 75%
186 | {
187 | -webkit-transform: translateY(-20px);
188 | transform: translateY(-20px);
189 |
190 | opacity: 0;
191 | }
192 | }
193 | @-webkit-keyframes fade-down
194 | {
195 | 0%
196 | {
197 | -webkit-transform: translateY(0);
198 | transform: translateY(0);
199 |
200 | opacity: 1;
201 | }
202 | 75%
203 | {
204 | -webkit-transform: translateY(20px);
205 | transform: translateY(20px);
206 |
207 | opacity: 0;
208 | }
209 | }
210 | @keyframes fade-down
211 | {
212 | 0%
213 | {
214 | -webkit-transform: translateY(0);
215 | transform: translateY(0);
216 |
217 | opacity: 1;
218 | }
219 | 75%
220 | {
221 | -webkit-transform: translateY(20px);
222 | transform: translateY(20px);
223 |
224 | opacity: 0;
225 | }
226 | }
227 | @-webkit-keyframes tada
228 | {
229 | from
230 | {
231 | -webkit-transform: scale3d(1, 1, 1);
232 | transform: scale3d(1, 1, 1);
233 | }
234 |
235 | 10%,
236 | 20%
237 | {
238 | -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
239 | transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
240 | }
241 |
242 | 30%,
243 | 50%,
244 | 70%,
245 | 90%
246 | {
247 | -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
248 | transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
249 | }
250 |
251 | 40%,
252 | 60%,
253 | 80%
254 | {
255 | -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);
256 | transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);
257 | }
258 |
259 | to
260 | {
261 | -webkit-transform: scale3d(1, 1, 1);
262 | transform: scale3d(1, 1, 1);
263 | }
264 | }
265 |
266 | @keyframes tada
267 | {
268 | from
269 | {
270 | -webkit-transform: scale3d(1, 1, 1);
271 | transform: scale3d(1, 1, 1);
272 | }
273 |
274 | 10%,
275 | 20%
276 | {
277 | -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
278 | transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
279 | }
280 |
281 | 30%,
282 | 50%,
283 | 70%,
284 | 90%
285 | {
286 | -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
287 | transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
288 | }
289 |
290 | 40%,
291 | 60%,
292 | 80%
293 | {
294 | -webkit-transform: rotate3d(0, 0, 1, -10deg);
295 | transform: rotate3d(0, 0, 1, -10deg);
296 | }
297 |
298 | to
299 | {
300 | -webkit-transform: scale3d(1, 1, 1);
301 | transform: scale3d(1, 1, 1);
302 | }
303 | }
304 | .bx-spin
305 | {
306 | -webkit-animation: spin 2s linear infinite;
307 | animation: spin 2s linear infinite;
308 | }
309 | .bx-spin-hover:hover
310 | {
311 | -webkit-animation: spin 2s linear infinite;
312 | animation: spin 2s linear infinite;
313 | }
314 |
315 | .bx-tada
316 | {
317 | -webkit-animation: tada 1.5s ease infinite;
318 | animation: tada 1.5s ease infinite;
319 | }
320 | .bx-tada-hover:hover
321 | {
322 | -webkit-animation: tada 1.5s ease infinite;
323 | animation: tada 1.5s ease infinite;
324 | }
325 |
326 | .bx-flashing
327 | {
328 | -webkit-animation: flashing 1.5s infinite linear;
329 | animation: flashing 1.5s infinite linear;
330 | }
331 | .bx-flashing-hover:hover
332 | {
333 | -webkit-animation: flashing 1.5s infinite linear;
334 | animation: flashing 1.5s infinite linear;
335 | }
336 |
337 | .bx-burst
338 | {
339 | -webkit-animation: burst 1.5s infinite linear;
340 | animation: burst 1.5s infinite linear;
341 | }
342 | .bx-burst-hover:hover
343 | {
344 | -webkit-animation: burst 1.5s infinite linear;
345 | animation: burst 1.5s infinite linear;
346 | }
347 | .bx-fade-up
348 | {
349 | -webkit-animation: fade-up 1.5s infinite linear;
350 | animation: fade-up 1.5s infinite linear;
351 | }
352 | .bx-fade-up-hover:hover
353 | {
354 | -webkit-animation: fade-up 1.5s infinite linear;
355 | animation: fade-up 1.5s infinite linear;
356 | }
357 | .bx-fade-down
358 | {
359 | -webkit-animation: fade-down 1.5s infinite linear;
360 | animation: fade-down 1.5s infinite linear;
361 | }
362 | .bx-fade-down-hover:hover
363 | {
364 | -webkit-animation: fade-down 1.5s infinite linear;
365 | animation: fade-down 1.5s infinite linear;
366 | }
367 | .bx-fade-left
368 | {
369 | -webkit-animation: fade-left 1.5s infinite linear;
370 | animation: fade-left 1.5s infinite linear;
371 | }
372 | .bx-fade-left-hover:hover
373 | {
374 | -webkit-animation: fade-left 1.5s infinite linear;
375 | animation: fade-left 1.5s infinite linear;
376 | }
377 | .bx-fade-right
378 | {
379 | -webkit-animation: fade-right 1.5s infinite linear;
380 | animation: fade-right 1.5s infinite linear;
381 | }
382 | .bx-fade-right-hover:hover
383 | {
384 | -webkit-animation: fade-right 1.5s infinite linear;
385 | animation: fade-right 1.5s infinite linear;
386 | }
--------------------------------------------------------------------------------
/static/assets/vendor/boxicons/css/transformations.css:
--------------------------------------------------------------------------------
1 | .bx-rotate-90
2 | {
3 | transform: rotate(90deg);
4 |
5 | -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)';
6 | }
7 | .bx-rotate-180
8 | {
9 | transform: rotate(180deg);
10 |
11 | -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)';
12 | }
13 | .bx-rotate-270
14 | {
15 | transform: rotate(270deg);
16 |
17 | -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)';
18 | }
19 | .bx-flip-horizontal
20 | {
21 | transform: scaleX(-1);
22 |
23 | -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)';
24 | }
25 | .bx-flip-vertical
26 | {
27 | transform: scaleY(-1);
28 |
29 | -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)';
30 | }
31 |
--------------------------------------------------------------------------------
/static/assets/vendor/boxicons/fonts/boxicons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/vendor/boxicons/fonts/boxicons.eot
--------------------------------------------------------------------------------
/static/assets/vendor/boxicons/fonts/boxicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/vendor/boxicons/fonts/boxicons.ttf
--------------------------------------------------------------------------------
/static/assets/vendor/boxicons/fonts/boxicons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/vendor/boxicons/fonts/boxicons.woff
--------------------------------------------------------------------------------
/static/assets/vendor/boxicons/fonts/boxicons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/vendor/boxicons/fonts/boxicons.woff2
--------------------------------------------------------------------------------
/static/assets/vendor/counterup/counterup.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jquery.counterup.js 2.1.0
3 | *
4 | * Copyright 2013, Benjamin Intal http://gambit.ph @bfintal
5 | * Released under the GPL v2 License
6 | *
7 | * Amended by Jeremy Paris, Ciro Mattia Gonano and others
8 | *
9 | * Date: Feb 24, 2017
10 | */
11 | (function($){"use strict";$.fn.counterUp=function(options){var settings=$.extend({time:400,delay:10,offset:100,beginAt:0,formatter:false,context:"window",callback:function(){}},options),s;return this.each(function(){var $this=$(this),counter={time:$(this).data("counterup-time")||settings.time,delay:$(this).data("counterup-delay")||settings.delay,offset:$(this).data("counterup-offset")||settings.offset,beginAt:$(this).data("counterup-beginat")||settings.beginAt,context:$(this).data("counterup-context")||settings.context};var counterUpper=function(){var nums=[];var divisions=counter.time/counter.delay;var num=$(this).attr("data-num")?$(this).attr("data-num"):$this.text();var isComma=/[0-9]+,[0-9]+/.test(num);num=num.replace(/,/g,"");var decimalPlaces=(num.split(".")[1]||[]).length;if(counter.beginAt>num)counter.beginAt=num;var isTime=/[0-9]+:[0-9]+:[0-9]+/.test(num);if(isTime){var times=num.split(":"),m=1;s=0;while(times.length>0){s+=m*parseInt(times.pop(),10);m*=60}}for(var i=divisions;i>=counter.beginAt/num*divisions;i--){var newNum=parseFloat(num/divisions*i).toFixed(decimalPlaces);if(isTime){newNum=parseInt(s/divisions*i);var hours=parseInt(newNum/3600)%24;var minutes=parseInt(newNum/60)%60;var seconds=parseInt(newNum%60,10);newNum=(hours<10?"0"+hours:hours)+":"+(minutes<10?"0"+minutes:minutes)+":"+(seconds<10?"0"+seconds:seconds)}if(isComma){while(/(\d+)(\d{3})/.test(newNum.toString())){newNum=newNum.toString().replace(/(\d+)(\d{3})/,"$1"+","+"$2")}}if(settings.formatter){newNum=settings.formatter.call(this,newNum)}nums.unshift(newNum)}$this.data("counterup-nums",nums);$this.text(counter.beginAt);var f=function(){if(!$this.data("counterup-nums")){settings.callback.call(this);return}$this.html($this.data("counterup-nums").shift());if($this.data("counterup-nums").length){setTimeout($this.data("counterup-func"),counter.delay)}else{$this.data("counterup-nums",null);$this.data("counterup-func",null);settings.callback.call(this)}};$this.data("counterup-func",f);setTimeout($this.data("counterup-func"),counter.delay)};$this.waypoint(function(direction){counterUpper();this.destroy()},{offset:counter.offset+"%",context:counter.context})})}})(jQuery);
12 |
--------------------------------------------------------------------------------
/static/assets/vendor/icofont/fonts/icofont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/vendor/icofont/fonts/icofont.woff
--------------------------------------------------------------------------------
/static/assets/vendor/icofont/fonts/icofont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/assets/vendor/icofont/fonts/icofont.woff2
--------------------------------------------------------------------------------
/static/assets/vendor/jquery-sticky/jquery.sticky.js:
--------------------------------------------------------------------------------
1 | // Sticky Plugin v1.0.4 for jQuery
2 | // =============
3 | // Author: Anthony Garand
4 | // Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
5 | // Improvements by Leonardo C. Daronco (daronco)
6 | // Created: 02/14/2011
7 | // Date: 07/20/2015
8 | // Website: http://stickyjs.com/
9 | // Description: Makes an element on the page stick on the screen as you scroll
10 | // It will only set the 'top' and 'position' of your element, you
11 | // might need to adjust the width in some cases.
12 |
13 | (function (factory) {
14 | if (typeof define === 'function' && define.amd) {
15 | // AMD. Register as an anonymous module.
16 | define(['jquery'], factory);
17 | } else if (typeof module === 'object' && module.exports) {
18 | // Node/CommonJS
19 | module.exports = factory(require('jquery'));
20 | } else {
21 | // Browser globals
22 | factory(jQuery);
23 | }
24 | }(function ($) {
25 | var slice = Array.prototype.slice; // save ref to original slice()
26 | var splice = Array.prototype.splice; // save ref to original slice()
27 |
28 | var defaults = {
29 | topSpacing: 0,
30 | bottomSpacing: 0,
31 | className: 'is-sticky',
32 | wrapperClassName: 'sticky-wrapper',
33 | center: false,
34 | getWidthFrom: '',
35 | widthFromWrapper: true, // works only when .getWidthFrom is empty
36 | responsiveWidth: false,
37 | zIndex: 'auto'
38 | },
39 | $window = $(window),
40 | $document = $(document),
41 | sticked = [],
42 | windowHeight = $window.height(),
43 | scroller = function() {
44 | var scrollTop = $window.scrollTop(),
45 | documentHeight = $document.height(),
46 | dwh = documentHeight - windowHeight,
47 | extra = (scrollTop > dwh) ? dwh - scrollTop : 0;
48 |
49 | for (var i = 0, l = sticked.length; i < l; i++) {
50 | var s = sticked[i],
51 | elementTop = s.stickyWrapper.offset().top,
52 | etse = elementTop - s.topSpacing - extra;
53 |
54 | //update height in case of dynamic content
55 | s.stickyWrapper.css('height', s.stickyElement.outerHeight());
56 |
57 | if (scrollTop <= etse) {
58 | if (s.currentTop !== null) {
59 | s.stickyElement
60 | .css({
61 | 'width': '',
62 | 'position': '',
63 | 'top': '',
64 | 'z-index': ''
65 | });
66 | s.stickyElement.parent().removeClass(s.className);
67 | s.stickyElement.trigger('sticky-end', [s]);
68 | s.currentTop = null;
69 | }
70 | }
71 | else {
72 | var newTop = documentHeight - s.stickyElement.outerHeight()
73 | - s.topSpacing - s.bottomSpacing - scrollTop - extra;
74 | if (newTop < 0) {
75 | newTop = newTop + s.topSpacing;
76 | } else {
77 | newTop = s.topSpacing;
78 | }
79 | if (s.currentTop !== newTop) {
80 | var newWidth;
81 | if (s.getWidthFrom) {
82 | newWidth = $(s.getWidthFrom).width() || null;
83 | } else if (s.widthFromWrapper) {
84 | newWidth = s.stickyWrapper.width();
85 | }
86 | if (newWidth == null) {
87 | newWidth = s.stickyElement.width();
88 | }
89 | s.stickyElement
90 | .css('width', newWidth)
91 | .css('position', 'fixed')
92 | .css('top', newTop)
93 | .css('z-index', s.zIndex);
94 |
95 | s.stickyElement.parent().addClass(s.className);
96 |
97 | if (s.currentTop === null) {
98 | s.stickyElement.trigger('sticky-start', [s]);
99 | } else {
100 | // sticky is started but it have to be repositioned
101 | s.stickyElement.trigger('sticky-update', [s]);
102 | }
103 |
104 | if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {
105 | // just reached bottom || just started to stick but bottom is already reached
106 | s.stickyElement.trigger('sticky-bottom-reached', [s]);
107 | } else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {
108 | // sticky is started && sticked at topSpacing && overflowing from top just finished
109 | s.stickyElement.trigger('sticky-bottom-unreached', [s]);
110 | }
111 |
112 | s.currentTop = newTop;
113 | }
114 |
115 | // Check if sticky has reached end of container and stop sticking
116 | var stickyWrapperContainer = s.stickyWrapper.parent();
117 | var unstick = (s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight()) && (s.stickyElement.offset().top <= s.topSpacing);
118 |
119 | if( unstick ) {
120 | s.stickyElement
121 | .css('position', 'absolute')
122 | .css('top', '')
123 | .css('bottom', 0)
124 | .css('z-index', '');
125 | } else {
126 | s.stickyElement
127 | .css('position', 'fixed')
128 | .css('top', newTop)
129 | .css('bottom', '')
130 | .css('z-index', s.zIndex);
131 | }
132 | }
133 | }
134 | },
135 | resizer = function() {
136 | windowHeight = $window.height();
137 |
138 | for (var i = 0, l = sticked.length; i < l; i++) {
139 | var s = sticked[i];
140 | var newWidth = null;
141 | if (s.getWidthFrom) {
142 | if (s.responsiveWidth) {
143 | newWidth = $(s.getWidthFrom).width();
144 | }
145 | } else if(s.widthFromWrapper) {
146 | newWidth = s.stickyWrapper.width();
147 | }
148 | if (newWidth != null) {
149 | s.stickyElement.css('width', newWidth);
150 | }
151 | }
152 | },
153 | methods = {
154 | init: function(options) {
155 | var o = $.extend({}, defaults, options);
156 | return this.each(function() {
157 | var stickyElement = $(this);
158 |
159 | var stickyId = stickyElement.attr('id');
160 | var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;
161 | var wrapper = $('')
162 | .attr('id', wrapperId)
163 | .addClass(o.wrapperClassName);
164 |
165 | stickyElement.wrapAll(wrapper);
166 |
167 | var stickyWrapper = stickyElement.parent();
168 |
169 | if (o.center) {
170 | stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"});
171 | }
172 |
173 | if (stickyElement.css("float") === "right") {
174 | stickyElement.css({"float":"none"}).parent().css({"float":"right"});
175 | }
176 |
177 | o.stickyElement = stickyElement;
178 | o.stickyWrapper = stickyWrapper;
179 | o.currentTop = null;
180 |
181 | sticked.push(o);
182 |
183 | methods.setWrapperHeight(this);
184 | methods.setupChangeListeners(this);
185 | });
186 | },
187 |
188 | setWrapperHeight: function(stickyElement) {
189 | var element = $(stickyElement);
190 | var stickyWrapper = element.parent();
191 | if (stickyWrapper) {
192 | stickyWrapper.css('height', element.outerHeight());
193 | }
194 | },
195 |
196 | setupChangeListeners: function(stickyElement) {
197 | if (window.MutationObserver) {
198 | var mutationObserver = new window.MutationObserver(function(mutations) {
199 | if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {
200 | methods.setWrapperHeight(stickyElement);
201 | }
202 | });
203 | mutationObserver.observe(stickyElement, {subtree: true, childList: true});
204 | } else {
205 | stickyElement.addEventListener('DOMNodeInserted', function() {
206 | methods.setWrapperHeight(stickyElement);
207 | }, false);
208 | stickyElement.addEventListener('DOMNodeRemoved', function() {
209 | methods.setWrapperHeight(stickyElement);
210 | }, false);
211 | }
212 | },
213 | update: scroller,
214 | unstick: function(options) {
215 | return this.each(function() {
216 | var that = this;
217 | var unstickyElement = $(that);
218 |
219 | var removeIdx = -1;
220 | var i = sticked.length;
221 | while (i-- > 0) {
222 | if (sticked[i].stickyElement.get(0) === that) {
223 | splice.call(sticked,i,1);
224 | removeIdx = i;
225 | }
226 | }
227 | if(removeIdx !== -1) {
228 | unstickyElement.unwrap();
229 | unstickyElement
230 | .css({
231 | 'width': '',
232 | 'position': '',
233 | 'top': '',
234 | 'float': '',
235 | 'z-index': ''
236 | })
237 | ;
238 | }
239 | });
240 | }
241 | };
242 |
243 | // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
244 | if (window.addEventListener) {
245 | window.addEventListener('scroll', scroller, false);
246 | window.addEventListener('resize', resizer, false);
247 | } else if (window.attachEvent) {
248 | window.attachEvent('onscroll', scroller);
249 | window.attachEvent('onresize', resizer);
250 | }
251 |
252 | $.fn.sticky = function(method) {
253 | if (methods[method]) {
254 | return methods[method].apply(this, slice.call(arguments, 1));
255 | } else if (typeof method === 'object' || !method ) {
256 | return methods.init.apply( this, arguments );
257 | } else {
258 | $.error('Method ' + method + ' does not exist on jQuery.sticky');
259 | }
260 | };
261 |
262 | $.fn.unstick = function(method) {
263 | if (methods[method]) {
264 | return methods[method].apply(this, slice.call(arguments, 1));
265 | } else if (typeof method === 'object' || !method ) {
266 | return methods.unstick.apply( this, arguments );
267 | } else {
268 | $.error('Method ' + method + ' does not exist on jQuery.sticky');
269 | }
270 | };
271 | $(function() {
272 | setTimeout(scroller, 0);
273 | });
274 | }));
275 |
--------------------------------------------------------------------------------
/static/assets/vendor/jquery.easing/jquery.easing.min.js:
--------------------------------------------------------------------------------
1 | (function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],function($){return factory($)})}else if(typeof module==="object"&&typeof module.exports==="object"){exports=factory(require("jquery"))}else{factory(jQuery)}})(function($){$.easing.jswing=$.easing.swing;var pow=Math.pow,sqrt=Math.sqrt,sin=Math.sin,cos=Math.cos,PI=Math.PI,c1=1.70158,c2=c1*1.525,c3=c1+1,c4=2*PI/3,c5=2*PI/4.5;function bounceOut(x){var n1=7.5625,d1=2.75;if(x<1/d1){return n1*x*x}else if(x<2/d1){return n1*(x-=1.5/d1)*x+.75}else if(x<2.5/d1){return n1*(x-=2.25/d1)*x+.9375}else{return n1*(x-=2.625/d1)*x+.984375}}$.extend($.easing,{def:"easeOutQuad",swing:function(x){return $.easing[$.easing.def](x)},easeInQuad:function(x){return x*x},easeOutQuad:function(x){return 1-(1-x)*(1-x)},easeInOutQuad:function(x){return x<.5?2*x*x:1-pow(-2*x+2,2)/2},easeInCubic:function(x){return x*x*x},easeOutCubic:function(x){return 1-pow(1-x,3)},easeInOutCubic:function(x){return x<.5?4*x*x*x:1-pow(-2*x+2,3)/2},easeInQuart:function(x){return x*x*x*x},easeOutQuart:function(x){return 1-pow(1-x,4)},easeInOutQuart:function(x){return x<.5?8*x*x*x*x:1-pow(-2*x+2,4)/2},easeInQuint:function(x){return x*x*x*x*x},easeOutQuint:function(x){return 1-pow(1-x,5)},easeInOutQuint:function(x){return x<.5?16*x*x*x*x*x:1-pow(-2*x+2,5)/2},easeInSine:function(x){return 1-cos(x*PI/2)},easeOutSine:function(x){return sin(x*PI/2)},easeInOutSine:function(x){return-(cos(PI*x)-1)/2},easeInExpo:function(x){return x===0?0:pow(2,10*x-10)},easeOutExpo:function(x){return x===1?1:1-pow(2,-10*x)},easeInOutExpo:function(x){return x===0?0:x===1?1:x<.5?pow(2,20*x-10)/2:(2-pow(2,-20*x+10))/2},easeInCirc:function(x){return 1-sqrt(1-pow(x,2))},easeOutCirc:function(x){return sqrt(1-pow(x-1,2))},easeInOutCirc:function(x){return x<.5?(1-sqrt(1-pow(2*x,2)))/2:(sqrt(1-pow(-2*x+2,2))+1)/2},easeInElastic:function(x){return x===0?0:x===1?1:-pow(2,10*x-10)*sin((x*10-10.75)*c4)},easeOutElastic:function(x){return x===0?0:x===1?1:pow(2,-10*x)*sin((x*10-.75)*c4)+1},easeInOutElastic:function(x){return x===0?0:x===1?1:x<.5?-(pow(2,20*x-10)*sin((20*x-11.125)*c5))/2:pow(2,-20*x+10)*sin((20*x-11.125)*c5)/2+1},easeInBack:function(x){return c3*x*x*x-c1*x*x},easeOutBack:function(x){return 1+c3*pow(x-1,3)+c1*pow(x-1,2)},easeInOutBack:function(x){return x<.5?pow(2*x,2)*((c2+1)*2*x-c2)/2:(pow(2*x-2,2)*((c2+1)*(x*2-2)+c2)+2)/2},easeInBounce:function(x){return 1-bounceOut(1-x)},easeOutBounce:bounceOut,easeInOutBounce:function(x){return x<.5?(1-bounceOut(1-2*x))/2:(1+bounceOut(2*x-1))/2}})});
--------------------------------------------------------------------------------
/static/assets/vendor/venobox/venobox.css:
--------------------------------------------------------------------------------
1 | /* ------ venobox.css --------*/
2 | .vbox-overlay *, .vbox-overlay *:before, .vbox-overlay *:after{
3 | -webkit-backface-visibility: hidden;
4 | -webkit-box-sizing:border-box;
5 | -moz-box-sizing:border-box;
6 | box-sizing:border-box;
7 | }
8 | .vbox-overlay * {
9 | -webkit-backface-visibility: visible;
10 | backface-visibility: visible;
11 | }
12 | .vbox-overlay{
13 | display: -webkit-flex;
14 | display: flex;
15 | -webkit-flex-direction: column;
16 | flex-direction: column;
17 | -webkit-justify-content: center;
18 | justify-content: center;
19 | -webkit-align-items: center;
20 | align-items: center;
21 | position: fixed;
22 | left: 0;
23 | top: 0;
24 | bottom: 0;
25 | right: 0;
26 | z-index: 1040;
27 | -webkit-transform:translateZ(1000px);
28 | transform: translateZ(1000px);
29 | transform-style: preserve-3d;
30 | }
31 |
32 | /* ----- navigation ----- */
33 | .vbox-title{
34 | width: 100%;
35 | height: 40px;
36 | float: left;
37 | text-align: center;
38 | line-height: 28px;
39 | font-size: 12px;
40 | padding: 6px 40px;
41 | overflow: hidden;
42 | position: fixed;
43 | display: none;
44 | left: 0;
45 | z-index: 1050;
46 | }
47 | .vbox-close{
48 | cursor: pointer;
49 | position: fixed;
50 | top: -1px;
51 | right: 0;
52 | width: 50px;
53 | height: 40px;
54 | padding: 6px;
55 | display: block;
56 | background-position:10px center;
57 | overflow: hidden;
58 | font-size: 24px;
59 | line-height: 1;
60 | text-align: center;
61 | z-index: 1050;
62 | }
63 | .vbox-num{
64 | cursor: pointer;
65 | position: fixed;
66 | left: 0;
67 | height: 40px;
68 | display: block;
69 | overflow: hidden;
70 | line-height: 28px;
71 | font-size: 12px;
72 | padding: 6px 10px;
73 | display: none;
74 | z-index: 1050;
75 | }
76 | /* ----- navigation ARROWS ----- */
77 | .vbox-next, .vbox-prev{
78 | position: fixed;
79 | top: 50%;
80 | margin-top: -15px;
81 | overflow: hidden;
82 | cursor: pointer;
83 | display: block;
84 | width: 45px;
85 | height: 45px;
86 | z-index: 1050;
87 | }
88 | .vbox-next span, .vbox-prev span{
89 | position: relative;
90 | width: 20px;
91 | height: 20px;
92 | border: 2px solid transparent;
93 | border-top-color: #B6B6B6;
94 | border-right-color: #B6B6B6;
95 | text-indent: -100px;
96 | position: absolute;
97 | top: 8px;
98 | display: block;
99 | }
100 | .vbox-prev{
101 | left: 15px;
102 | }
103 | .vbox-next{
104 | right: 15px;
105 | }
106 | .vbox-prev span{
107 | left: 10px;
108 | -ms-transform: rotate(-135deg);
109 | -webkit-transform: rotate(-135deg);
110 | transform: rotate(-135deg);
111 | }
112 | .vbox-next span{
113 | -ms-transform: rotate(45deg);
114 | -webkit-transform: rotate(45deg);
115 | transform: rotate(45deg);
116 | right: 10px;
117 | }
118 | /* ------- inline window ------ */
119 | .vbox-inline{
120 | width: 420px;
121 | height: 315px;
122 | height: 70vh;
123 | padding: 10px;
124 | background: #fff;
125 | margin: 0 auto;
126 | overflow: auto;
127 | text-align: left;
128 | }
129 | /* ------- Video & iFrames window ------ */
130 | .venoframe{
131 | max-width: 100%;
132 | width: 100%;
133 | border: none;
134 | width: 100%;
135 | height: 260px;
136 | height: 70vh;
137 | }
138 | .venoframe.vbvid{
139 | height: 260px;
140 | }
141 | @media (min-width: 768px) {
142 | .venoframe, .vbox-inline{
143 | width: 90%;
144 | height: 360px;
145 | height: 70vh;
146 | }
147 | .venoframe.vbvid{
148 | width: 640px;
149 | height: 360px;
150 | }
151 | }
152 | @media (min-width: 992px) {
153 | .venoframe, .vbox-inline{
154 | max-width: 1200px;
155 | width: 80%;
156 | height: 540px;
157 | height: 70vh;
158 | }
159 | .venoframe.vbvid{
160 | width: 960px;
161 | height: 540px;
162 | }
163 | }
164 | /*
165 | Please do NOT edit this part!
166 | or at least read this note: http://i.imgur.com/7C0ws9e.gif
167 | */
168 | .vbox-open{
169 | overflow: hidden;
170 | }
171 | .vbox-container{
172 | position: absolute;
173 | left: 0;
174 | right: 0;
175 | top: 0;
176 | bottom: 0;
177 | overflow-x: hidden;
178 | overflow-y: scroll;
179 | overflow-scrolling: touch;
180 | -webkit-overflow-scrolling: touch;
181 | z-index: 20;
182 | max-height: 100%;
183 |
184 | }
185 |
186 | .vbox-content{
187 | text-align: center;
188 | float: left;
189 | width: 100%;
190 | position: relative;
191 | overflow: hidden;
192 | padding: 20px 10px;
193 | }
194 | .vbox-container img{
195 | max-width: 100%;
196 | height: auto;
197 | }
198 | .vbox-figlio{
199 | box-shadow: 0 0 12px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);
200 | max-width: 100%;
201 | text-align: initial;
202 | }
203 | img.vbox-figlio{
204 | -webkit-user-select: none;
205 | -khtml-user-select: none;
206 | -moz-user-select: none;
207 | -o-user-select: none;
208 | user-select: none;
209 | }
210 | .vbox-content.swipe-left{
211 | margin-left: -200px !important;
212 | }
213 | .vbox-content.swipe-right{
214 | margin-left: 200px !important;
215 | }
216 | .vbox-animated{
217 | webkit-transition: margin 300ms ease-out;
218 | transition: margin 300ms ease-out;
219 | }
220 |
221 | /* ---------- preloader ----------
222 | * SPINKIT
223 | * http://tobiasahlin.com/spinkit/
224 | -------------------------------- */
225 | .sk-double-bounce,.sk-rotating-plane{width:40px;height:40px;margin:40px auto}.sk-rotating-plane{background-color:#333;-webkit-animation:sk-rotatePlane 1.2s infinite ease-in-out;animation:sk-rotatePlane 1.2s infinite ease-in-out}@-webkit-keyframes sk-rotatePlane{0%{-webkit-transform:perspective(120px) rotateX(0) rotateY(0);transform:perspective(120px) rotateX(0) rotateY(0)}50%{-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0);transform:perspective(120px) rotateX(-180.1deg) rotateY(0)}100%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}@keyframes sk-rotatePlane{0%{-webkit-transform:perspective(120px) rotateX(0) rotateY(0);transform:perspective(120px) rotateX(0) rotateY(0)}50%{-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0);transform:perspective(120px) rotateX(-180.1deg) rotateY(0)}100%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.sk-double-bounce{position:relative}.sk-double-bounce .sk-child{width:100%;height:100%;border-radius:50%;background-color:#333;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:sk-doubleBounce 2s infinite ease-in-out;animation:sk-doubleBounce 2s infinite ease-in-out}.sk-chasing-dots .sk-child,.sk-spinner-pulse,.sk-three-bounce .sk-child{background-color:#333;border-radius:100%}.sk-double-bounce .sk-double-bounce2{-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes sk-doubleBounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-doubleBounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}.sk-wave{margin:40px auto;width:50px;height:40px;text-align:center;font-size:10px}.sk-wave .sk-rect{background-color:#333;height:100%;width:6px;display:inline-block;-webkit-animation:sk-waveStretchDelay 1.2s infinite ease-in-out;animation:sk-waveStretchDelay 1.2s infinite ease-in-out}.sk-wave .sk-rect1{-webkit-animation-delay:-1.2s;animation-delay:-1.2s}.sk-wave .sk-rect2{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.sk-wave .sk-rect3{-webkit-animation-delay:-1s;animation-delay:-1s}.sk-wave .sk-rect4{-webkit-animation-delay:-.9s;animation-delay:-.9s}.sk-wave .sk-rect5{-webkit-animation-delay:-.8s;animation-delay:-.8s}@-webkit-keyframes sk-waveStretchDelay{0%,100%,40%{-webkit-transform:scaleY(.4);transform:scaleY(.4)}20%{-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes sk-waveStretchDelay{0%,100%,40%{-webkit-transform:scaleY(.4);transform:scaleY(.4)}20%{-webkit-transform:scaleY(1);transform:scaleY(1)}}.sk-wandering-cubes{margin:40px auto;width:40px;height:40px;position:relative}.sk-wandering-cubes .sk-cube{background-color:#333;width:10px;height:10px;position:absolute;top:0;left:0;-webkit-animation:sk-wanderingCube 1.8s ease-in-out -1.8s infinite both;animation:sk-wanderingCube 1.8s ease-in-out -1.8s infinite both}.sk-chasing-dots,.sk-spinner-pulse{width:40px;height:40px;margin:40px auto}.sk-wandering-cubes .sk-cube2{-webkit-animation-delay:-.9s;animation-delay:-.9s}@-webkit-keyframes sk-wanderingCube{0%{-webkit-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:translateX(30px) rotate(-90deg) scale(.5);transform:translateX(30px) rotate(-90deg) scale(.5)}50%{-webkit-transform:translateX(30px) translateY(30px) rotate(-179deg);transform:translateX(30px) translateY(30px) rotate(-179deg)}50.1%{-webkit-transform:translateX(30px) translateY(30px) rotate(-180deg);transform:translateX(30px) translateY(30px) rotate(-180deg)}75%{-webkit-transform:translateX(0) translateY(30px) rotate(-270deg) scale(.5);transform:translateX(0) translateY(30px) rotate(-270deg) scale(.5)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes sk-wanderingCube{0%{-webkit-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:translateX(30px) rotate(-90deg) scale(.5);transform:translateX(30px) rotate(-90deg) scale(.5)}50%{-webkit-transform:translateX(30px) translateY(30px) rotate(-179deg);transform:translateX(30px) translateY(30px) rotate(-179deg)}50.1%{-webkit-transform:translateX(30px) translateY(30px) rotate(-180deg);transform:translateX(30px) translateY(30px) rotate(-180deg)}75%{-webkit-transform:translateX(0) translateY(30px) rotate(-270deg) scale(.5);transform:translateX(0) translateY(30px) rotate(-270deg) scale(.5)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}.sk-spinner-pulse{-webkit-animation:sk-pulseScaleOut 1s infinite ease-in-out;animation:sk-pulseScaleOut 1s infinite ease-in-out}@-webkit-keyframes sk-pulseScaleOut{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}@keyframes sk-pulseScaleOut{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}.sk-chasing-dots{position:relative;text-align:center;-webkit-animation:sk-chasingDotsRotate 2s infinite linear;animation:sk-chasingDotsRotate 2s infinite linear}.sk-chasing-dots .sk-child{width:60%;height:60%;display:inline-block;position:absolute;top:0;-webkit-animation:sk-chasingDotsBounce 2s infinite ease-in-out;animation:sk-chasingDotsBounce 2s infinite ease-in-out}.sk-chasing-dots .sk-dot2{top:auto;bottom:0;-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes sk-chasingDotsRotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes sk-chasingDotsRotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes sk-chasingDotsBounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-chasingDotsBounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}.sk-three-bounce{margin:40px auto;width:80px;text-align:center}.sk-three-bounce .sk-child{width:20px;height:20px;display:inline-block;-webkit-animation:sk-three-bounce 1.4s ease-in-out 0s infinite both;animation:sk-three-bounce 1.4s ease-in-out 0s infinite both}.sk-circle .sk-child:before,.sk-fading-circle .sk-circle:before{display:block;border-radius:100%;content:'';background-color:#333}.sk-three-bounce .sk-bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.sk-three-bounce .sk-bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes sk-three-bounce{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-three-bounce{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.sk-circle{margin:40px auto;width:40px;height:40px;position:relative}.sk-circle .sk-child{width:100%;height:100%;position:absolute;left:0;top:0}.sk-circle .sk-child:before{margin:0 auto;width:15%;height:15%;-webkit-animation:sk-circleBounceDelay 1.2s infinite ease-in-out both;animation:sk-circleBounceDelay 1.2s infinite ease-in-out both}.sk-circle .sk-circle2{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);transform:rotate(30deg)}.sk-circle .sk-circle3{-webkit-transform:rotate(60deg);-ms-transform:rotate(60deg);transform:rotate(60deg)}.sk-circle .sk-circle4{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.sk-circle .sk-circle5{-webkit-transform:rotate(120deg);-ms-transform:rotate(120deg);transform:rotate(120deg)}.sk-circle .sk-circle6{-webkit-transform:rotate(150deg);-ms-transform:rotate(150deg);transform:rotate(150deg)}.sk-circle .sk-circle7{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.sk-circle .sk-circle8{-webkit-transform:rotate(210deg);-ms-transform:rotate(210deg);transform:rotate(210deg)}.sk-circle .sk-circle9{-webkit-transform:rotate(240deg);-ms-transform:rotate(240deg);transform:rotate(240deg)}.sk-circle .sk-circle10{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.sk-circle .sk-circle11{-webkit-transform:rotate(300deg);-ms-transform:rotate(300deg);transform:rotate(300deg)}.sk-circle .sk-circle12{-webkit-transform:rotate(330deg);-ms-transform:rotate(330deg);transform:rotate(330deg)}.sk-circle .sk-circle2:before{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.sk-circle .sk-circle3:before{-webkit-animation-delay:-1s;animation-delay:-1s}.sk-circle .sk-circle4:before{-webkit-animation-delay:-.9s;animation-delay:-.9s}.sk-circle .sk-circle5:before{-webkit-animation-delay:-.8s;animation-delay:-.8s}.sk-circle .sk-circle6:before{-webkit-animation-delay:-.7s;animation-delay:-.7s}.sk-circle .sk-circle7:before{-webkit-animation-delay:-.6s;animation-delay:-.6s}.sk-circle .sk-circle8:before{-webkit-animation-delay:-.5s;animation-delay:-.5s}.sk-circle .sk-circle9:before{-webkit-animation-delay:-.4s;animation-delay:-.4s}.sk-circle .sk-circle10:before{-webkit-animation-delay:-.3s;animation-delay:-.3s}.sk-circle .sk-circle11:before{-webkit-animation-delay:-.2s;animation-delay:-.2s}.sk-circle .sk-circle12:before{-webkit-animation-delay:-.1s;animation-delay:-.1s}@-webkit-keyframes sk-circleBounceDelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-circleBounceDelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.sk-cube-grid{width:40px;height:40px;margin:40px auto}.sk-cube-grid .sk-cube{width:33.33%;height:33.33%;background-color:#333;float:left;-webkit-animation:sk-cubeGridScaleDelay 1.3s infinite ease-in-out;animation:sk-cubeGridScaleDelay 1.3s infinite ease-in-out}.sk-cube-grid .sk-cube1{-webkit-animation-delay:.2s;animation-delay:.2s}.sk-cube-grid .sk-cube2{-webkit-animation-delay:.3s;animation-delay:.3s}.sk-cube-grid .sk-cube3{-webkit-animation-delay:.4s;animation-delay:.4s}.sk-cube-grid .sk-cube4{-webkit-animation-delay:.1s;animation-delay:.1s}.sk-cube-grid .sk-cube5{-webkit-animation-delay:.2s;animation-delay:.2s}.sk-cube-grid .sk-cube6{-webkit-animation-delay:.3s;animation-delay:.3s}.sk-cube-grid .sk-cube7{-webkit-animation-delay:0ms;animation-delay:0ms}.sk-cube-grid .sk-cube8{-webkit-animation-delay:.1s;animation-delay:.1s}.sk-cube-grid .sk-cube9{-webkit-animation-delay:.2s;animation-delay:.2s}@-webkit-keyframes sk-cubeGridScaleDelay{0%,100%,70%{-webkit-transform:scale3D(1,1,1);transform:scale3D(1,1,1)}35%{-webkit-transform:scale3D(0,0,1);transform:scale3D(0,0,1)}}@keyframes sk-cubeGridScaleDelay{0%,100%,70%{-webkit-transform:scale3D(1,1,1);transform:scale3D(1,1,1)}35%{-webkit-transform:scale3D(0,0,1);transform:scale3D(0,0,1)}}.sk-fading-circle{margin:40px auto;width:40px;height:40px;position:relative}.sk-fading-circle .sk-circle{width:100%;height:100%;position:absolute;left:0;top:0}.sk-fading-circle .sk-circle:before{margin:0 auto;width:15%;height:15%;-webkit-animation:sk-circleFadeDelay 1.2s infinite ease-in-out both;animation:sk-circleFadeDelay 1.2s infinite ease-in-out both}.sk-fading-circle .sk-circle2{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);transform:rotate(30deg)}.sk-fading-circle .sk-circle3{-webkit-transform:rotate(60deg);-ms-transform:rotate(60deg);transform:rotate(60deg)}.sk-fading-circle .sk-circle4{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.sk-fading-circle .sk-circle5{-webkit-transform:rotate(120deg);-ms-transform:rotate(120deg);transform:rotate(120deg)}.sk-fading-circle .sk-circle6{-webkit-transform:rotate(150deg);-ms-transform:rotate(150deg);transform:rotate(150deg)}.sk-fading-circle .sk-circle7{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.sk-fading-circle .sk-circle8{-webkit-transform:rotate(210deg);-ms-transform:rotate(210deg);transform:rotate(210deg)}.sk-fading-circle .sk-circle9{-webkit-transform:rotate(240deg);-ms-transform:rotate(240deg);transform:rotate(240deg)}.sk-fading-circle .sk-circle10{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.sk-fading-circle .sk-circle11{-webkit-transform:rotate(300deg);-ms-transform:rotate(300deg);transform:rotate(300deg)}.sk-fading-circle .sk-circle12{-webkit-transform:rotate(330deg);-ms-transform:rotate(330deg);transform:rotate(330deg)}.sk-fading-circle .sk-circle2:before{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.sk-fading-circle .sk-circle3:before{-webkit-animation-delay:-1s;animation-delay:-1s}.sk-fading-circle .sk-circle4:before{-webkit-animation-delay:-.9s;animation-delay:-.9s}.sk-fading-circle .sk-circle5:before{-webkit-animation-delay:-.8s;animation-delay:-.8s}.sk-fading-circle .sk-circle6:before{-webkit-animation-delay:-.7s;animation-delay:-.7s}.sk-fading-circle .sk-circle7:before{-webkit-animation-delay:-.6s;animation-delay:-.6s}.sk-fading-circle .sk-circle8:before{-webkit-animation-delay:-.5s;animation-delay:-.5s}.sk-fading-circle .sk-circle9:before{-webkit-animation-delay:-.4s;animation-delay:-.4s}.sk-fading-circle .sk-circle10:before{-webkit-animation-delay:-.3s;animation-delay:-.3s}.sk-fading-circle .sk-circle11:before{-webkit-animation-delay:-.2s;animation-delay:-.2s}.sk-fading-circle .sk-circle12:before{-webkit-animation-delay:-.1s;animation-delay:-.1s}@-webkit-keyframes sk-circleFadeDelay{0%,100%,39%{opacity:0}40%{opacity:1}}@keyframes sk-circleFadeDelay{0%,100%,39%{opacity:0}40%{opacity:1}}.sk-folding-cube{margin:40px auto;width:40px;height:40px;position:relative;-webkit-transform:rotateZ(45deg);transform:rotateZ(45deg)}.sk-folding-cube .sk-cube{float:left;width:50%;height:50%;position:relative;-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.sk-folding-cube .sk-cube:before{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background-color:#333;-webkit-animation:sk-foldCubeAngle 2.4s infinite linear both;animation:sk-foldCubeAngle 2.4s infinite linear both;-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.sk-folding-cube .sk-cube2{-webkit-transform:scale(1.1) rotateZ(90deg);transform:scale(1.1) rotateZ(90deg)}.sk-folding-cube .sk-cube3{-webkit-transform:scale(1.1) rotateZ(180deg);transform:scale(1.1) rotateZ(180deg)}.sk-folding-cube .sk-cube4{-webkit-transform:scale(1.1) rotateZ(270deg);transform:scale(1.1) rotateZ(270deg)}.sk-folding-cube .sk-cube2:before{-webkit-animation-delay:.3s;animation-delay:.3s}.sk-folding-cube .sk-cube3:before{-webkit-animation-delay:.6s;animation-delay:.6s}.sk-folding-cube .sk-cube4:before{-webkit-animation-delay:.9s;animation-delay:.9s}@-webkit-keyframes sk-foldCubeAngle{0%,10%{-webkit-transform:perspective(140px) rotateX(-180deg);transform:perspective(140px) rotateX(-180deg);opacity:0}25%,75%{-webkit-transform:perspective(140px) rotateX(0);transform:perspective(140px) rotateX(0);opacity:1}100%,90%{-webkit-transform:perspective(140px) rotateY(180deg);transform:perspective(140px) rotateY(180deg);opacity:0}}@keyframes sk-foldCubeAngle{0%,10%{-webkit-transform:perspective(140px) rotateX(-180deg);transform:perspective(140px) rotateX(-180deg);opacity:0}25%,75%{-webkit-transform:perspective(140px) rotateX(0);transform:perspective(140px) rotateX(0);opacity:1}100%,90%{-webkit-transform:perspective(140px) rotateY(180deg);transform:perspective(140px) rotateY(180deg);opacity:0}}
226 |
--------------------------------------------------------------------------------
/static/assets/vendor/venobox/venobox.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * VenoBox - jQuery Plugin
3 | * version: 1.8.6
4 | * @requires jQuery >= 1.7.0
5 | *
6 | * Examples at http://veno.es/venobox/
7 | * License: MIT License
8 | * License URI: https://github.com/nicolafranchini/VenoBox/blob/master/LICENSE
9 | * Copyright 2013-2019 Nicola Franchini - @nicolafranchini
10 | *
11 | */
12 | !function(e){"use strict";var s,i,a,c,o,t,d,l,r,n,v,u,b,k,p,m,h,f,g,x,y,w,C,_,B,P,E,O,D,M,N,U,V,I,z,R,X,Y,j,W,q;e.fn.extend({venobox:function($){var A=this,H=e.extend({arrowsColor:"#B6B6B6",autoplay:!1,bgcolor:"#fff",border:"0",closeBackground:"#161617",closeColor:"#d2d2d2",framewidth:"",frameheight:"",gallItems:!1,infinigall:!1,htmlClose:"×",htmlNext:"Next",htmlPrev:"Prev",numeratio:!1,numerationBackground:"#161617",numerationColor:"#d2d2d2",numerationPosition:"top",overlayClose:!0,overlayColor:"rgba(23,23,23,0.85)",spinner:"double-bounce",spinColor:"#d2d2d2",titleattr:"title",titleBackground:"#161617",titleColor:"#d2d2d2",titlePosition:"top",cb_pre_open:function(){return!0},cb_post_open:function(){},cb_pre_close:function(){return!0},cb_post_close:function(){},cb_post_resize:function(){},cb_after_nav:function(){},cb_content_loaded:function(){},cb_init:function(){}},$);return H.cb_init(A),this.each(function(){if((D=e(this)).data("venobox"))return!0;function $(){y=D.data("gall"),h=D.data("numeratio"),u=D.data("gallItems"),b=D.data("infinigall"),k=u||e('.vbox-item[data-gall="'+y+'"]'),w=k.eq(k.index(D)+1),C=k.eq(k.index(D)-1),w.length||!0!==b||(w=k.eq(0)),k.length>=1?(M=k.index(D)+1,a.html(M+" / "+k.length)):M=1,!0===h?a.show():a.hide(),""!==x?c.show():c.hide(),w.length||!0===b?(e(".vbox-next").css("display","block"),_=!0):(e(".vbox-next").css("display","none"),_=!1),k.index(D)>0||!0===b?(e(".vbox-prev").css("display","block"),B=!0):(e(".vbox-prev").css("display","none"),B=!1),!0!==B&&!0!==_||(d.on(K.DOWN,F),d.on(K.MOVE,G),d.on(K.UP,J))}function Q(e){return!(e.length<1)&&(!p&&(p=!0,f=e.data("overlay")||e.data("overlaycolor"),n=e.data("framewidth"),v=e.data("frameheight"),o=e.data("border"),i=e.data("bgcolor"),l=e.data("href")||e.attr("href"),s=e.data("autoplay"),x=e.data("titleattr")&&e.attr(e.data("titleattr"))||"",e===C&&d.addClass("vbox-animated").addClass("swipe-right"),e===w&&d.addClass("vbox-animated").addClass("swipe-left"),E.show(),void d.animate({opacity:0},500,function(){g.css("background",f),d.removeClass("vbox-animated").removeClass("swipe-left").removeClass("swipe-right").css({"margin-left":0,"margin-right":0}),"iframe"==e.data("vbtype")?ae():"inline"==e.data("vbtype")?oe():"ajax"==e.data("vbtype")?ie():"video"==e.data("vbtype")?ce(s):(d.html('
'),te()),D=e,$(),p=!1,H.cb_after_nav(D,M,w,C)})))}function S(e){27===e.keyCode&&T(),37==e.keyCode&&!0===B&&Q(C),39==e.keyCode&&!0===_&&Q(w)}function T(){if(!1===H.cb_pre_close(D,M,w,C))return!1;e("body").off("keydown",S).removeClass("vbox-open"),D.focus(),g.animate({opacity:0},500,function(){g.remove(),p=!1,H.cb_post_close()})}A.VBclose=function(){T()},D.addClass("vbox-item"),D.data("framewidth",H.framewidth),D.data("frameheight",H.frameheight),D.data("border",H.border),D.data("bgcolor",H.bgcolor),D.data("numeratio",H.numeratio),D.data("gallItems",H.gallItems),D.data("infinigall",H.infinigall),D.data("overlaycolor",H.overlayColor),D.data("titleattr",H.titleattr),D.data("venobox",!0),D.on("click",function(u){if(u.preventDefault(),D=e(this),!1===H.cb_pre_open(D))return!1;switch(A.VBnext=function(){Q(w)},A.VBprev=function(){Q(C)},f=D.data("overlay")||D.data("overlaycolor"),n=D.data("framewidth"),v=D.data("frameheight"),s=D.data("autoplay")||H.autoplay,o=D.data("border"),i=D.data("bgcolor"),_=!1,B=!1,p=!1,l=D.data("href")||D.attr("href"),r=D.data("css")||"",x=D.attr(D.data("titleattr"))||"",P='',H.spinner){case"rotating-plane":P+='
';break;case"double-bounce":P+='
';break;case"wave":P+='
';break;case"wandering-cubes":P+='
';break;case"spinner-pulse":P+='
';break;case"chasing-dots":P+='
';break;case"three-bounce":P+='
';break;case"circle":P+='
';break;case"cube-grid":P+='
';break;case"fading-circle":P+='
';break;case"folding-cube":P+='
'}return P+="
",O=''+H.htmlNext+''+H.htmlPrev+"",U='0/0
'+H.htmlClose+"
",t='",e("body").append(t).addClass("vbox-open"),e(".vbox-preloader div:not(.sk-circle) .sk-child, .vbox-preloader .sk-rotating-plane, .vbox-preloader .sk-rect, .vbox-preloader div:not(.sk-folding-cube) .sk-cube, .vbox-preloader .sk-spinner-pulse").css("background-color",H.spinColor),g=e(".vbox-overlay"),e(".vbox-container"),d=e(".vbox-content"),a=e(".vbox-num"),c=e(".vbox-title"),(E=e(".vbox-preloader")).show(),c.css(H.titlePosition,"-1px"),c.css({color:H.titleColor,"background-color":H.titleBackground}),e(".vbox-close").css({color:H.closeColor,"background-color":H.closeBackground}),e(".vbox-num").css(H.numerationPosition,"-1px"),e(".vbox-num").css({color:H.numerationColor,"background-color":H.numerationBackground}),e(".vbox-next span, .vbox-prev span").css({"border-top-color":H.arrowsColor,"border-right-color":H.arrowsColor}),d.html(""),d.css("opacity","0"),g.css("opacity","0"),$(),g.animate({opacity:1},250,function(){"iframe"==D.data("vbtype")?ae():"inline"==D.data("vbtype")?oe():"ajax"==D.data("vbtype")?ie():"video"==D.data("vbtype")?ce(s):(d.html('
'),te()),H.cb_post_open(D,M,w,C)}),e("body").keydown(S),e(".vbox-prev").on("click",function(){Q(C)}),e(".vbox-next").on("click",function(){Q(w)}),!1});var Z=".vbox-overlay";function F(e){d.addClass("vbox-animated"),I=R=e.pageY,z=X=e.pageX,N=!0}function G(e){if(!0===N){X=e.pageX,R=e.pageY,j=X-z,W=R-I;var s=Math.abs(j);s>Math.abs(W)&&s<=100&&(e.preventDefault(),d.css("margin-left",j))}}function J(e){if(!0===N){N=!1;var s=D,i=!1;(Y=X-z)<0&&!0===_&&(s=w,i=!0),Y>0&&!0===B&&(s=C,i=!0),Math.abs(Y)>=q&&!0===i?Q(s):d.css({"margin-left":0,"margin-right":0})}}H.overlayClose||(Z=".vbox-close"),e("body").on("click touchstart",Z,function(s){(e(s.target).is(".vbox-overlay")||e(s.target).is(".vbox-content")||e(s.target).is(".vbox-close")||e(s.target).is(".vbox-preloader")||e(s.target).is(".vbox-container"))&&T()}),z=0,X=0,Y=0,q=50,N=!1;var K={DOWN:"touchmousedown",UP:"touchmouseup",MOVE:"touchmousemove"},L=function(s){var i;switch(s.type){case"mousedown":i=K.DOWN;break;case"mouseup":case"mouseout":i=K.UP;break;case"mousemove":i=K.MOVE;break;default:return}var a=se(i,s,s.pageX,s.pageY);e(s.target).trigger(a)},ee=function(s){var i;switch(s.type){case"touchstart":i=K.DOWN;break;case"touchend":i=K.UP;break;case"touchmove":i=K.MOVE;break;default:return}var a,c=s.originalEvent.touches[0];a=i==K.UP?se(i,s,null,null):se(i,s,c.pageX,c.pageY),e(s.target).trigger(a)},se=function(s,i,a,c){return e.Event(s,{pageX:a,pageY:c,originalEvent:i})};function ie(){e.ajax({url:l,cache:!1}).done(function(e){d.html(''+e+"
"),te()}).fail(function(){d.html('Error retrieving contents, please retry
'),de()})}function ae(){d.html(''),de()}function ce(e){var s,i=function(e){var s;e.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),RegExp.$3.indexOf("youtu")>-1?s="youtube":RegExp.$3.indexOf("vimeo")>-1&&(s="vimeo");return{type:s,id:RegExp.$6}}(l),a=(e?"?rel=0&autoplay=1":"?rel=0")+function(e){var s="",i=decodeURIComponent(e).split("?");if(void 0!==i[1]){var a,c,o=i[1].split("&");for(c=0;c'),de()}function oe(){d.html(''+e(l).html()+"
"),de()}function te(){(V=d.find("img")).length?V.each(function(){e(this).one("load",function(){de()})}):de()}function de(){c.html(x),d.find(">:first-child").addClass("vbox-figlio").css({width:n,height:v,padding:o,background:i}),e("img.vbox-figlio").on("dragstart",function(e){e.preventDefault()}),le(),d.animate({opacity:"1"},"slow",function(){E.hide()}),H.cb_content_loaded(D,M,w,C)}function le(){var s=d.outerHeight(),i=e(window).height();m=s+60n;n++)e[n][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.Context.refreshAll();for(var e in i)i[e].enabled=!0;return this},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=n.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,o[t.waypointContextKey]=this,i+=1,n.windowContext||(n.windowContext=!0,n.windowContext=new e(window)),this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,o={},n=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical),i=this.element==this.element.window;t&&e&&!i&&(this.adapter.off(".waypoints"),delete o[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,n.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||n.isTouch)&&(e.didScroll=!0,n.requestAnimationFrame(t))})},e.prototype.handleResize=function(){n.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var o=e[i],n=o.newScroll>o.oldScroll,r=n?o.forward:o.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s];if(null!==a.triggerPoint){var l=o.oldScroll=a.triggerPoint,p=l&&h,u=!l&&!h;(p||u)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}}for(var c in t)t[c].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?n.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?n.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var o=0,n=t.length;n>o;o++)t[o].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),o={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var a in this.waypoints[r]){var l,h,p,u,c,d=this.waypoints[r][a],f=d.options.offset,w=d.triggerPoint,y=0,g=null==w;d.element!==d.element.window&&(y=d.adapter.offset()[s.offsetProp]),"function"==typeof f?f=f.apply(d):"string"==typeof f&&(f=parseFloat(f),d.options.offset.indexOf("%")>-1&&(f=Math.ceil(s.contextDimension*f/100))),l=s.contextScroll-s.contextOffset,d.triggerPoint=Math.floor(y+l-f),h=w=s.oldScroll,u=h&&p,c=!h&&!p,!g&&u?(d.queueTrigger(s.backward),o[d.group.id]=d.group):!g&&c?(d.queueTrigger(s.forward),o[d.group.id]=d.group):g&&s.oldScroll>=d.triggerPoint&&(d.queueTrigger(s.forward),o[d.group.id]=d.group)}}return n.requestAnimationFrame(function(){for(var t in o)o[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in o)o[t].refresh()},e.findByElement=function(t){return o[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},n.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},n.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),o[this.axis][this.name]=this}var o={vertical:{},horizontal:{}},n=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var o=this.triggerQueues[i],n="up"===i||"left"===i;o.sort(n?e:t);for(var r=0,s=o.length;s>r;r+=1){var a=o[r];(a.options.continuous||r===o.length-1)&&a.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints),o=i===this.waypoints.length-1;return o?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=n.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return o[t.axis][t.name]||new i(t)},n.Group=i}(),function(){"use strict";function t(t){this.$element=e(t)}var e=window.jQuery,i=window.Waypoint;e.each(["innerHeight","innerWidth","off","offset","on","outerHeight","outerWidth","scrollLeft","scrollTop"],function(e,i){t.prototype[i]=function(){var t=Array.prototype.slice.call(arguments);return this.$element[i].apply(this.$element,t)}}),e.each(["extend","inArray","isEmptyObject"],function(i,o){t[o]=e[o]}),i.adapters.push({name:"jquery",Adapter:t}),i.Adapter=t}(),function(){"use strict";function t(t){return function(){var i=[],o=arguments[0];return t.isFunction(arguments[0])&&(o=t.extend({},arguments[1]),o.handler=arguments[0]),this.each(function(){var n=t.extend({},o,{element:this});"string"==typeof n.context&&(n.context=t(this).closest(n.context)[0]),i.push(new e(n))}),i}}var e=window.Waypoint;window.jQuery&&(window.jQuery.fn.waypoint=t(window.jQuery)),window.Zepto&&(window.Zepto.fn.waypoint=t(window.Zepto))}();
--------------------------------------------------------------------------------
/static/spatial/assets/css/images/overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/assets/css/images/overlay.png
--------------------------------------------------------------------------------
/static/spatial/assets/css/paginate.css:
--------------------------------------------------------------------------------
1 | // Import icon font, I've used Entypo (http://entypo.com/)
2 | @import url(http://weloveiconfonts.com/api/?family=entypo);
3 |
4 | // Import Roboto font
5 | @import url(https://fonts.googleapis.com/css?family=Roboto:300);
6 |
7 | html, body {
8 | font-family: 'Roboto', sans-serif;
9 | font-size: 16px;
10 | line-height: 24px;
11 | }
12 |
13 | .pagination-container {
14 | /*margin-top: 1em;
15 | padding-top: 2em;
16 | border-top: 1px solid #d7dadb;*/
17 | text-align: center;
18 | }
19 |
20 | .pagination-item {
21 | list-style-type: none;
22 | display: inline-block;
23 | border-right: 1px solid #d7dadb;
24 |
25 | transform: scale(1) rotate(19deg) translateX(0px) translateY(0px) skewX(-10deg) skewY(-20deg);
26 | }
27 |
28 | .pagination-item:hover .pagination-link,
29 | .pagination-item.is-active .pagination-link {
30 | color: #fff !important;
31 | }
32 |
33 | .pagination-item:hover,
34 | .pagination-item.is-active {
35 | background-color: rgb(0, 0, 238);;
36 | border-right: 1px solid #fff !important;
37 | }
38 |
39 | .pagination-item.first-number {
40 | border-left: 1px solid #d7dadb;
41 | }
42 |
43 | .pagination-link {
44 | padding: 1.1em 1.6em;
45 | display: inline-block;
46 | text-decoration: none;
47 | color: #8b969c;
48 |
49 | transform: scale(1) rotate(0deg) translateX(0px) translateY(0px) skewX(20deg) skewY(0deg);
50 | }
51 |
52 | .pagination-item--wide {
53 | //@extend .pagination-item;
54 | list-style-type: none;
55 | display: inline-block;
56 | }
57 |
58 | .pagination-item--wide a.disabled {
59 | pointer-events: none;
60 | cursor: default;
61 | opacity: 0.6;
62 | }
63 | .pagination-item--wide.first {
64 | margin: 0 1em 0 0;
65 | }
66 |
67 | .pagination-item--wide.last {
68 | margin: 0 0 0 1em;
69 | }
70 |
71 | .pagination-link--wide {
72 | text-decoration: none;
73 | color: #8b969c;
74 | padding: 1.1em 1.6em;
75 | }
76 |
77 | .pagination-link--wide:hover {
78 | color: rgba(13, 34, 243, 0.96);
79 | }
80 |
81 | .pagination-link--wide.first:before,
82 | .pagination-link--wide.last:after {
83 | font-family: 'entypo';
84 | speak: none;
85 | font-style: normal;
86 | font-weight: normal;
87 | font-variant: normal;
88 | text-transform: none;
89 | line-height: 1;
90 |
91 | // Better Font Rendering
92 | -webkit-font-smoothing: antialiased;
93 | -moz-osx-font-smoothing: grayscale;
94 | }
95 |
96 | .pagination-link--wide.first::before {
97 | content: "\E765";
98 | margin-right: 0.5em;
99 | }
100 |
101 | .pagination-link--wide.last::after {
102 | content: "\E766";
103 | margin-left: 0.5em;
104 | }
105 |
--------------------------------------------------------------------------------
/static/spatial/assets/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/assets/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/static/spatial/assets/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/assets/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/static/spatial/assets/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/assets/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/static/spatial/assets/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/assets/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/static/spatial/assets/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/assets/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/static/spatial/assets/js/main.js:
--------------------------------------------------------------------------------
1 | /*
2 | Spatial by TEMPLATED
3 | templated.co @templatedco
4 | Released for free under the Creative Commons Attribution 3.0 license (templated.co/license)
5 | */
6 |
7 | (function($) {
8 |
9 | skel.breakpoints({
10 | xlarge: '(max-width: 1680px)',
11 | large: '(max-width: 1280px)',
12 | medium: '(max-width: 980px)',
13 | small: '(max-width: 736px)',
14 | xsmall: '(max-width: 480px)'
15 | });
16 |
17 | $(function() {
18 |
19 | var $window = $(window),
20 | $body = $('body');
21 |
22 | // Disable animations/transitions until the page has loaded.
23 | $body.addClass('is-loading');
24 |
25 | $window.on('load', function() {
26 | window.setTimeout(function() {
27 | $body.removeClass('is-loading');
28 | }, 100);
29 | });
30 |
31 | // Fix: Placeholder polyfill.
32 | $('form').placeholder();
33 |
34 | // Prioritize "important" elements on medium.
35 | skel.on('+medium -medium', function() {
36 | $.prioritize(
37 | '.important\\28 medium\\29',
38 | skel.breakpoint('medium').active
39 | );
40 | });
41 |
42 | // Off-Canvas Navigation.
43 |
44 | // Navigation Panel Toggle.
45 | /*$('')
46 | .appendTo($body);
47 | $(
48 | '' +
49 | $('#nav').html() +
50 | '
' +
51 | '
'
52 | )
53 | .appendTo($body)
54 | .panel({
55 | delay: 500,
56 | hideOnClick: true,
57 | hideOnSwipe: true,
58 | resetScroll: true,
59 | resetForms: true,
60 | side: 'right'
61 | });*/
62 |
63 | // Fix: Remove transitions on WP<10 (poor/buggy performance).
64 | if (skel.vars.os == 'wp' && skel.vars.osVersion < 10)
65 | $('#navPanel')
66 | .css('transition', 'none');
67 |
68 | // submit query form
69 | $("#queryeditable").keypress(function(e){
70 | if(e.which == 13){
71 | $("#query").val($(this).text());
72 | $("form[name=search]").submit();
73 | }
74 | return true;
75 | });
76 |
77 | $(".container h2 svg").on("click", function(){
78 | $("#query").val($("#queryeditable").text());
79 | $("form[name=search]").submit();
80 | })
81 |
82 | // reference form
83 | $("form[name=reference]").on("submit", function(){
84 | $.ajax({
85 | method: "POST",
86 | url: "/reference",
87 | data: { url: $("input[name=url]").val(), email: $("input[name=email]").val() }
88 | })
89 | .done(function( msg ) {
90 | alert(msg );
91 | });
92 | return false;
93 | })
94 |
95 | });
96 |
97 | })(jQuery);
98 |
--------------------------------------------------------------------------------
/static/spatial/assets/js/skel.min.js:
--------------------------------------------------------------------------------
1 | /* skel.js v3.0.0 | (c) n33 | skel.io | MIT licensed */
2 | var skel=function(){"use strict";var t={breakpointIds:null,events:{},isInit:!1,obj:{attachments:{},breakpoints:{},head:null,states:{}},sd:"/",state:null,stateHandlers:{},stateId:"",vars:{},DOMReady:null,indexOf:null,isArray:null,iterate:null,matchesMedia:null,extend:function(e,n){t.iterate(n,function(i){t.isArray(n[i])?(t.isArray(e[i])||(e[i]=[]),t.extend(e[i],n[i])):"object"==typeof n[i]?("object"!=typeof e[i]&&(e[i]={}),t.extend(e[i],n[i])):e[i]=n[i]})},newStyle:function(t){var e=document.createElement("style");return e.type="text/css",e.innerHTML=t,e},_canUse:null,canUse:function(e){t._canUse||(t._canUse=document.createElement("div"));var n=t._canUse.style,i=e.charAt(0).toUpperCase()+e.slice(1);return e in n||"Moz"+i in n||"Webkit"+i in n||"O"+i in n||"ms"+i in n},on:function(e,n){var i=e.split(/[\s]+/);return t.iterate(i,function(e){var a=i[e];if(t.isInit){if("init"==a)return void n();if("change"==a)n();else{var r=a.charAt(0);if("+"==r||"!"==r){var o=a.substring(1);if(o in t.obj.breakpoints)if("+"==r&&t.obj.breakpoints[o].active)n();else if("!"==r&&!t.obj.breakpoints[o].active)return void n()}}}t.events[a]||(t.events[a]=[]),t.events[a].push(n)}),t},trigger:function(e){return t.events[e]&&0!=t.events[e].length?(t.iterate(t.events[e],function(n){t.events[e][n]()}),t):void 0},breakpoint:function(e){return t.obj.breakpoints[e]},breakpoints:function(e){function n(t,e){this.name=this.id=t,this.media=e,this.active=!1,this.wasActive=!1}return n.prototype.matches=function(){return t.matchesMedia(this.media)},n.prototype.sync=function(){this.wasActive=this.active,this.active=this.matches()},t.iterate(e,function(i){t.obj.breakpoints[i]=new n(i,e[i])}),window.setTimeout(function(){t.poll()},0),t},addStateHandler:function(e,n){t.stateHandlers[e]=n},callStateHandler:function(e){var n=t.stateHandlers[e]();t.iterate(n,function(e){t.state.attachments.push(n[e])})},changeState:function(e){t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].sync()}),t.vars.lastStateId=t.stateId,t.stateId=e,t.breakpointIds=t.stateId===t.sd?[]:t.stateId.substring(1).split(t.sd),t.obj.states[t.stateId]?t.state=t.obj.states[t.stateId]:(t.obj.states[t.stateId]={attachments:[]},t.state=t.obj.states[t.stateId],t.iterate(t.stateHandlers,t.callStateHandler)),t.detachAll(t.state.attachments),t.attachAll(t.state.attachments),t.vars.stateId=t.stateId,t.vars.state=t.state,t.trigger("change"),t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].active?t.obj.breakpoints[e].wasActive||t.trigger("+"+e):t.obj.breakpoints[e].wasActive&&t.trigger("-"+e)})},generateStateConfig:function(e,n){var i={};return t.extend(i,e),t.iterate(t.breakpointIds,function(e){t.extend(i,n[t.breakpointIds[e]])}),i},getStateId:function(){var e="";return t.iterate(t.obj.breakpoints,function(n){var i=t.obj.breakpoints[n];i.matches()&&(e+=t.sd+i.id)}),e},poll:function(){var e="";e=t.getStateId(),""===e&&(e=t.sd),e!==t.stateId&&t.changeState(e)},_attach:null,attach:function(e){var n=t.obj.head,i=e.element;return i.parentNode&&i.parentNode.tagName?!1:(t._attach||(t._attach=n.firstChild),n.insertBefore(i,t._attach.nextSibling),e.permanent&&(t._attach=i),!0)},attachAll:function(e){var n=[];t.iterate(e,function(t){n[e[t].priority]||(n[e[t].priority]=[]),n[e[t].priority].push(e[t])}),n.reverse(),t.iterate(n,function(e){t.iterate(n[e],function(i){t.attach(n[e][i])})})},detach:function(t){var e=t.element;return t.permanent||!e.parentNode||e.parentNode&&!e.parentNode.tagName?!1:(e.parentNode.removeChild(e),!0)},detachAll:function(e){var n={};t.iterate(e,function(t){n[e[t].id]=!0}),t.iterate(t.obj.attachments,function(e){e in n||t.detach(t.obj.attachments[e])})},attachment:function(e){return e in t.obj.attachments?t.obj.attachments[e]:null},newAttachment:function(e,n,i,a){return t.obj.attachments[e]={id:e,element:n,priority:i,permanent:a}},init:function(){t.initMethods(),t.initVars(),t.initEvents(),t.obj.head=document.getElementsByTagName("head")[0],t.isInit=!0,t.trigger("init")},initEvents:function(){t.on("resize",function(){t.poll()}),t.on("orientationChange",function(){t.poll()}),t.DOMReady(function(){t.trigger("ready")}),window.onload&&t.on("load",window.onload),window.onload=function(){t.trigger("load")},window.onresize&&t.on("resize",window.onresize),window.onresize=function(){t.trigger("resize")},window.onorientationchange&&t.on("orientationChange",window.onorientationchange),window.onorientationchange=function(){t.trigger("orientationChange")}},initMethods:function(){document.addEventListener?!function(e,n){t.DOMReady=n()}("domready",function(){function t(t){for(r=1;t=n.shift();)t()}var e,n=[],i=document,a="DOMContentLoaded",r=/^loaded|^c/.test(i.readyState);return i.addEventListener(a,e=function(){i.removeEventListener(a,e),t()}),function(t){r?t():n.push(t)}}):!function(e,n){t.DOMReady=n()}("domready",function(t){function e(t){for(h=1;t=i.shift();)t()}var n,i=[],a=!1,r=document,o=r.documentElement,s=o.doScroll,c="DOMContentLoaded",d="addEventListener",u="onreadystatechange",l="readyState",f=s?/^loaded|^c/:/^loaded|c/,h=f.test(r[l]);return r[d]&&r[d](c,n=function(){r.removeEventListener(c,n,a),e()},a),s&&r.attachEvent(u,n=function(){/^c/.test(r[l])&&(r.detachEvent(u,n),e())}),t=s?function(e){self!=top?h?e():i.push(e):function(){try{o.doScroll("left")}catch(n){return setTimeout(function(){t(e)},50)}e()}()}:function(t){h?t():i.push(t)}}),Array.prototype.indexOf?t.indexOf=function(t,e){return t.indexOf(e)}:t.indexOf=function(t,e){if("string"==typeof t)return t.indexOf(e);var n,i,a=e?e:0;if(!this)throw new TypeError;if(i=this.length,0===i||a>=i)return-1;for(0>a&&(a=i-Math.abs(a)),n=a;i>n;n++)if(this[n]===t)return n;return-1},Array.isArray?t.isArray=function(t){return Array.isArray(t)}:t.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)},Object.keys?t.iterate=function(t,e){if(!t)return[];var n,i=Object.keys(t);for(n=0;i[n]&&e(i[n],t[i[n]])!==!1;n++);}:t.iterate=function(t,e){if(!t)return[];var n;for(n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])===!1)break},window.matchMedia?t.matchesMedia=function(t){return""==t?!0:window.matchMedia(t).matches}:window.styleMedia||window.media?t.matchesMedia=function(t){if(""==t)return!0;var e=window.styleMedia||window.media;return e.matchMedium(t||"all")}:window.getComputedStyle?t.matchesMedia=function(t){if(""==t)return!0;var e=document.createElement("style"),n=document.getElementsByTagName("script")[0],i=null;e.type="text/css",e.id="matchmediajs-test",n.parentNode.insertBefore(e,n),i="getComputedStyle"in window&&window.getComputedStyle(e,null)||e.currentStyle;var a="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return e.styleSheet?e.styleSheet.cssText=a:e.textContent=a,"1px"===i.width}:t.matchesMedia=function(t){if(""==t)return!0;var e,n,i,a,r={"min-width":null,"max-width":null},o=!1;for(i=t.split(/\s+and\s+/),e=0;er["max-width"]||null!==r["min-height"]&&cr["max-height"]?!1:!0},navigator.userAgent.match(/MSIE ([0-9]+)/)&&RegExp.$1<9&&(t.newStyle=function(t){var e=document.createElement("span");return e.innerHTML=' ",e})},initVars:function(){var e,n,i,a=navigator.userAgent;e="other",n=0,i=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(RegExp.$1),!1):void 0}),t.vars.browser=e,t.vars.browserVersion=n,e="other",n=0,i=[["ios",/([0-9_]+) like Mac OS X/,function(t){return t.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(t){return 0}],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(t){return t.replace("_",".").replace("_","")}],["wp",/Windows Phone ([0-9\.]+)/,null],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(i[2]?i[2](RegExp.$1):RegExp.$1),!1):void 0}),t.vars.os=e,t.vars.osVersion=n,t.vars.IEVersion="ie"==t.vars.browser?t.vars.browserVersion:99,t.vars.touch="wp"==t.vars.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),t.vars.mobile="wp"==t.vars.os||"android"==t.vars.os||"ios"==t.vars.os||"bb"==t.vars.os}};return t.init(),t}();!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.skel=e()}(this,function(){return skel});
3 |
--------------------------------------------------------------------------------
/static/spatial/assets/js/util.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | /**
4 | * Generate an indented list of links from a nav. Meant for use with panel().
5 | * @return {jQuery} jQuery object.
6 | */
7 | $.fn.navList = function() {
8 |
9 | var $this = $(this);
10 | $a = $this.find('a'),
11 | b = [];
12 |
13 | $a.each(function() {
14 |
15 | var $this = $(this),
16 | indent = Math.max(0, $this.parents('li').length - 1),
17 | href = $this.attr('href'),
18 | target = $this.attr('target');
19 |
20 | b.push(
21 | '' +
26 | '' +
27 | $this.text() +
28 | ''
29 | );
30 |
31 | });
32 |
33 | return b.join('');
34 |
35 | };
36 |
37 | /**
38 | * Panel-ify an element.
39 | * @param {object} userConfig User config.
40 | * @return {jQuery} jQuery object.
41 | */
42 | $.fn.panel = function(userConfig) {
43 |
44 | // No elements?
45 | if (this.length == 0)
46 | return $this;
47 |
48 | // Multiple elements?
49 | if (this.length > 1) {
50 |
51 | for (var i=0; i < this.length; i++)
52 | $(this[i]).panel(userConfig);
53 |
54 | return $this;
55 |
56 | }
57 |
58 | // Vars.
59 | var $this = $(this),
60 | $body = $('body'),
61 | $window = $(window),
62 | id = $this.attr('id'),
63 | config;
64 |
65 | // Config.
66 | config = $.extend({
67 |
68 | // Delay.
69 | delay: 0,
70 |
71 | // Hide panel on link click.
72 | hideOnClick: false,
73 |
74 | // Hide panel on escape keypress.
75 | hideOnEscape: false,
76 |
77 | // Hide panel on swipe.
78 | hideOnSwipe: false,
79 |
80 | // Reset scroll position on hide.
81 | resetScroll: false,
82 |
83 | // Reset forms on hide.
84 | resetForms: false,
85 |
86 | // Side of viewport the panel will appear.
87 | side: null,
88 |
89 | // Target element for "class".
90 | target: $this,
91 |
92 | // Class to toggle.
93 | visibleClass: 'visible'
94 |
95 | }, userConfig);
96 |
97 | // Expand "target" if it's not a jQuery object already.
98 | if (typeof config.target != 'jQuery')
99 | config.target = $(config.target);
100 |
101 | // Panel.
102 |
103 | // Methods.
104 | $this._hide = function(event) {
105 |
106 | // Already hidden? Bail.
107 | if (!config.target.hasClass(config.visibleClass))
108 | return;
109 |
110 | // If an event was provided, cancel it.
111 | if (event) {
112 |
113 | event.preventDefault();
114 | event.stopPropagation();
115 |
116 | }
117 |
118 | // Hide.
119 | config.target.removeClass(config.visibleClass);
120 |
121 | // Post-hide stuff.
122 | window.setTimeout(function() {
123 |
124 | // Reset scroll position.
125 | if (config.resetScroll)
126 | $this.scrollTop(0);
127 |
128 | // Reset forms.
129 | if (config.resetForms)
130 | $this.find('form').each(function() {
131 | this.reset();
132 | });
133 |
134 | }, config.delay);
135 |
136 | };
137 |
138 | // Vendor fixes.
139 | $this
140 | .css('-ms-overflow-style', '-ms-autohiding-scrollbar')
141 | .css('-webkit-overflow-scrolling', 'touch');
142 |
143 | // Hide on click.
144 | if (config.hideOnClick) {
145 |
146 | $this.find('a')
147 | .css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');
148 |
149 | $this
150 | .on('click', 'a', function(event) {
151 |
152 | var $a = $(this),
153 | href = $a.attr('href'),
154 | target = $a.attr('target');
155 |
156 | if (!href || href == '#' || href == '' || href == '#' + id)
157 | return;
158 |
159 | // Cancel original event.
160 | event.preventDefault();
161 | event.stopPropagation();
162 |
163 | // Hide panel.
164 | $this._hide();
165 |
166 | // Redirect to href.
167 | window.setTimeout(function() {
168 |
169 | if (target == '_blank')
170 | window.open(href);
171 | else
172 | window.location.href = href;
173 |
174 | }, config.delay + 10);
175 |
176 | });
177 |
178 | }
179 |
180 | // Event: Touch stuff.
181 | $this.on('touchstart', function(event) {
182 |
183 | $this.touchPosX = event.originalEvent.touches[0].pageX;
184 | $this.touchPosY = event.originalEvent.touches[0].pageY;
185 |
186 | })
187 |
188 | $this.on('touchmove', function(event) {
189 |
190 | if ($this.touchPosX === null
191 | || $this.touchPosY === null)
192 | return;
193 |
194 | var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX,
195 | diffY = $this.touchPosY - event.originalEvent.touches[0].pageY,
196 | th = $this.outerHeight(),
197 | ts = ($this.get(0).scrollHeight - $this.scrollTop());
198 |
199 | // Hide on swipe?
200 | if (config.hideOnSwipe) {
201 |
202 | var result = false,
203 | boundary = 20,
204 | delta = 50;
205 |
206 | switch (config.side) {
207 |
208 | case 'left':
209 | result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta);
210 | break;
211 |
212 | case 'right':
213 | result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta));
214 | break;
215 |
216 | case 'top':
217 | result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta);
218 | break;
219 |
220 | case 'bottom':
221 | result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta));
222 | break;
223 |
224 | default:
225 | break;
226 |
227 | }
228 |
229 | if (result) {
230 |
231 | $this.touchPosX = null;
232 | $this.touchPosY = null;
233 | $this._hide();
234 |
235 | return false;
236 |
237 | }
238 |
239 | }
240 |
241 | // Prevent vertical scrolling past the top or bottom.
242 | if (($this.scrollTop() < 0 && diffY < 0)
243 | || (ts > (th - 2) && ts < (th + 2) && diffY > 0)) {
244 |
245 | event.preventDefault();
246 | event.stopPropagation();
247 |
248 | }
249 |
250 | });
251 |
252 | // Event: Prevent certain events inside the panel from bubbling.
253 | $this.on('click touchend touchstart touchmove', function(event) {
254 | event.stopPropagation();
255 | });
256 |
257 | // Event: Hide panel if a child anchor tag pointing to its ID is clicked.
258 | $this.on('click', 'a[href="#' + id + '"]', function(event) {
259 |
260 | event.preventDefault();
261 | event.stopPropagation();
262 |
263 | config.target.removeClass(config.visibleClass);
264 |
265 | });
266 |
267 | // Body.
268 |
269 | // Event: Hide panel on body click/tap.
270 | $body.on('click touchend', function(event) {
271 | $this._hide(event);
272 | });
273 |
274 | // Event: Toggle.
275 | $body.on('click', 'a[href="#' + id + '"]', function(event) {
276 |
277 | event.preventDefault();
278 | event.stopPropagation();
279 |
280 | config.target.toggleClass(config.visibleClass);
281 |
282 | });
283 |
284 | // Window.
285 |
286 | // Event: Hide on ESC.
287 | if (config.hideOnEscape)
288 | $window.on('keydown', function(event) {
289 |
290 | if (event.keyCode == 27)
291 | $this._hide(event);
292 |
293 | });
294 |
295 | return $this;
296 |
297 | };
298 |
299 | /**
300 | * Apply "placeholder" attribute polyfill to one or more forms.
301 | * @return {jQuery} jQuery object.
302 | */
303 | $.fn.placeholder = function() {
304 |
305 | // Browser natively supports placeholders? Bail.
306 | if (typeof (document.createElement('input')).placeholder != 'undefined')
307 | return $(this);
308 |
309 | // No elements?
310 | if (this.length == 0)
311 | return $this;
312 |
313 | // Multiple elements?
314 | if (this.length > 1) {
315 |
316 | for (var i=0; i < this.length; i++)
317 | $(this[i]).placeholder();
318 |
319 | return $this;
320 |
321 | }
322 |
323 | // Vars.
324 | var $this = $(this);
325 |
326 | // Text, TextArea.
327 | $this.find('input[type=text],textarea')
328 | .each(function() {
329 |
330 | var i = $(this);
331 |
332 | if (i.val() == ''
333 | || i.val() == i.attr('placeholder'))
334 | i
335 | .addClass('polyfill-placeholder')
336 | .val(i.attr('placeholder'));
337 |
338 | })
339 | .on('blur', function() {
340 |
341 | var i = $(this);
342 |
343 | if (i.attr('name').match(/-polyfill-field$/))
344 | return;
345 |
346 | if (i.val() == '')
347 | i
348 | .addClass('polyfill-placeholder')
349 | .val(i.attr('placeholder'));
350 |
351 | })
352 | .on('focus', function() {
353 |
354 | var i = $(this);
355 |
356 | if (i.attr('name').match(/-polyfill-field$/))
357 | return;
358 |
359 | if (i.val() == i.attr('placeholder'))
360 | i
361 | .removeClass('polyfill-placeholder')
362 | .val('');
363 |
364 | });
365 |
366 | // Password.
367 | $this.find('input[type=password]')
368 | .each(function() {
369 |
370 | var i = $(this);
371 | var x = $(
372 | $('')
373 | .append(i.clone())
374 | .remove()
375 | .html()
376 | .replace(/type="password"/i, 'type="text"')
377 | .replace(/type=password/i, 'type=text')
378 | );
379 |
380 | if (i.attr('id') != '')
381 | x.attr('id', i.attr('id') + '-polyfill-field');
382 |
383 | if (i.attr('name') != '')
384 | x.attr('name', i.attr('name') + '-polyfill-field');
385 |
386 | x.addClass('polyfill-placeholder')
387 | .val(x.attr('placeholder')).insertAfter(i);
388 |
389 | if (i.val() == '')
390 | i.hide();
391 | else
392 | x.hide();
393 |
394 | i
395 | .on('blur', function(event) {
396 |
397 | event.preventDefault();
398 |
399 | var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
400 |
401 | if (i.val() == '') {
402 |
403 | i.hide();
404 | x.show();
405 |
406 | }
407 |
408 | });
409 |
410 | x
411 | .on('focus', function(event) {
412 |
413 | event.preventDefault();
414 |
415 | var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']');
416 |
417 | x.hide();
418 |
419 | i
420 | .show()
421 | .focus();
422 |
423 | })
424 | .on('keypress', function(event) {
425 |
426 | event.preventDefault();
427 | x.val('');
428 |
429 | });
430 |
431 | });
432 |
433 | // Events.
434 | $this
435 | .on('submit', function() {
436 |
437 | $this.find('input[type=text],input[type=password],textarea')
438 | .each(function(event) {
439 |
440 | var i = $(this);
441 |
442 | if (i.attr('name').match(/-polyfill-field$/))
443 | i.attr('name', '');
444 |
445 | if (i.val() == i.attr('placeholder')) {
446 |
447 | i.removeClass('polyfill-placeholder');
448 | i.val('');
449 |
450 | }
451 |
452 | });
453 |
454 | })
455 | .on('reset', function(event) {
456 |
457 | event.preventDefault();
458 |
459 | $this.find('select')
460 | .val($('option:first').val());
461 |
462 | $this.find('input,textarea')
463 | .each(function() {
464 |
465 | var i = $(this),
466 | x;
467 |
468 | i.removeClass('polyfill-placeholder');
469 |
470 | switch (this.type) {
471 |
472 | case 'submit':
473 | case 'reset':
474 | break;
475 |
476 | case 'password':
477 | i.val(i.attr('defaultValue'));
478 |
479 | x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
480 |
481 | if (i.val() == '') {
482 | i.hide();
483 | x.show();
484 | }
485 | else {
486 | i.show();
487 | x.hide();
488 | }
489 |
490 | break;
491 |
492 | case 'checkbox':
493 | case 'radio':
494 | i.attr('checked', i.attr('defaultValue'));
495 | break;
496 |
497 | case 'text':
498 | case 'textarea':
499 | i.val(i.attr('defaultValue'));
500 |
501 | if (i.val() == '') {
502 | i.addClass('polyfill-placeholder');
503 | i.val(i.attr('placeholder'));
504 | }
505 |
506 | break;
507 |
508 | default:
509 | i.val(i.attr('defaultValue'));
510 | break;
511 |
512 | }
513 | });
514 |
515 | });
516 |
517 | return $this;
518 |
519 | };
520 |
521 | /**
522 | * Moves elements to/from the first positions of their respective parents.
523 | * @param {jQuery} $elements Elements (or selector) to move.
524 | * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
525 | */
526 | $.prioritize = function($elements, condition) {
527 |
528 | var key = '__prioritize';
529 |
530 | // Expand $elements if it's not already a jQuery object.
531 | if (typeof $elements != 'jQuery')
532 | $elements = $($elements);
533 |
534 | // Step through elements.
535 | $elements.each(function() {
536 |
537 | var $e = $(this), $p,
538 | $parent = $e.parent();
539 |
540 | // No parent? Bail.
541 | if ($parent.length == 0)
542 | return;
543 |
544 | // Not moved? Move it.
545 | if (!$e.data(key)) {
546 |
547 | // Condition is false? Bail.
548 | if (!condition)
549 | return;
550 |
551 | // Get placeholder (which will serve as our point of reference for when this element needs to move back).
552 | $p = $e.prev();
553 |
554 | // Couldn't find anything? Means this element's already at the top, so bail.
555 | if ($p.length == 0)
556 | return;
557 |
558 | // Move element to top of parent.
559 | $e.prependTo($parent);
560 |
561 | // Mark element as moved.
562 | $e.data(key, $p);
563 |
564 | }
565 |
566 | // Moved already?
567 | else {
568 |
569 | // Condition is true? Bail.
570 | if (condition)
571 | return;
572 |
573 | $p = $e.data(key);
574 |
575 | // Move element back to its original location (using our placeholder).
576 | $e.insertAfter($p);
577 |
578 | // Unmark element as moved.
579 | $e.removeData(key);
580 |
581 | }
582 |
583 | });
584 |
585 | };
586 |
587 | })(jQuery);
--------------------------------------------------------------------------------
/static/spatial/images/banner.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/images/banner.jpg
--------------------------------------------------------------------------------
/static/spatial/images/caledonie.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/images/caledonie.jpg
--------------------------------------------------------------------------------
/static/spatial/images/pic01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/images/pic01.jpg
--------------------------------------------------------------------------------
/static/spatial/images/pic02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/images/pic02.jpg
--------------------------------------------------------------------------------
/static/spatial/images/pic03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/images/pic03.jpg
--------------------------------------------------------------------------------
/static/spatial/images/pic04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/images/pic04.jpg
--------------------------------------------------------------------------------
/static/spatial/images/pic05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/images/pic05.jpg
--------------------------------------------------------------------------------
/static/spatial/images/pic06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/images/pic06.jpg
--------------------------------------------------------------------------------
/static/spatial/images/pic07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/static/spatial/images/pic07.jpg
--------------------------------------------------------------------------------
/templates/analysis.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
新闻数据分析
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
新闻内容关键词频率分布
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
123 |
124 |
125 |
126 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
--------------------------------------------------------------------------------
/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
观察者网新闻数据可视化
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
观察者网新闻数据可视化
67 |
应用Python爬虫、Flask框架、Echarts、WordCloud等技术实现
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
85 |
86 |
95 |
96 |
105 |
106 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
--------------------------------------------------------------------------------
/templates/news.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
观察者网新闻列表
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
观察者网新闻列表
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | 编号 |
76 | 标题 |
77 | 作者 |
78 | 发布时间 |
79 | {# 内容 | #}
80 | 关键字 |
81 | {# 其他信息 | #}
82 |
83 |
84 | {% for new in news %}
85 |
86 | {{new[0]}} |
87 |
88 |
89 | {{ new[1] }}
90 |
91 | |
92 | {{new[2]}} |
93 | {{new[3]}} |
94 | {{new[6]}} |
95 | {# {{new[6]}} | #}
96 | {# {{movie[8]}} | #}
97 |
98 |
99 | {% endfor %}
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
--------------------------------------------------------------------------------
/templates/news_result.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 观察者网新闻列表
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
观察者网新闻列表
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | 编号 |
73 | 标题 |
74 | 作者 |
75 | 发布时间 |
76 | 内容 |
77 | 关键字 |
78 | {# 其他信息 | #}
79 |
80 |
81 | {% for new in news %}
82 |
83 | {{new[0]}} |
84 |
85 |
86 | {{ new[1] }}
87 |
88 | |
89 | {{new[2]}} |
90 | {{new[3]}} |
91 | {{new[4]}} |
92 | {{new[6]}} |
93 | {# {{movie[8]}} | #}
94 |
95 |
96 | {% endfor %}
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
--------------------------------------------------------------------------------
/templates/search.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
观察者网新闻数据可视化
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
64 |
65 |
66 |
71 |
72 |
73 |
74 |
75 | 搜索你想获取的新闻内容
76 | Search You Want
77 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/templates/team.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
豆瓣Top250数据分析
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
Our Team
66 |
Magnam dolores commodi suscipit. Necessitatibus eius consequatur ex aliquid fuga eum quidem.
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
Walter White
76 |
Chief Executive Officer
77 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
Sarah Jhonson
92 |
Product Manager
93 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
William Anderson
108 |
CTO
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
Amanda Jepson
124 |
Accountant
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
--------------------------------------------------------------------------------
/templates/test/test_echarts.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
ECharts
5 |
6 |
7 |
8 |
9 |
10 |
11 |
38 |
39 |
--------------------------------------------------------------------------------
/templates/word.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
新闻数据分析
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |

67 |
68 |
69 |
70 |
71 |
72 |
73 |
词频统计
74 |
根据 {{ news_info[0] }} 条新闻的描述,从 {{ news_info[2] }} 个字中提炼出词云树,可以让我们更加清晰的感受到新闻热点
75 |
76 |
77 |
78 |
79 |
80 |
不知道你从这些热点词中悟到了什么呢?
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
--------------------------------------------------------------------------------
/upload/image-20200720163344959.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/upload/image-20200720163344959.png
--------------------------------------------------------------------------------
/upload/image-20200720163623725.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/upload/image-20200720163623725.png
--------------------------------------------------------------------------------
/upload/image-20200720163827319.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/upload/image-20200720163827319.png
--------------------------------------------------------------------------------
/upload/image-20200720164113633.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hunter-lee1/guanchazhe_spider/4dc16f84f45098273c9624cde1bdab0bdda4abdf/upload/image-20200720164113633.png
--------------------------------------------------------------------------------
/useful_functions.py:
--------------------------------------------------------------------------------
1 | import pymysql
2 | import jieba.analyse
3 |
4 |
5 | HOST = '127.0.0.1'
6 | USER = 'root'
7 | PASSWORD = 'shujuku'
8 | PORT = 3306
9 | DATABASE = 'news_with_keyword'
10 | CHAREST = 'utf8'
11 |
12 |
13 | # 连接数据库并提取数据库内容
14 | def get_datalist():
15 | datalist = []
16 | cnn = pymysql.connect(host=HOST, user=USER, password=PASSWORD, port=PORT, database=DATABASE,
17 | charset=CHAREST)
18 | cursor = cnn.cursor()
19 | sql = ' select * from guanchazhe ORDER BY publish_time DESC'
20 | cursor.execute(sql)
21 | for item in cursor.fetchall():
22 | datalist.append(item)
23 | cursor.close()
24 | cnn.close()
25 | return datalist
26 |
27 |
28 | # 对数据库文本内容进行分词,并返回 data_inf0 = [新闻数,词云数,词汇数,作者人数] ->首页展示的三个内容
29 | def get_datalist_info(datalist):
30 | text = ""
31 | for item in datalist:
32 | text = text + item[4]
33 |
34 | # 分词
35 | cut = jieba.cut(text)
36 | string = ' '.join(cut)
37 | data_info = [len(datalist), 1, len(string), 1]
38 | return data_info,string
39 |
40 |
41 | # 对输入文本进行分词,并返回词汇权重
42 | def get_word_weights(string, topK):
43 | words = []
44 | weights = []
45 | for x, w in jieba.analyse.textrank(string, withWeight=True, topK=topK):
46 | words.append(x)
47 | weights.append(w)
48 | return words,weights
49 |
50 |
51 | # 文本关键字提取
52 | def get_keyword_from_content(content):
53 | print(content)
54 | cut = jieba.cut(content)
55 | string = ' '.join(cut)
56 | words,_=get_word_weights(string, topK=5)
57 | return words.append('(自动生成)')
--------------------------------------------------------------------------------
/word_cloud.py:
--------------------------------------------------------------------------------
1 | # import jieba #分词
2 | from matplotlib import pyplot as plt #绘图,数据可视化
3 | from wordcloud import WordCloud #词云
4 | from PIL import Image #图片处理
5 | import numpy as np #矩阵运算
6 | import pymysql #数据库
7 | import jieba.analyse
8 |
9 |
10 | #准备词云所需的文字(词)
11 |
12 | datalist = []
13 | cnn = pymysql.connect(host='127.0.0.1', user='root', password='shujuku', port=3306, database='news_with_keyword',
14 | charset='utf8')
15 | cursor = cnn.cursor()
16 | sql = ' select * from guanchazhe'
17 | cursor.execute(sql)
18 | for item in cursor.fetchall():
19 | datalist.append(item)
20 | cursor.close()
21 | cnn.close()
22 |
23 | text = " "
24 | # 取出数据库中的新闻内容,进行分词
25 | for item in datalist:
26 | text = text + item[4]
27 | cut = jieba.cut(text)
28 | string = ' '.join(cut)
29 |
30 | img = Image.open(r'.\static\assets\img\tree.jpg') #打开遮罩图片
31 | img_array = np.array(img) #将图片转换为数组
32 | wc = WordCloud(
33 | background_color='white',
34 | mask=img_array,
35 | font_path="msyh.ttc" #字体所在位置:C:\Windows\Fonts
36 | )
37 | wc.generate_from_text(string)
38 |
39 | #绘制图片
40 | fig = plt.figure(1)
41 | plt.imshow(wc)
42 | plt.axis('off') #是否显示坐标轴
43 |
44 | plt.show() #显示生成的词云图片
45 |
46 | #输出词云图片到文件
47 | plt.savefig(r'.\static\assets\img\key_word.jpg',dpi=500)
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------