├── .gitignore
├── LICENSE
├── README.md
├── background.js
├── css
├── index.css
└── loader.css
├── customData.js
├── img
├── 1.png
├── 2.png
├── add.png
├── edit.png
├── refresh.png
├── rss.png
├── rss_128.png
├── rss_32.png
├── rss_64.png
└── top.png
├── index.html
├── js
├── add.js
├── getDate.js
├── index.js
├── jquery.min.js
├── rss.js
├── source.js
├── store.js
├── visiblity.js
└── xml2json.js
├── manifest.json
└── publish.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Runtime data
7 | pids
8 | *.pid
9 | *.seed
10 |
11 | # Directory for instrumented libs generated by jscoverage/JSCover
12 | lib-cov
13 |
14 | # Coverage directory used by tools like istanbul
15 | coverage
16 |
17 | # nyc test coverage
18 | .nyc_output
19 |
20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
21 | .grunt
22 |
23 | # node-waf configuration
24 | .lock-wscript
25 |
26 | # Compiled binary addons (http://nodejs.org/api/addons.html)
27 | build/Release
28 |
29 | # Dependency directories
30 | node_modules
31 | jspm_packages
32 |
33 | # Optional npm cache directory
34 | .npm
35 |
36 | # Optional REPL history
37 | .node_repl_history
38 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 文蔺
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | ## chrome-crawler
3 |
4 | ### 说明
5 |
6 | - 一个简单的 chrome extension,抓取常看的博客
7 |
8 | - 基于 ajax 请求 + jQury DOM parse
9 |
10 | - 创意来自 `whxaxes` 的 [node-test](https://github.com/whxaxes/node-test/tree/master/server/creeper) 项目
11 |
12 | - 为避免浪费请求,应用已经使用 localStorage 做了 10 min 的缓存,如需强制刷新,可以到点击页面提供的刷新按钮
13 |
14 | ### 使用
15 |
16 | 1. 下载代码并解压
17 |
18 | 2. 在扩展程序管理界面中选中 `开发者模式`
19 |
20 | 3. 点击 `加载已解压的扩展程序...` 按钮,选择代码所在文件夹
21 |
22 | 4. 打开方法1:直接点击图标
23 |
24 | 5. 打开方法2:找到扩展程序的 ID,地址栏中打开 `chrome-extension://{your_extension_id}/index.html`(可以加入到你的书签)
25 |
26 | 6. 添加自己喜欢的网页:修改 `./js/source.js` OR 点击页面上的“+”按钮填写对应的网址及选择器,也支持添加 rss XML 页面。
27 |
28 | ### rss 页面添加
29 |
30 | | 内容 | 值示例 | 备注 |
31 | | ------------- |:-------------:|:-------------:|
32 | | 单列选择器 | rss.channel.entry | `.` 分隔父子层级 |
33 | | 内容选择器 | title | 使用标签名 |
34 | | 属性选择器 | link.$href | 使用标签属性 |
35 |
36 |
37 | ###
38 |
39 | ### Todo
40 |
41 | - 添加自定义页面
42 |
43 | - 自定义数据来源
44 |
45 | - 代码重构
46 |
47 | - 修改编辑数据源
48 |
49 | - 添加更加完备的日期格式化(选择器、正则匹配)
50 |
51 | ----------
52 |
53 |
54 | 如有问题,欢迎与我联系:
55 |
56 | - angusfu1126@qq.com
57 |
58 | - [https://segmentfault.com/u/wemlin](https://segmentfault.com/u/wemlin)
59 |
60 |
--------------------------------------------------------------------------------
/background.js:
--------------------------------------------------------------------------------
1 |
2 | chrome.browserAction.onClicked.addListener(function updateIcon() {
3 |
4 | chrome.tabs.query({
5 | url: location.protocol + '//' + location.host + '/index.html'
6 | }, function (tabs) {
7 | if (!tabs.length) {
8 | chrome.tabs.create({
9 | url: "./index.html"
10 | });
11 | } else {
12 | chrome.tabs.update(tabs[0].id, { selected : true });
13 | }
14 | });
15 | });
16 |
--------------------------------------------------------------------------------
/css/index.css:
--------------------------------------------------------------------------------
1 |
2 | /* Let's get this party started */
3 | ::-webkit-scrollbar {
4 | width: 6px;
5 | }
6 | /* Handle */
7 | ::-webkit-scrollbar-thumb {
8 | background: #e2b83d;
9 | }
10 |
11 | html,
12 | body {
13 | margin: 0;
14 | padding: 0;
15 | }
16 |
17 | * {
18 | font-family: "微软雅黑";
19 | }
20 |
21 | .wrap {
22 | width: 100%;
23 | overflow: hidden;
24 | padding-bottom: 50px;
25 | }
26 |
27 | ul,
28 | li {
29 | margin: 0;
30 | padding: 0;
31 | list-style-type: none !important;
32 | }
33 |
34 | .content {
35 | margin-top: 30px;
36 | -webkit-transition: padding .3s;
37 | transition: padding .3s;
38 | padding-left: 15px;
39 | }
40 |
41 | .mb-nav {
42 | width: 100%;
43 | margin-bottom: 30px;
44 | }
45 |
46 | .mb-blog-name {
47 | display: block;
48 | margin: 10px;
49 | font-size: 20px;
50 | font-weight: bold;
51 | -webkit-transition: color .3s;
52 | transition: color .3s;
53 | }
54 |
55 | .mb-item,
56 | .no-data {
57 | -webkit-transition: background-color .3s;
58 | transition: background-color .3s;
59 | }
60 |
61 | .mb-item {
62 | display: -webkit-box;
63 | display: flex;
64 | }
65 |
66 | a {
67 | outline: none;
68 | color: #333;
69 | text-decoration: none !important;
70 | }
71 |
72 | .mb-item a {
73 | display: block;
74 | padding: 0 20px;
75 | line-height: 30px;
76 | -webkit-transition: padding .3s;
77 | transition: padding .3s;
78 |
79 | flex: 1;
80 | -webkit-box-flex: 1;
81 | overflow: hidden;
82 | white-space: nowrap;
83 | -ms-text-overflow: ellipsis;
84 | text-overflow: ellipsis;
85 | }
86 |
87 | .blog-time {
88 | font-size: 13px;
89 | line-height: 30px;
90 | }
91 |
92 | .left-side {
93 | position: fixed;
94 | width: 200px;
95 | top: 20px;
96 | bottom: 20px;
97 | left: 50px;
98 | margin: auto;
99 | z-index: 999;
100 | -webkit-transition: -webkit-transform .3s;
101 | transition: transform .3s;
102 | -webkit-transform: translate3d(-185px, 0, 0);
103 | transform: translate3d(-185px, 0, 0);
104 | cursor: pointer;
105 | overflow-y: auto;
106 | }
107 |
108 | .keys {
109 | margin-top: 30px;
110 | }
111 |
112 | .close {
113 | position: absolute;
114 | display: none;
115 | color: #eee;
116 | width: 30px;
117 | line-height: 30px;
118 | right: 5px;
119 | top: 5px;
120 | text-align: center;
121 | }
122 |
123 | .close:hover {
124 | color: #FFF;
125 | }
126 |
127 | .keys li {
128 | display: block;
129 | color: #333;
130 | padding: 5px 10px;
131 | opacity: .8;
132 | }
133 |
134 | .keys li:hover {
135 | opacity: 1;
136 | }
137 |
138 | .keys .loading {
139 | opacity: .2 !important;
140 | }
141 | /*显示左边栏*/
142 |
143 | .show-side .close {
144 | display: block;
145 | }
146 |
147 | .show-side .left-side {
148 | -webkit-transform: translate3d(0, 0, 0);
149 | transform: translate3d(0, 0, 0);
150 | }
151 |
152 | .show-side .content {
153 | /*padding-left: 200px;*/
154 | width: 600px;
155 | margin: auto;
156 | }
157 |
158 | .hide {
159 | display: none;
160 | }
161 | #loader {
162 | position: absolute;
163 | top: 50%;
164 | bottom: 0;
165 | right: 0;
166 | left: 50%;
167 | width: 100px;
168 | height: 100px;
169 | margin-top: -50px;
170 | margin-left: -50px;
171 | }
172 | .load3 {
173 | margin: 0;
174 | }
175 |
176 | @media screen and (max-width: 1120px){
177 | .left-side {
178 | display: none;
179 | }
180 | .show-side .content {
181 | width: 600px;
182 | }
183 | }
184 |
185 | @media screen and (min-width: 1400px){
186 | .show-side .content {
187 | width: 900px;
188 | }
189 | }
190 |
191 | .tools {
192 | position: fixed;
193 | right: 60px;
194 | bottom: 60px;
195 | }
196 | .tools > div {
197 | cursor: pointer;
198 | width: 30px;
199 | height: 30px;
200 | margin-top: 5px;
201 | transition: all .5s;
202 | }
203 | #refresh {
204 | background: #fff url(../img/refresh.png) center center no-repeat;
205 | background-size: 50%;
206 | }
207 | #toTop {
208 | background: #fff url(../img/top.png) center center no-repeat;
209 | background-size: 50%;
210 | }
211 | #addRes {
212 | background: #fff url(../img/add.png) center center no-repeat;
213 | background-size: 50%;
214 | }
215 | #editRes {
216 | background: #fff url(../img/edit.png) center center no-repeat;
217 | background-size: 50%;
218 | }
219 | #addRSS {
220 | background: #fff url(../img/rss.png) center center no-repeat;
221 | background-size: 50%;
222 | }
223 | .tools > div:hover {
224 | opacity: .6;
225 | transform: scale(1.1)
226 | }
227 | .new {
228 | color: red !important;
229 | }
230 | .trans-bg {
231 | z-index: 999;
232 | display: none;
233 | position: fixed;
234 | left: 0;
235 | top: 0;
236 | bottom: 0;
237 | right: 0;
238 | background-color: rgba(172, 172, 172, .8);
239 | }
240 | #addPop {
241 | position: fixed;
242 | top: 50%;
243 | left: 50%;
244 | width: 600px;
245 | height: 480px;
246 | margin-left: -300px;
247 | margin-top: -240px;
248 | background-color: #fff;
249 | -webkit-box-sizing: border-box;
250 | -moz-box-sizing: border-box;
251 | box-sizing: border-box;
252 | padding: 20px;
253 | }
254 | .trans-bg input {
255 | display: block;
256 | -webkit-box-sizing: border-box;
257 | -moz-box-sizing: border-box;
258 | box-sizing: border-box;
259 | width: 100%;
260 | height: 30px;
261 | padding: 0 15px;
262 | font-size: 12px;
263 | margin: 20px 0;
264 | }
265 | #rssPop {
266 | position: fixed;
267 | top: 50%;
268 | left: 50%;
269 | width: 600px;
270 | height: 480px;
271 | margin-left: -300px;
272 | margin-top: -240px;
273 | background-color: #fff;
274 | -webkit-box-sizing: border-box;
275 | -moz-box-sizing: border-box;
276 | box-sizing: border-box;
277 | padding: 20px;
278 | }
--------------------------------------------------------------------------------
/css/loader.css:
--------------------------------------------------------------------------------
1 | /* load1 */
2 | .load1 {
3 | margin: 100px auto;
4 | width: 50px;
5 | height: 60px;
6 | text-align: center;
7 | font-size: 10px;
8 | }
9 | .load1 > div {
10 | background-color: #67CF22;
11 | height: 100%;
12 | width: 6px;
13 | display: inline-block;
14 | -webkit-animation: stretchdelay 1.2s infinite ease-in-out;
15 | animation: stretchdelay 1.2s infinite ease-in-out;
16 | }
17 | .load1 .rect2 {
18 | -webkit-animation-delay: -1.1s;
19 | animation-delay: -1.1s;
20 | }
21 | .load1 .rect3 {
22 | -webkit-animation-delay: -1.0s;
23 | animation-delay: -1.0s;
24 | }
25 | .load1 .rect4 {
26 | -webkit-animation-delay: -0.9s;
27 | animation-delay: -0.9s;
28 | }
29 | .load1 .rect5 {
30 | -webkit-animation-delay: -0.8s;
31 | animation-delay: -0.8s;
32 | }
33 | @-webkit-keyframes stretchdelay {
34 | 0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
35 | 20% { -webkit-transform: scaleY(1.0) }
36 | }
37 | @keyframes stretchdelay {
38 | 0%, 40%, 100% {
39 | transform: scaleY(0.4);
40 | -webkit-transform: scaleY(0.4);
41 | } 20% {
42 | transform: scaleY(1.0);
43 | -webkit-transform: scaleY(1.0);
44 | }
45 | }
46 |
47 | /* load2 */
48 | .load2 {
49 | width: 60px;
50 | height: 60px;
51 | background-color: #67CF22;
52 | margin: 100px auto;
53 | -webkit-animation: rotateplane 1.2s infinite ease-in-out;
54 | animation: rotateplane 1.2s infinite ease-in-out;
55 | }
56 | @-webkit-keyframes rotateplane {
57 | 0% { -webkit-transform: perspective(120px) }
58 | 50% { -webkit-transform: perspective(120px) rotateY(180deg) }
59 | 100% { -webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg) }
60 | }
61 | @keyframes rotateplane {
62 | 0% {
63 | transform: perspective(120px) rotateX(0deg) rotateY(0deg);
64 | -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg)
65 | } 50% {
66 | transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
67 | -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg)
68 | } 100% {
69 | transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
70 | -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
71 | }
72 | }
73 |
74 | /* load3 */
75 | .load3 {
76 | width: 60px;
77 | height: 60px;
78 | position: relative;
79 | margin: 100px auto;
80 | }
81 | .double-bounce1, .double-bounce2 {
82 | width: 100%;
83 | height: 100%;
84 | border-radius: 50%;
85 | background-color: #67CF22;
86 | opacity: 0.6;
87 | position: absolute;
88 | top: 0;
89 | left: 0;
90 |
91 | -webkit-animation: bounce 2.0s infinite ease-in-out;
92 | animation: bounce 2.0s infinite ease-in-out;
93 | }
94 | .double-bounce2 {
95 | -webkit-animation-delay: -1.0s;
96 | animation-delay: -1.0s;
97 | }
98 | @-webkit-keyframes bounce {
99 | 0%, 100% { -webkit-transform: scale(0.0) }
100 | 50% { -webkit-transform: scale(1.0) }
101 | }
102 | @keyframes bounce {
103 | 0%, 100% {
104 | transform: scale(0.0);
105 | -webkit-transform: scale(0.0);
106 | } 50% {
107 | transform: scale(1.0);
108 | -webkit-transform: scale(1.0);
109 | }
110 | }
111 |
112 | /* load4 */
113 | .load4 {
114 | margin: 100px auto;
115 | width: 32px;
116 | height: 32px;
117 | position: relative;
118 | }
119 | .cube1, .cube2 {
120 | background-color: #67CF22;
121 | width: 30px;
122 | height: 30px;
123 | position: absolute;
124 | top: 0;
125 | left: 0;
126 | -webkit-animation: cubemove 1.8s infinite ease-in-out;
127 | animation: cubemove 1.8s infinite ease-in-out;
128 | }
129 | .cube2 {
130 | -webkit-animation-delay: -0.9s;
131 | animation-delay: -0.9s;
132 | }
133 | @-webkit-keyframes cubemove {
134 | 25% { -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5) }
135 | 50% { -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg) }
136 | 75% { -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5) }
137 | 100% { -webkit-transform: rotate(-360deg) }
138 | }
139 | @keyframes cubemove {
140 | 25% {
141 | transform: translateX(42px) rotate(-90deg) scale(0.5);
142 | -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
143 | } 50% {
144 | transform: translateX(42px) translateY(42px) rotate(-179deg);
145 | -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
146 | } 50.1% {
147 | transform: translateX(42px) translateY(42px) rotate(-180deg);
148 | -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
149 | } 75% {
150 | transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
151 | -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
152 | } 100% {
153 | transform: rotate(-360deg);
154 | -webkit-transform: rotate(-360deg);
155 | }
156 | }
157 |
158 | /* load5 */
159 | .load5 {
160 | margin: 100px auto;
161 | width: 90px;
162 | height: 90px;
163 | position: relative;
164 | text-align: center;
165 | -webkit-animation: rotate 2.0s infinite linear;
166 | animation: rotate 2.0s infinite linear;
167 | }
168 | .dot1, .dot2 {
169 | width: 60%;
170 | height: 60%;
171 | display: inline-block;
172 | position: absolute;
173 | top: 0;
174 | background-color: #67CF22;
175 | border-radius: 100%;
176 | -webkit-animation: bounce 2.0s infinite ease-in-out;
177 | animation: bounce 2.0s infinite ease-in-out;
178 | }
179 | .dot2 {
180 | top: auto;
181 | bottom: 0px;
182 | -webkit-animation-delay: -1.0s;
183 | animation-delay: -1.0s;
184 | }
185 | @-webkit-keyframes rotate { 100% { -webkit-transform: rotate(360deg) }}
186 | @keyframes rotate { 100% { transform: rotate(360deg); -webkit-transform: rotate(360deg) }}
187 | @-webkit-keyframes bounce {
188 | 0%, 100% { -webkit-transform: scale(0.0) }
189 | 50% { -webkit-transform: scale(1.0) }
190 | }
191 | @keyframes bounce {
192 | 0%, 100% {
193 | transform: scale(0.0);
194 | -webkit-transform: scale(0.0);
195 | } 50% {
196 | transform: scale(1.0);
197 | -webkit-transform: scale(1.0);
198 | }
199 | }
200 |
201 | /* load6 */
202 | .load6 {
203 | margin: 100px auto 0;
204 | width: 150px;
205 | text-align: center;
206 | }
207 | .load6 > div {
208 | width: 30px;
209 | height: 30px;
210 | background-color: #67CF22;
211 | border-radius: 100%;
212 | display: inline-block;
213 | -webkit-animation: bouncedelay 1.4s infinite ease-in-out;
214 | animation: bouncedelay 1.4s infinite ease-in-out;
215 | -webkit-animation-fill-mode: both;
216 | animation-fill-mode: both;
217 | }
218 | .load6 .bounce1 {
219 | -webkit-animation-delay: -0.32s;
220 | animation-delay: -0.32s;
221 | }
222 | .load6 .bounce2 {
223 | -webkit-animation-delay: -0.16s;
224 | animation-delay: -0.16s;
225 | }
226 | @-webkit-keyframes bouncedelay {
227 | 0%, 80%, 100% { -webkit-transform: scale(0.0) }
228 | 40% { -webkit-transform: scale(1.0) }
229 | }
230 | @keyframes bouncedelay {
231 | 0%, 80%, 100% {
232 | transform: scale(0.0);
233 | -webkit-transform: scale(0.0);
234 | } 40% {
235 | transform: scale(1.0);
236 | -webkit-transform: scale(1.0);
237 | }
238 | }
239 |
240 | /* load7 */
241 | .load7 {
242 | width: 40px;
243 | height: 40px;
244 | margin: 100px auto;
245 | background-color: #333;
246 | border-radius: 100%;
247 | -webkit-animation: scaleout 1.0s infinite ease-in-out;
248 | animation: scaleout 1.0s infinite ease-in-out;
249 | }
250 | @-webkit-keyframes scaleout {
251 | 0% { -webkit-transform: scale(0.0) }
252 | 100% {
253 | -webkit-transform: scale(1.0);
254 | opacity: 0;
255 | }
256 | }
257 | @keyframes scaleout {
258 | 0% {
259 | transform: scale(0.0);
260 | -webkit-transform: scale(0.0);
261 | } 100% {
262 | transform: scale(1.0);
263 | -webkit-transform: scale(1.0);
264 | opacity: 0;
265 | }
266 | }
267 |
268 | /* load8 */
269 | .load8 {
270 | margin: 100px auto;
271 | width: 20px;
272 | height: 20px;
273 | position: relative;
274 | }
275 | .container1 > div, .container2 > div, .container3 > div {
276 | width: 6px;
277 | height: 6px;
278 | background-color: #333;
279 | border-radius: 100%;
280 | position: absolute;
281 | -webkit-animation: bouncedelay 1.2s infinite ease-in-out;
282 | animation: bouncedelay 1.2s infinite ease-in-out;
283 | -webkit-animation-fill-mode: both;
284 | animation-fill-mode: both;
285 | }
286 | .load8 .load8-container {
287 | position: absolute;
288 | width: 100%;
289 | height: 100%;
290 | }
291 | .container2 {
292 | -webkit-transform: rotateZ(45deg);
293 | transform: rotateZ(45deg);
294 | }
295 | .container3 {
296 | -webkit-transform: rotateZ(90deg);
297 | transform: rotateZ(90deg);
298 | }
299 | .circle1 { top: 0; left: 0; }
300 | .circle2 { top: 0; right: 0; }
301 | .circle3 { right: 0; bottom: 0; }
302 | .circle4 { left: 0; bottom: 0; }
303 | .container2 .circle1 {
304 | -webkit-animation-delay: -1.1s;
305 | animation-delay: -1.1s;
306 | }
307 | .container3 .circle1 {
308 | -webkit-animation-delay: -1.0s;
309 | animation-delay: -1.0s;
310 | }
311 | .container1 .circle2 {
312 | -webkit-animation-delay: -0.9s;
313 | animation-delay: -0.9s;
314 | }
315 | .container2 .circle2 {
316 | -webkit-animation-delay: -0.8s;
317 | animation-delay: -0.8s;
318 | }
319 | .container3 .circle2 {
320 | -webkit-animation-delay: -0.7s;
321 | animation-delay: -0.7s;
322 | }
323 | .container1 .circle3 {
324 | -webkit-animation-delay: -0.6s;
325 | animation-delay: -0.6s;
326 | }
327 | .container2 .circle3 {
328 | -webkit-animation-delay: -0.5s;
329 | animation-delay: -0.5s;
330 | }
331 | .container3 .circle3 {
332 | -webkit-animation-delay: -0.4s;
333 | animation-delay: -0.4s;
334 | }
335 | .container1 .circle4 {
336 | -webkit-animation-delay: -0.3s;
337 | animation-delay: -0.3s;
338 | }
339 | .container2 .circle4 {
340 | -webkit-animation-delay: -0.2s;
341 | animation-delay: -0.2s;
342 | }
343 | .container3 .circle4 {
344 | -webkit-animation-delay: -0.1s;
345 | animation-delay: -0.1s;
346 | }
347 | @-webkit-keyframes bouncedelay {
348 | 0%, 80%, 100% { -webkit-transform: scale(0.0) }
349 | 40% { -webkit-transform: scale(1.0) }
350 | }
351 | @keyframes bouncedelay {
352 | 0%, 80%, 100% {
353 | transform: scale(0.0);
354 | -webkit-transform: scale(0.0);
355 | } 40% {
356 | transform: scale(1.0);
357 | -webkit-transform: scale(1.0);
358 | }
359 | }
360 |
--------------------------------------------------------------------------------
/customData.js:
--------------------------------------------------------------------------------
1 | window.customData = {
2 | "risingstack": {
3 | "_c_": true,
4 | "url": "https://blog.risingstack.com/",
5 | "colum": ".main-inner article",
6 | "title": "h1 a",
7 | "time": ".post-time .fulldate",
8 | "link": "h1 a"
9 | },
10 |
11 | "thoughtram": {
12 | "_c_": true,
13 | "url": "http://blog.thoughtram.io/categories/angular-2/",
14 | "colum": ".thtrm-three-column-list li",
15 | "title": "h2",
16 | "time": "",
17 | "link": ".thtrm-cta.thtrm-cta--small"
18 | },
19 |
20 | "wolksoftware": {
21 | "_c_": true,
22 | "url": "http://blog.wolksoftware.com/",
23 | "colum": "#container article",
24 | "title": ".article_title a",
25 | "time": "",
26 | "link": ".article_title a"
27 | },
28 |
29 | "Nicholas Zakas": {
30 | "_c_": true,
31 | "url": "https://www.nczonline.net/",
32 | "colum": ".post-content .post-snippet",
33 | "title": ".post-head h3 a",
34 | "time": ".post-head .byline",
35 | "link": ".post-head h3 a"
36 | },
37 |
38 | "2ality": {
39 | "_c_":true,
40 | "url":"http://www.2ality.com/",
41 | "colum":"#page-core > div > div:not(.index-date)",
42 | "title":"h2 a",
43 | "time":".date-and-tags",
44 | "link":"h2 a"
45 | },
46 |
47 | "W3cplus": {
48 | url: "http://www.w3cplus.com/",
49 | colum: ".region-content .node-blog",
50 | handle: function($colum) {
51 | var time = $colum.find(".submitted").text().match(TIME_REG_2);
52 | return {
53 | url: $colum.find("h1>a").attr("href"),
54 | title: $colum.find("h1>a").text(),
55 | time: (time instanceof Array) ? time[0] : ""
56 | }
57 | }
58 | },
59 |
60 | "W3ctech": {
61 | url: "http://www.w3ctech.com/topic/index",
62 | colum: ".bd_box .topic_list_content",
63 | handle: function($colum) {
64 | var ignoreList = ["意见与建议", "新闻", "活动", "thinkjs"];
65 | if (ignoreList.indexOf($colum.find(".badge_category").text()) >= 0) return;
66 |
67 | var _time = $colum.find(".relative-date").text();
68 | var time = _time.match(TIME_REG_2);
69 | return {
70 | url: $colum.find(".topic_title a").attr("href"),
71 | title: $colum.find(".topic_title a").text(),
72 | time: (time instanceof Array) ? time[0] : _time
73 | }
74 | }
75 | },
76 |
77 | "伯乐在线": {
78 | url: "http://web.jobbole.com/all-posts/",
79 | colum: ".post",
80 | handle: function($colum) {
81 | var time = $colum.find(" .post-meta p").eq(0).text().match(TIME_REG_3);
82 | return {
83 | url: $colum.find(".archive-title").attr("href"),
84 | title: $colum.find(".archive-title").text(),
85 | time: (time instanceof Array) ? time[0] : ""
86 | }
87 | }
88 | },
89 |
90 | "众成翻译": {
91 | url: 'http://www.zcfy.cc/article/archive',
92 | colum: '.article-list ol li',
93 | handle: function($colum) {
94 | return {
95 | url: $colum.find('a').attr('href'),
96 | title: $colum.find('a').text(),
97 | time: ''
98 | }
99 | }
100 | },
101 |
102 | "EtherDream": {
103 | "_r_": true,
104 | url: "http://feed.cnblogs.com/blog/u/83633/rss",
105 | "colum": "feed.entry",
106 | "title": "title",
107 | "time": "published",
108 | "link": "id"
109 | },
110 |
111 | "阮一峰": {
112 | url: "http://www.ruanyifeng.com/blog/javascript/",
113 | colum: "#alpha .module-list-item",
114 | handle: function($colum) {
115 | var time = $colum.find(".hint").text().match(TIME_REG_4);
116 | return {
117 | url: $colum.find("a").attr("href"),
118 | title: $colum.find("a").text(),
119 | time: (time instanceof Array) ? time[0] : ""
120 | }
121 | }
122 | },
123 |
124 | "张鑫旭": {
125 | url: "http://www.zhangxinxu.com/wordpress/",
126 | colum: ".the_main .post",
127 | handle: function($colum) {
128 | return {
129 | url: $colum.find(".entry-title").attr("href"),
130 | title: $colum.find(".entry-title").text(),
131 | time: $colum.find(".date").text()
132 | }
133 | }
134 | },
135 |
136 | "小胡子": {
137 | url: 'http://barretlee.com/blog/archives/',
138 | colum: '.cate-detail li',
139 | handle: function($colum) {
140 | var time = time_reg.exec($colum.find("span").text());
141 | return {
142 | url: $colum.find("a").attr("href"),
143 | title: $colum.find("a").text(),
144 | time: time && time[0] || ''
145 | }
146 | }
147 | },
148 |
149 |
150 | "叶小钗": {
151 | url: "http://www.cnblogs.com/yexiaochai/",
152 | colum: ".day",
153 | handle: function($colum) {
154 | var time = $colum.find(".dayTitle").text().match(TIME_REG_1);
155 | if (!time) return;
156 |
157 | return {
158 | url: $colum.find(".postTitle a").attr("href"),
159 | title: $colum.find(".postTitle a").text(),
160 | time: time[0]
161 | }
162 | }
163 | },
164 |
165 |
166 | "月影": {
167 | url: 'https://www.h5jun.com/archives/',
168 | colum: '.entry-content ul li',
169 | handle: function($colum) {
170 | return {
171 | url: $colum.find("a").attr("href"),
172 | title: $colum.find("a").text(),
173 | time: $colum.find("span").text()
174 | }
175 | }
176 | },
177 |
178 |
179 | "QuQu": {
180 | url: 'https://imququ.com/post/archives.html',
181 | colum: '.entry-content > ul li',
182 | handle: function($colum) {
183 | return {
184 | url: $colum.find("a").attr("href"),
185 | title: $colum.find("a").text(),
186 | time: $colum.find("span").text()
187 | }
188 | }
189 | },
190 |
191 | "AlloyTeam": {
192 | url: "http://www.alloyteam.com/page/0/",
193 | colum: ".articlemenu>li",
194 | handle: function($colum) {
195 | var time = $colum.find(".blogPs").text().match(TIME_REG_1);
196 | return {
197 | url: $colum.find(".blogTitle").attr("href"),
198 | title: $colum.find(".blogTitle").text().trim(),
199 | time: (time instanceof Array) ? time[0] : ""
200 | }
201 | }
202 | },
203 |
204 | "meowni.ca": {
205 | "_c_": true,
206 | "url": "http://meowni.ca/",
207 | "colum": ".listing li",
208 | "title": "a",
209 | "time": "span",
210 | "link": "a"
211 | },
212 |
213 | "FEX": {
214 | url: "http://fex.baidu.com/",
215 | colum: ".container .post-list>li",
216 | handle: function($colum) {
217 | var time = $colum.find(".date").text().split(" ");
218 | time = time.slice(time.length - 3, time.length).join(" ");
219 | return {
220 | url: $colum.find("a").attr("href"),
221 | title: $colum.find("p").text(),
222 | time: time
223 | }
224 | }
225 | },
226 |
227 | "Taobao FED": {
228 | url: 'http://taobaofed.org/',
229 | colum: '.article-summary',
230 | handle: function($colum) {
231 | return {
232 | url: $colum.find(".article-summary-inner a").attr("href"),
233 | title: $colum.find(".article-summary-inner a").text(),
234 | time: $colum.find("time").text()
235 | }
236 | }
237 | },
238 |
239 | "凹凸实验室": {
240 | url: "https://aotu.io/fragments/index/",
241 | colum: '.mod-post',
242 | handle: function($colum) {
243 | var url = $colum.find("a").attr("href");
244 | var time = url.match(time_reg);
245 | return {
246 | url: $colum.find("a").attr("href"),
247 | title: $colum.find("a").attr("title"),
248 | time: (time instanceof Array) ? time[0] : ""
249 | }
250 | }
251 | },
252 |
253 | "Isux": {
254 | url: "https://isux.tencent.com/category/fd",
255 | colum: ".masonry-post",
256 | handle: function($colum) {
257 | return {
258 | url: $colum.find("h2 a").attr("href"),
259 | title:$colum.find("h2 a").text(),
260 | time: $colum.find('.isux-date').text()
261 | }
262 | }
263 | },
264 |
265 | "SVGTrick": {
266 | "_c_": true,
267 | "url": "http://svgtrick.com/",
268 | "colum": ".trick-card",
269 | "title": ".trick-card-title",
270 | "time": "",
271 | "link": ".trick-card-title",
272 | "max": "8"
273 | },
274 |
275 | "icodeit": {
276 | "_r_": true,
277 | "url": "http://icodeit.org/atom.xml",
278 | "colum": "feed.entry",
279 | "title": "title",
280 | "time": "updated",
281 | "link": "id"
282 | },
283 |
284 | "紫云飞": {
285 | "_c_": true,
286 | "url": "http://www.cnblogs.com/ziyunfei/",
287 | "colum": "#mainContent .day",
288 | "title": ".postTitle a",
289 | "time": ".postDesc",
290 | "link": ".postTitle a"
291 | },
292 |
293 | "jackpu": {
294 | "_c_": true,
295 | "url": "http://www.jackpu.com/tag/web/",
296 | "colum": ".content article",
297 | "title": ".post-title a",
298 | "time": ".post-date",
299 | "link": ".post-title a"
300 | },
301 |
302 | // "前端开发日报": {
303 | // "_c_": true,
304 | // "url": "https://github.com/kujian/frontendDaily/issues",
305 | // "colum": ".Box-body.js-navigation-container .Box-body-row",
306 | // "title": "a",
307 | // "time": "",
308 | // "link": "a",
309 | // "max": 3
310 | // },
311 |
312 | "BaiduEFE": {
313 | "_c_": true,
314 | "url": "http://efe.baidu.com/",
315 | "colum": "main > .article-index",
316 | "title": "h2 a",
317 | "time": ".article-meta",
318 | "link": "h2 a"
319 | },
320 |
321 | "DDFE": {
322 | "_c_": true,
323 | "url": "https://defed.github.io/archives/",
324 | "colum": "#content article",
325 | "title": "h1 a span",
326 | "time": ".post-meta",
327 | "link": "h1 a"
328 | },
329 |
330 | "饿了么": {
331 | "_r_": true,
332 | "url": "https://fe.ele.me/rss/",
333 | "colum": "rss.channel.item",
334 | "title": "title",
335 | "time": "pubDate",
336 | "link": "link"
337 | },
338 |
339 | "css-tricks": {
340 | "_c_": true,
341 | "url": "https://css-tricks.com/",
342 | "colum": ".article-card",
343 | "title": "h2 a",
344 | "time": ".bar-time",
345 | "link": "h2 a"
346 | },
347 | "mumu": {
348 | "_c_": true,
349 | "url": "https://my.oschina.net/mumu/blog",
350 | "colum": ".list-item",
351 | "title": ".blog-title",
352 | "time": ".time",
353 | "link": ".blog-title"
354 | },
355 | "csswizardry": {
356 | "_c_": true,
357 | "url": "http://csswizardry.com/",
358 | "colum": ".list-ui__item",
359 | "title": ".post__title a",
360 | "time": ".post__time",
361 | "link": ".post__title a"
362 | },
363 | "simurai.com": {
364 | "_c_": true,
365 | "url": "http://simurai.com/blog/",
366 | "colum": ".Index-item--blog",
367 | "title": ".Index-meta h2",
368 | "time": ".Index-meta time",
369 | "link": ".Index-meta"
370 | },
371 | "mgechev": {
372 | "_c_": true,
373 | "url": "http://blog.mgechev.com/posts/",
374 | "colum": "#index article",
375 | "title": "h2 a",
376 | "time": "",
377 | "link": "h2 a"
378 | },
379 | "tphangout": {
380 | "_c_": true,
381 | "url": "http://tphangout.com/",
382 | "colum": ".site-main > article",
383 | "title": ".entry-title a",
384 | "time": ".entry-date",
385 | "link": ".entry-title a"
386 | },
387 |
388 | "souche": {
389 | "_c_": true,
390 | "url": "https://blog.souche.com/",
391 | "colum": ".article-list > article",
392 | "title": ".c-post-list__title a",
393 | "time": ".c-post-list__meta",
394 | "link": ".c-post-list__title a"
395 | },
396 |
397 | "yubangweb": {
398 | "_c_": true,
399 | "url": "http://blog.yubangweb.com/",
400 | "colum": "#content .post",
401 | "title": ".post-title a",
402 | "time": ".post-date",
403 | "link": ".post-title a"
404 | },
405 | "developers.google.com": {
406 | "_c_": true,
407 | "url": "https://developers.google.com/web/updates/",
408 | "colum": ".devsite-landing-row-item",
409 | "title": "a",
410 | "time": "",
411 | "link": "a"
412 | },
413 | "今日头条技术": {
414 | "_c_": true,
415 | "url": "https://techblog.toutiao.com/",
416 | "colum": ".content article",
417 | "title": ".article-title",
418 | "time": "time",
419 | "link": ".article-title"
420 | },
421 | "美团点评技术团队": {
422 | "_c_": true,
423 | "url": "http://tech.meituan.com/",
424 | "colum": ".post-list article",
425 | "title": ".post-title a",
426 | "time": ".post-meta-ctime",
427 | "link": ".post-title a"
428 | },
429 | "人人网 FED": {
430 | "_c_": true,
431 | "url": "http://www.renfed.com",
432 | "colum": "#main-content article",
433 | "title": ".posttitle a",
434 | "time": ".entry-date time",
435 | "link": ".posttitle a"
436 | }
437 | }
438 |
--------------------------------------------------------------------------------
/img/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/1.png
--------------------------------------------------------------------------------
/img/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/2.png
--------------------------------------------------------------------------------
/img/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/add.png
--------------------------------------------------------------------------------
/img/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/edit.png
--------------------------------------------------------------------------------
/img/refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/refresh.png
--------------------------------------------------------------------------------
/img/rss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/rss.png
--------------------------------------------------------------------------------
/img/rss_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/rss_128.png
--------------------------------------------------------------------------------
/img/rss_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/rss_32.png
--------------------------------------------------------------------------------
/img/rss_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/rss_64.png
--------------------------------------------------------------------------------
/img/top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngusFu/chrome-crawler/d1aa379da5b094ed2ef17b5dea230fa237386430/img/top.png
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 博客爬虫
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
21 |
28 |
29 |
30 |
31 |
34 |
35 |
36 |
37 |
38 |
39 |
52 |
53 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/js/add.js:
--------------------------------------------------------------------------------
1 | $('#addRes').click(function() {
2 | $('#addPopCon').fadeIn(500);
3 | });
4 |
5 | $('#addPopCon').on('click', function(e) {
6 | if ($(e.target).attr('id') === 'addPopCon') {
7 | $('#addPopCon').fadeOut(500);
8 | }
9 | });
10 |
11 | $('#addPop button').click(function() {
12 | var cacheData = localStorage['__user__data__'];
13 |
14 | try {
15 | cacheData = JSON.parse(cacheData || '{}');
16 | } catch (e) {
17 | cacheData = {};
18 | }
19 |
20 | var name = $('#sietName').val().trim(),
21 | url = $('#siteURL').val().trim(),
22 | colum = $('#siteColum').val().trim(),
23 | title = $('#colTitle').val().trim(),
24 | link = $('#colLink').val().trim(),
25 | time = $('#colTime').val().trim(),
26 | max = $('#maxCount').val().trim();
27 |
28 | if (name && url && colum && title && link) {
29 | cacheData[name] = {
30 | _c_: true,
31 | url: url,
32 | colum: colum,
33 | title: title,
34 | time: time,
35 | link: link,
36 | max: max || 10
37 | };
38 |
39 | localStorage['__user__data__'] = JSON.stringify(cacheData);
40 | location.reload();
41 | } else {
42 | alert('输入有误!');
43 | }
44 | });
--------------------------------------------------------------------------------
/js/getDate.js:
--------------------------------------------------------------------------------
1 | ;(function () {
2 | let re_zh = /(\d{4})\s*[^x00-xff]\s*(\d{1,2})\s*[^x00-xff]\s*(\d{1,2})\s*[^x00-xff]/,
3 | re_ymd = /\d{4}([\/\-\.])\d{1,2}(\1)\d{1,2}/,
4 | re_mdy = /\d{1,2}([\/\-\.])\d{1,2}(\1)\d{4}/,
5 | re_en = new RegExp([
6 | /(\w{3}) (\w{3}) (\d{2}) (\d{4})/.source, // DateString
7 | /(\w{3}), (\d{2}) (\w{3}) (\d{4}) ((\d{2}):(\d{2}):(\d{2})) GMT/.source, // UTC
8 | /(\w{3}) (\w{3}) (\d{2}) (\d{4}) ((\d{2}):(\d{2}):(\d{2})) GMT\+\d{4}/.source, // Greenwich
9 | /(\d{4})-(\d{2})-(\d{2})T((\d{2}):(\d{2}):(\d{2}))\.(\d{3})Z/.source, // ISO
10 | ].join('|'), 'm');
11 |
12 | window.getDate = function(strdate = '') {
13 | var tmp = null;
14 | if (!strdate) return strdate;
15 |
16 | strdate = String(strdate);
17 |
18 | if (tmp = strdate.match(re_zh)) {
19 | return ymd([tmp[1], tmp[2], tmp[3]].join('/'));
20 | }
21 |
22 | if (tmp = strdate.match(re_ymd)) {
23 | return ymd(tmp[0].replace(/[\/\-\.]/g, '/'));
24 | }
25 |
26 | if (tmp = strdate.match(re_mdy)) {
27 | return ymd(tmp[0].replace(/[\/\-\.]/g, '/'));
28 | }
29 |
30 | if (tmp = strdate.match(re_en)) {
31 | return ymd(new Date(tmp[0]))
32 | };
33 |
34 | return '';
35 | };
36 |
37 | function ymd(d) {
38 | var pad = function (i) {
39 | return (i < 10 ? '0' : '') + i;
40 | };
41 | d = typeof d === 'string' ? new Date(d) : d;
42 | return [ d.getFullYear(), d.getMonth() + 1, d.getDate() ].map(pad).join('-');
43 | }
44 | }());
--------------------------------------------------------------------------------
/js/index.js:
--------------------------------------------------------------------------------
1 |
2 | var $wrap = $(".wrap");
3 | var $menu = $('.keys');
4 | var $content = $('.content');
5 |
6 | // 初始化
7 | source.forEach(function(index, id){
8 | $menu.append(`
9 |
10 | ${id}(0)
11 |
12 | `);
13 |
14 | $content.append(``);
15 | });
16 |
17 | $content.on('click', '.mb-title', function() {
18 | var $this = $(this);
19 | var id = $this.closest('ul').attr('id');
20 | $this.removeClass('new');
21 | $('[data-key="' + id + '"]').removeClass('new');
22 | });
23 | // 导航定位
24 | $(".left-side").click(function(e){
25 | var li = e.target.tagName == "LI" ? e.target : (e.target.parentNode.tagName == "LI") ? e.target.parentNode : null
26 |
27 | if(li){
28 | var id = $(li).attr("data-key")
29 | var $dom = $("#"+id);
30 | if($dom.length){
31 | $('html,body').animate({
32 | scrollTop: $dom.offset().top
33 | }, 400);
34 | }
35 | }
36 | });
37 |
38 | // 强制刷新
39 | // 不使用缓存
40 | $('#refresh').click(function() {
41 | store.clearAll();
42 | initData();
43 | });
44 |
45 | // 回到顶部
46 | $('#toTop').click(function() {
47 | $('html,body').animate({
48 | scrollTop: 0
49 | }, 400);
50 | });
51 |
52 |
53 | // 页面显示隐藏时刷新
54 | // pageVisibility.visibilitychange(function() {
55 | // if (!pageVisibility.hidden) {
56 | // initData();
57 | // }
58 | // });
59 |
60 | // 延时 1 s
61 | // 避免浪费请求
62 | setTimeout(function() {
63 | // 刷新数据并回到顶部
64 | initData(true).then(function() {
65 | $('#toTop').trigger('click');
66 | });
67 | }, 1000);
68 |
69 | /**
70 | *
71 | * @param {Boolean} noCacheRender 使用缓存时候是否仍然强制重新渲染
72 | *
73 | * @return {Promise}
74 | *
75 | */
76 | function initData(noCacheRender) {
77 | var promises = [];
78 |
79 | source.forEach(function(index, id){
80 | var nowSource = this;
81 |
82 | /**==================================================================
83 | *
84 | * 先进行缓存验证
85 | *
86 | */
87 | var storeInfo = null;
88 | var info = null;
89 | try {
90 | storeInfo = JSON.parse(store.get(id));
91 | } catch (e) {}
92 |
93 | // 缓存有效
94 | if (storeInfo && store.checkValid(id)) {
95 | if (noCacheRender) {
96 | updateDOMContent(index, id, storeInfo, this);
97 | console.log('[', id, '] use cache');
98 | }
99 | return;
100 | }
101 |
102 | var $menuLi = $menu.find('[data-key="dom_' + index + '"]');
103 | $menuLi.removeClass('new').find('.count').text(0);
104 |
105 | // 缓存过期 先清除掉
106 | store.del(id);
107 |
108 | $('.wrap, .tools').hide();
109 | $('#loader').show();
110 |
111 | promises[promises.length] = $.ajax({
112 | url: this.url,
113 | method: 'get',
114 | dataType: 'text'
115 | }).done(function(_data) {
116 | var data = nowSource['_r_'] && _data || processData(_data);
117 | info = parseData(data, nowSource, _data);
118 |
119 | // 缓存 10 min
120 | store.set(id, JSON.stringify(info), 60 * 10);
121 |
122 | // 对比 storeInfo 与info
123 | // 然后再更新
124 | // 保证能告诉用户哪些内容是新的
125 | if (storeInfo && info) {
126 | // 只要 info 中有未在 storeInfo 中
127 | // 出现的元素
128 | // 那么就认为是新内容
129 | info.forEach(function(item) {
130 | var itemIsOld = storeInfo.some(function(sItem) {
131 | return sItem.url === item.url && sItem.title === item.title;
132 | });
133 |
134 | if (!itemIsOld) {
135 | item._is_new_ = true;
136 | }
137 | });
138 | }
139 |
140 | updateDOMContent(index, id, info, nowSource);
141 | });
142 | });
143 |
144 | // 都完成之后才显示
145 | return $.when(promises).then(function() {
146 | $('.wrap, .tools').fadeIn(300);
147 | $('#loader').fadeOut(400);
148 | });
149 | }
150 |
151 | /**
152 | *
153 | * 初步处理返回的字符串
154 | *
155 | * @param {String} data
156 | * @return {String}
157 | *
158 | */
159 | function processData(data) {
160 | data = data.replace(/src=/gim, 'xsrc=')
161 | .replace(/
/gim, 'template>')
167 | .replace(/])+results=/gim, '])*>/gim, '')
170 | .trim();
171 |
172 | if (data.indexOf('') < 0) return data;
173 |
174 | return data.substring(
175 | data.indexOf('') + 6,
176 |
177 | data.lastIndexOf('') > 0
178 | ? data.lastIndexOf('')
179 | : data.length
180 | );
181 | }
182 |
183 | /**
184 | *
185 | * 根据当前的处理对象和 data 字符串
186 | * 生成相应的提供渲染的数组
187 | *
188 | * @param {Object} data
189 | * @param {Object} source
190 | * @return {Array}
191 | *
192 | */
193 | function parseData(data, source, raw) {
194 | if (typeof source.parse === 'function') {
195 | return source.parse(data, raw);
196 | }
197 |
198 | var info = [];
199 |
200 | // 如果是 localStorage 中配置的 rss
201 | if (source._r_) {
202 | var data = $.xml2json(data);
203 | var keys = source.colum.trim().split('.');
204 | var i = 0;
205 |
206 | while (i < keys.length) {
207 | if (data[keys[i]]) {
208 | data = data[keys[i++]];
209 | } else {
210 | return info;
211 | }
212 | }
213 |
214 | data = data.slice(0, source.max);
215 | info = data.map(function(item) {
216 | var getText = function(data, keys) {
217 | keys = keys.split('.');
218 | var i = 0;
219 |
220 | while (i < keys.length) {
221 | if (data[keys[i]]) {
222 | data = data[keys[i++]];
223 | } else {
224 | return '';
225 | }
226 | }
227 |
228 | return typeof data !== 'string' ? data['_'] : data;
229 | };
230 |
231 | var cdata = /^\<\!\[CDARA\[(.+)\]\]>$/,
232 | title = getText(item, source.title),
233 | match = title.match(cdata);
234 |
235 | var time = getText(item, source.time);
236 | if (!time) {
237 | for (var k in item) {
238 | if ({}.hasOwnProperty.call(item, k)) {
239 | if (k.toLowerCase().indexOf('pub') === 0) {
240 | time = item[k];
241 | break;
242 | }
243 | }
244 | }
245 | }
246 |
247 | var url = getText(item, source.link);
248 | if (url && typeof url !== 'string') {
249 | url = url.$.href;
250 | }
251 |
252 |
253 | var timeParsed = null;
254 |
255 | try {
256 | timeParsed = Date.parse(time);
257 | } catch (e){};
258 |
259 | if (timeParsed) {
260 | time = (new Date(timeParsed)).toLocaleDateString();
261 | }
262 |
263 | var timeMatch = time.match(/\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/);
264 | time = timeMatch && timeMatch[0] || '';
265 | return {
266 | url: url || '',
267 | title: (match && match[1] || title).trim(),
268 | time: time
269 | };
270 | });
271 | return info;
272 | }
273 |
274 | var $columns = $('').html(data).find(source.colum);
275 | var temp = null, $colum = null;
276 |
277 | // 如果是 localStorage 中配置的 selector
278 | if (source._c_) {
279 | for (var i = 0, len = $columns.length; i < len && i < (source.max || 10); i++) {
280 | $colum = $columns.eq(i);
281 |
282 | temp = {
283 | url: $colum.find(source.link).attr('href'),
284 | title: $colum.find(source.title).text(),
285 | time: source.time && $colum.find(source.time).text() || '',
286 | };
287 |
288 | if (!/^http/.test(temp.url)) {
289 | temp.url = (new URL(temp.url, source.url)).href;
290 | }
291 |
292 | info.push(temp);
293 | }
294 |
295 | return info;
296 | }
297 |
298 | for (var i = 0, len = $columns.length; i < len && i < (source.max || 10); i++) {
299 | temp = source.handle.call(source, $columns.eq(i));
300 |
301 | if (temp) {
302 | if (!/^http/.test(temp.url)) {
303 | temp.url = (new URL(temp.url, source.url)).href;
304 | }
305 | temp.title = temp.title.trim();
306 | info.push(temp);
307 | }
308 | }
309 |
310 | return info;
311 | }
312 |
313 |
314 | /**
315 | * Escape the given string of `html`.
316 | */
317 | function escapeHtml(html){
318 | return String(html)
319 | .replace(/&(?!\w+;)/g, '&')
320 | .replace(//g, '>')
322 | .replace(/"/g, '"');
323 | };
324 |
325 | /**
326 | * 生成内容
327 | */
328 | function getRenderContent(info, source, id) {
329 | var titleText = `${id}`;
330 | var linksText = info.reduce(function(prev, curr) {
331 | return prev + `
332 |
333 | ${escapeHtml(curr.title)}
334 |
335 | ${window.getDate(curr.time)}
336 | `;
337 | }, '');
338 |
339 | return titleText + linksText;
340 | }
341 |
342 | /**
343 | * 更新 DOM
344 | */
345 | function updateDOMContent(index, id, info, source) {
346 | if (!info) return;
347 | var content = getRenderContent(info, source, id);
348 |
349 | $('#dom_' + index).empty().html(content);
350 |
351 | var isAnyNew = info.some(function(item) {
352 | return item._is_new_;
353 | });
354 |
355 | $menu.find('[data-key="dom_' + index + '"]')
356 | .addClass(isAnyNew ? 'new' : '')
357 | .find(".count")
358 | .html($("#dom_" + index + " li").length || 0);
359 | };
360 |
--------------------------------------------------------------------------------
/js/jquery.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery v2.2.1 | (c) jQuery Foundation | jquery.org/license */
2 | !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!k.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c}catch(e){}O.set(a,b,c);
3 | }else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.rnamespace||a.rnamespace.test(g.namespace))&&(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/