├── LICENSE
├── README.md
├── assets
├── .DS_Store
├── Preloader_2.gif
├── css
│ ├── bootstrap-theme.css
│ ├── bootstrap-theme.min.css
│ ├── bootstrap.css
│ ├── bootstrap.min.css
│ ├── djbug.css
│ └── highlight.default.css
├── fonts
│ ├── glyphicons-halflings-regular.eot
│ ├── glyphicons-halflings-regular.svg
│ ├── glyphicons-halflings-regular.ttf
│ ├── glyphicons-halflings-regular.woff
│ └── glyphicons-halflings-regular.woff2
└── js
│ ├── bootstrap.js
│ ├── bootstrap.min.js
│ ├── highlight.pack.js
│ └── jquery.min.js
├── background.html
├── background.js
├── devtools.html
├── devtools.js
├── dist
├── .DS_Store
└── djdevpanel-0.1.zip
├── icon128.png
├── icon16.png
├── icon256.png
├── icon48.png
├── inserted-script.js
├── manifest.json
├── messageback-script.js
├── messaging.js
├── panel.html
└── panel.js
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2017, Lofty Labs
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | * Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | * Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | * Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Django Developer Panel for Chrome
2 | ===
3 |
4 | This extension is based on the boilerplate code at [https://github.com/thingsinjars/devtools-extension](https://github.com/thingsinjars/devtools-extension)
5 |
6 | Development Installation
7 | ===
8 |
9 | * Open [chrome://extensions](chrome://extensions)
10 | * Enable 'Developer Mode' checkbox
11 | * Click 'Load unpacked extensions...'
12 | * Select the `djdevpanel-devtools` folder
13 |
14 | Usage
15 | ===
16 |
17 | Install the chrome extension and follow the instructions at [https://github.com/loftylabs/django-developer-panel](https://github.com/loftylabs/django-developer-panel) to add the required middleware to your Django application.
18 |
--------------------------------------------------------------------------------
/assets/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/assets/.DS_Store
--------------------------------------------------------------------------------
/assets/Preloader_2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/assets/Preloader_2.gif
--------------------------------------------------------------------------------
/assets/css/bootstrap-theme.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.7 (http://getbootstrap.com)
3 | * Copyright 2011-2017 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 |
7 | /*!
8 | * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=d54a43febee21689b4ca77f6ccba6a21)
9 | * Config saved to config.json and https://gist.github.com/d54a43febee21689b4ca77f6ccba6a21
10 | */
11 | /*!
12 | * Bootstrap v3.3.7 (http://getbootstrap.com)
13 | * Copyright 2011-2016 Twitter, Inc.
14 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
15 | */
16 | .btn-default,
17 | .btn-primary,
18 | .btn-success,
19 | .btn-info,
20 | .btn-warning,
21 | .btn-danger {
22 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
23 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
24 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
25 | }
26 | .btn-default:active,
27 | .btn-primary:active,
28 | .btn-success:active,
29 | .btn-info:active,
30 | .btn-warning:active,
31 | .btn-danger:active,
32 | .btn-default.active,
33 | .btn-primary.active,
34 | .btn-success.active,
35 | .btn-info.active,
36 | .btn-warning.active,
37 | .btn-danger.active {
38 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
39 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
40 | }
41 | .btn-default.disabled,
42 | .btn-primary.disabled,
43 | .btn-success.disabled,
44 | .btn-info.disabled,
45 | .btn-warning.disabled,
46 | .btn-danger.disabled,
47 | .btn-default[disabled],
48 | .btn-primary[disabled],
49 | .btn-success[disabled],
50 | .btn-info[disabled],
51 | .btn-warning[disabled],
52 | .btn-danger[disabled],
53 | fieldset[disabled] .btn-default,
54 | fieldset[disabled] .btn-primary,
55 | fieldset[disabled] .btn-success,
56 | fieldset[disabled] .btn-info,
57 | fieldset[disabled] .btn-warning,
58 | fieldset[disabled] .btn-danger {
59 | -webkit-box-shadow: none;
60 | box-shadow: none;
61 | }
62 | .btn-default .badge,
63 | .btn-primary .badge,
64 | .btn-success .badge,
65 | .btn-info .badge,
66 | .btn-warning .badge,
67 | .btn-danger .badge {
68 | text-shadow: none;
69 | }
70 | .btn:active,
71 | .btn.active {
72 | background-image: none;
73 | }
74 | .btn-default {
75 | background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);
76 | background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);
77 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e0e0e0));
78 | background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);
79 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
80 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
81 | background-repeat: repeat-x;
82 | border-color: #dbdbdb;
83 | text-shadow: 0 1px 0 #fff;
84 | border-color: #ccc;
85 | }
86 | .btn-default:hover,
87 | .btn-default:focus {
88 | background-color: #e0e0e0;
89 | background-position: 0 -15px;
90 | }
91 | .btn-default:active,
92 | .btn-default.active {
93 | background-color: #e0e0e0;
94 | border-color: #dbdbdb;
95 | }
96 | .btn-default.disabled,
97 | .btn-default[disabled],
98 | fieldset[disabled] .btn-default,
99 | .btn-default.disabled:hover,
100 | .btn-default[disabled]:hover,
101 | fieldset[disabled] .btn-default:hover,
102 | .btn-default.disabled:focus,
103 | .btn-default[disabled]:focus,
104 | fieldset[disabled] .btn-default:focus,
105 | .btn-default.disabled.focus,
106 | .btn-default[disabled].focus,
107 | fieldset[disabled] .btn-default.focus,
108 | .btn-default.disabled:active,
109 | .btn-default[disabled]:active,
110 | fieldset[disabled] .btn-default:active,
111 | .btn-default.disabled.active,
112 | .btn-default[disabled].active,
113 | fieldset[disabled] .btn-default.active {
114 | background-color: #e0e0e0;
115 | background-image: none;
116 | }
117 | .btn-primary {
118 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
119 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
120 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
121 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
122 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
123 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
124 | background-repeat: repeat-x;
125 | border-color: #245580;
126 | }
127 | .btn-primary:hover,
128 | .btn-primary:focus {
129 | background-color: #265a88;
130 | background-position: 0 -15px;
131 | }
132 | .btn-primary:active,
133 | .btn-primary.active {
134 | background-color: #265a88;
135 | border-color: #245580;
136 | }
137 | .btn-primary.disabled,
138 | .btn-primary[disabled],
139 | fieldset[disabled] .btn-primary,
140 | .btn-primary.disabled:hover,
141 | .btn-primary[disabled]:hover,
142 | fieldset[disabled] .btn-primary:hover,
143 | .btn-primary.disabled:focus,
144 | .btn-primary[disabled]:focus,
145 | fieldset[disabled] .btn-primary:focus,
146 | .btn-primary.disabled.focus,
147 | .btn-primary[disabled].focus,
148 | fieldset[disabled] .btn-primary.focus,
149 | .btn-primary.disabled:active,
150 | .btn-primary[disabled]:active,
151 | fieldset[disabled] .btn-primary:active,
152 | .btn-primary.disabled.active,
153 | .btn-primary[disabled].active,
154 | fieldset[disabled] .btn-primary.active {
155 | background-color: #265a88;
156 | background-image: none;
157 | }
158 | .btn-success {
159 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
160 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
161 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
162 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
163 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
164 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
165 | background-repeat: repeat-x;
166 | border-color: #3e8f3e;
167 | }
168 | .btn-success:hover,
169 | .btn-success:focus {
170 | background-color: #419641;
171 | background-position: 0 -15px;
172 | }
173 | .btn-success:active,
174 | .btn-success.active {
175 | background-color: #419641;
176 | border-color: #3e8f3e;
177 | }
178 | .btn-success.disabled,
179 | .btn-success[disabled],
180 | fieldset[disabled] .btn-success,
181 | .btn-success.disabled:hover,
182 | .btn-success[disabled]:hover,
183 | fieldset[disabled] .btn-success:hover,
184 | .btn-success.disabled:focus,
185 | .btn-success[disabled]:focus,
186 | fieldset[disabled] .btn-success:focus,
187 | .btn-success.disabled.focus,
188 | .btn-success[disabled].focus,
189 | fieldset[disabled] .btn-success.focus,
190 | .btn-success.disabled:active,
191 | .btn-success[disabled]:active,
192 | fieldset[disabled] .btn-success:active,
193 | .btn-success.disabled.active,
194 | .btn-success[disabled].active,
195 | fieldset[disabled] .btn-success.active {
196 | background-color: #419641;
197 | background-image: none;
198 | }
199 | .btn-info {
200 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
201 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
202 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
203 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
204 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
205 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
206 | background-repeat: repeat-x;
207 | border-color: #28a4c9;
208 | }
209 | .btn-info:hover,
210 | .btn-info:focus {
211 | background-color: #2aabd2;
212 | background-position: 0 -15px;
213 | }
214 | .btn-info:active,
215 | .btn-info.active {
216 | background-color: #2aabd2;
217 | border-color: #28a4c9;
218 | }
219 | .btn-info.disabled,
220 | .btn-info[disabled],
221 | fieldset[disabled] .btn-info,
222 | .btn-info.disabled:hover,
223 | .btn-info[disabled]:hover,
224 | fieldset[disabled] .btn-info:hover,
225 | .btn-info.disabled:focus,
226 | .btn-info[disabled]:focus,
227 | fieldset[disabled] .btn-info:focus,
228 | .btn-info.disabled.focus,
229 | .btn-info[disabled].focus,
230 | fieldset[disabled] .btn-info.focus,
231 | .btn-info.disabled:active,
232 | .btn-info[disabled]:active,
233 | fieldset[disabled] .btn-info:active,
234 | .btn-info.disabled.active,
235 | .btn-info[disabled].active,
236 | fieldset[disabled] .btn-info.active {
237 | background-color: #2aabd2;
238 | background-image: none;
239 | }
240 | .btn-warning {
241 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
242 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
243 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
244 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
245 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
246 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
247 | background-repeat: repeat-x;
248 | border-color: #e38d13;
249 | }
250 | .btn-warning:hover,
251 | .btn-warning:focus {
252 | background-color: #eb9316;
253 | background-position: 0 -15px;
254 | }
255 | .btn-warning:active,
256 | .btn-warning.active {
257 | background-color: #eb9316;
258 | border-color: #e38d13;
259 | }
260 | .btn-warning.disabled,
261 | .btn-warning[disabled],
262 | fieldset[disabled] .btn-warning,
263 | .btn-warning.disabled:hover,
264 | .btn-warning[disabled]:hover,
265 | fieldset[disabled] .btn-warning:hover,
266 | .btn-warning.disabled:focus,
267 | .btn-warning[disabled]:focus,
268 | fieldset[disabled] .btn-warning:focus,
269 | .btn-warning.disabled.focus,
270 | .btn-warning[disabled].focus,
271 | fieldset[disabled] .btn-warning.focus,
272 | .btn-warning.disabled:active,
273 | .btn-warning[disabled]:active,
274 | fieldset[disabled] .btn-warning:active,
275 | .btn-warning.disabled.active,
276 | .btn-warning[disabled].active,
277 | fieldset[disabled] .btn-warning.active {
278 | background-color: #eb9316;
279 | background-image: none;
280 | }
281 | .btn-danger {
282 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
283 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
284 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
285 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
286 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
287 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
288 | background-repeat: repeat-x;
289 | border-color: #b92c28;
290 | }
291 | .btn-danger:hover,
292 | .btn-danger:focus {
293 | background-color: #c12e2a;
294 | background-position: 0 -15px;
295 | }
296 | .btn-danger:active,
297 | .btn-danger.active {
298 | background-color: #c12e2a;
299 | border-color: #b92c28;
300 | }
301 | .btn-danger.disabled,
302 | .btn-danger[disabled],
303 | fieldset[disabled] .btn-danger,
304 | .btn-danger.disabled:hover,
305 | .btn-danger[disabled]:hover,
306 | fieldset[disabled] .btn-danger:hover,
307 | .btn-danger.disabled:focus,
308 | .btn-danger[disabled]:focus,
309 | fieldset[disabled] .btn-danger:focus,
310 | .btn-danger.disabled.focus,
311 | .btn-danger[disabled].focus,
312 | fieldset[disabled] .btn-danger.focus,
313 | .btn-danger.disabled:active,
314 | .btn-danger[disabled]:active,
315 | fieldset[disabled] .btn-danger:active,
316 | .btn-danger.disabled.active,
317 | .btn-danger[disabled].active,
318 | fieldset[disabled] .btn-danger.active {
319 | background-color: #c12e2a;
320 | background-image: none;
321 | }
322 | .thumbnail,
323 | .img-thumbnail {
324 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
325 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
326 | }
327 | .dropdown-menu > li > a:hover,
328 | .dropdown-menu > li > a:focus {
329 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
330 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
331 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
332 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
333 | background-repeat: repeat-x;
334 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
335 | background-color: #e8e8e8;
336 | }
337 | .dropdown-menu > .active > a,
338 | .dropdown-menu > .active > a:hover,
339 | .dropdown-menu > .active > a:focus {
340 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
341 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
342 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
343 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
344 | background-repeat: repeat-x;
345 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
346 | background-color: #2e6da4;
347 | }
348 | .navbar-default {
349 | background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
350 | background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
351 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));
352 | background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
353 | background-repeat: repeat-x;
354 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
355 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
356 | border-radius: 4px;
357 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
358 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
359 | }
360 | .navbar-default .navbar-nav > .open > a,
361 | .navbar-default .navbar-nav > .active > a {
362 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
363 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
364 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
365 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
366 | background-repeat: repeat-x;
367 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
368 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
369 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
370 | }
371 | .navbar-brand,
372 | .navbar-nav > li > a {
373 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
374 | }
375 | .navbar-inverse {
376 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);
377 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);
378 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222222));
379 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
380 | background-repeat: repeat-x;
381 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
382 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
383 | border-radius: 4px;
384 | }
385 | .navbar-inverse .navbar-nav > .open > a,
386 | .navbar-inverse .navbar-nav > .active > a {
387 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
388 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
389 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
390 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
391 | background-repeat: repeat-x;
392 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
393 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
394 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
395 | }
396 | .navbar-inverse .navbar-brand,
397 | .navbar-inverse .navbar-nav > li > a {
398 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
399 | }
400 | .navbar-static-top,
401 | .navbar-fixed-top,
402 | .navbar-fixed-bottom {
403 | border-radius: 0;
404 | }
405 | @media (max-width: 767px) {
406 | .navbar .navbar-nav .open .dropdown-menu > .active > a,
407 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
408 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
409 | color: #fff;
410 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
411 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
412 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
413 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
414 | background-repeat: repeat-x;
415 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
416 | }
417 | }
418 | .alert {
419 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
420 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
421 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
422 | }
423 | .alert-success {
424 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
425 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
426 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
427 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
428 | background-repeat: repeat-x;
429 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
430 | border-color: #b2dba1;
431 | }
432 | .alert-info {
433 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
434 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
435 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
436 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
437 | background-repeat: repeat-x;
438 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
439 | border-color: #9acfea;
440 | }
441 | .alert-warning {
442 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
443 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
444 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
445 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
446 | background-repeat: repeat-x;
447 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
448 | border-color: #f5e79e;
449 | }
450 | .alert-danger {
451 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
452 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
453 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
454 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
455 | background-repeat: repeat-x;
456 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
457 | border-color: #dca7a7;
458 | }
459 | .progress {
460 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
461 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
462 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
463 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
464 | background-repeat: repeat-x;
465 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
466 | }
467 | .progress-bar {
468 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
469 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
470 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
471 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
472 | background-repeat: repeat-x;
473 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
474 | }
475 | .progress-bar-success {
476 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
477 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
478 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
479 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
480 | background-repeat: repeat-x;
481 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
482 | }
483 | .progress-bar-info {
484 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
485 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
486 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
487 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
488 | background-repeat: repeat-x;
489 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
490 | }
491 | .progress-bar-warning {
492 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
493 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
494 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
495 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
496 | background-repeat: repeat-x;
497 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
498 | }
499 | .progress-bar-danger {
500 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
501 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
502 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
503 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
504 | background-repeat: repeat-x;
505 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
506 | }
507 | .progress-bar-striped {
508 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
509 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
510 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
511 | }
512 | .list-group {
513 | border-radius: 4px;
514 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
515 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
516 | }
517 | .list-group-item.active,
518 | .list-group-item.active:hover,
519 | .list-group-item.active:focus {
520 | text-shadow: 0 -1px 0 #286090;
521 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
522 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
523 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
524 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
525 | background-repeat: repeat-x;
526 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
527 | border-color: #2b669a;
528 | }
529 | .list-group-item.active .badge,
530 | .list-group-item.active:hover .badge,
531 | .list-group-item.active:focus .badge {
532 | text-shadow: none;
533 | }
534 | .panel {
535 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
536 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
537 | }
538 | .panel-default > .panel-heading {
539 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
540 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
541 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
542 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
543 | background-repeat: repeat-x;
544 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
545 | }
546 | .panel-primary > .panel-heading {
547 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
548 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
549 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
550 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
551 | background-repeat: repeat-x;
552 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
553 | }
554 | .panel-success > .panel-heading {
555 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
556 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
557 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
558 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
559 | background-repeat: repeat-x;
560 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
561 | }
562 | .panel-info > .panel-heading {
563 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
564 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
565 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
566 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
567 | background-repeat: repeat-x;
568 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
569 | }
570 | .panel-warning > .panel-heading {
571 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
572 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
573 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
574 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
575 | background-repeat: repeat-x;
576 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
577 | }
578 | .panel-danger > .panel-heading {
579 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
580 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
581 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
582 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
583 | background-repeat: repeat-x;
584 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
585 | }
586 | .well {
587 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
588 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
589 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
590 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
591 | background-repeat: repeat-x;
592 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
593 | border-color: #dcdcdc;
594 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
595 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
596 | }
597 |
--------------------------------------------------------------------------------
/assets/css/bootstrap-theme.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.7 (http://getbootstrap.com)
3 | * Copyright 2011-2017 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 |
7 | /*!
8 | * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=d54a43febee21689b4ca77f6ccba6a21)
9 | * Config saved to config.json and https://gist.github.com/d54a43febee21689b4ca77f6ccba6a21
10 | *//*!
11 | * Bootstrap v3.3.7 (http://getbootstrap.com)
12 | * Copyright 2011-2016 Twitter, Inc.
13 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
14 | */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-default.disabled,.btn-primary.disabled,.btn-success.disabled,.btn-info.disabled,.btn-warning.disabled,.btn-danger.disabled,.btn-default[disabled],.btn-primary[disabled],.btn-success[disabled],.btn-info[disabled],.btn-warning[disabled],.btn-danger[disabled],fieldset[disabled] .btn-default,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-info,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-danger{-webkit-box-shadow:none;box-shadow:none}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-o-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#e0e0e0));background-image:linear-gradient(to bottom, #fff 0, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-o-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#265a88));background-image:linear-gradient(to bottom, #337ab7 0, #265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#419641));background-image:linear-gradient(to bottom, #5cb85c 0, #419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#2aabd2));background-image:linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#eb9316));background-image:linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c12e2a));background-image:linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-o-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#f8f8f8));background-image:linear-gradient(to bottom, #fff 0, #f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dbdbdb), to(#e2e2e2));background-image:linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-o-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));background-image:linear-gradient(to bottom, #3c3c3c 0, #222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-o-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #080808), to(#0f0f0f));background-image:linear-gradient(to bottom, #080808 0, #0f0f0f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#c8e5bc));background-image:linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#b9def0));background-image:linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#f8efc0));background-image:linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-o-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#e7c3c3));background-image:linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), to(#f5f5f5));background-image:linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-o-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#286090));background-image:linear-gradient(to bottom, #337ab7 0, #286090 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#449d44));background-image:linear-gradient(to bottom, #5cb85c 0, #449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#31b0d5));background-image:linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#ec971f));background-image:linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c9302c));background-image:linear-gradient(to bottom, #d9534f 0, #c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2b669a));background-image:linear-gradient(to bottom, #337ab7 0, #2b669a 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#d0e9c6));background-image:linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#c4e3f3));background-image:linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#faf2cc));background-image:linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-o-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#ebcccc));background-image:linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #e8e8e8), to(#f5f5f5));background-image:linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)}
--------------------------------------------------------------------------------
/assets/css/djbug.css:
--------------------------------------------------------------------------------
1 | pre {
2 | padding: 0;
3 | border: 0;
4 | }
5 |
6 |
7 | .current-user code, .session-data code {
8 | white-space: pre;
9 | }
10 |
11 | .no-js #loader { display: none; }
12 | .js #loader { display: block; position: absolute; left: 100px; top: 0; }
13 | .se-pre-con {
14 | position: fixed;
15 | left: 0px;
16 | top: 0px;
17 | width: 100%;
18 | height: 100%;
19 | z-index: 9999;
20 | background: url(../Preloader_2.gif) center no-repeat #fff;
21 | }
22 |
23 | .se-pre-con span {
24 | font-size: 3em;
25 | display: block;
26 | font-weight: bold;
27 | color: #00a0c8;
28 | position: relative;
29 | top: calc(50% - 33px);
30 | left: calc(50% - 300px);
31 | }
32 |
33 | .borderless {
34 | border: 0 !important;
35 | }
36 |
--------------------------------------------------------------------------------
/assets/css/highlight.default.css:
--------------------------------------------------------------------------------
1 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
2 |
3 | /* Tomorrow Comment */
4 | .hljs-comment,
5 | .hljs-quote {
6 | color: #8e908c;
7 | }
8 |
9 | /* Tomorrow Red */
10 | .hljs-variable,
11 | .hljs-template-variable,
12 | .hljs-tag,
13 | .hljs-name,
14 | .hljs-selector-id,
15 | .hljs-selector-class,
16 | .hljs-regexp,
17 | .hljs-deletion {
18 | color: #c82829;
19 | }
20 |
21 | /* Tomorrow Orange */
22 | .hljs-number,
23 | .hljs-built_in,
24 | .hljs-builtin-name,
25 | .hljs-literal,
26 | .hljs-type,
27 | .hljs-params,
28 | .hljs-meta,
29 | .hljs-link {
30 | color: #f5871f;
31 | }
32 |
33 | /* Tomorrow Yellow */
34 | .hljs-attribute {
35 | color: #eab700;
36 | }
37 |
38 | /* Tomorrow Green */
39 | .hljs-string,
40 | .hljs-symbol,
41 | .hljs-bullet,
42 | .hljs-addition {
43 | color: #718c00;
44 | }
45 |
46 | /* Tomorrow Blue */
47 | .hljs-title,
48 | .hljs-section {
49 | color: #4271ae;
50 | }
51 |
52 | /* Tomorrow Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #8959a8;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: white;
62 | color: #4d4d4c;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/assets/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/assets/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/assets/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/assets/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/assets/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/assets/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/assets/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/assets/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/assets/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.7 (http://getbootstrap.com)
3 | * Copyright 2011-2017 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 |
7 | /*!
8 | * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=d54a43febee21689b4ca77f6ccba6a21)
9 | * Config saved to config.json and https://gist.github.com/d54a43febee21689b4ca77f6ccba6a21
10 | */
11 | if (typeof jQuery === 'undefined') {
12 | throw new Error('Bootstrap\'s JavaScript requires jQuery')
13 | }
14 | +function ($) {
15 | 'use strict';
16 | var version = $.fn.jquery.split(' ')[0].split('.')
17 | if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
18 | throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
19 | }
20 | }(jQuery);
21 |
22 | /* ========================================================================
23 | * Bootstrap: alert.js v3.3.7
24 | * http://getbootstrap.com/javascript/#alerts
25 | * ========================================================================
26 | * Copyright 2011-2016 Twitter, Inc.
27 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
28 | * ======================================================================== */
29 |
30 |
31 | +function ($) {
32 | 'use strict';
33 |
34 | // ALERT CLASS DEFINITION
35 | // ======================
36 |
37 | var dismiss = '[data-dismiss="alert"]'
38 | var Alert = function (el) {
39 | $(el).on('click', dismiss, this.close)
40 | }
41 |
42 | Alert.VERSION = '3.3.7'
43 |
44 | Alert.TRANSITION_DURATION = 150
45 |
46 | Alert.prototype.close = function (e) {
47 | var $this = $(this)
48 | var selector = $this.attr('data-target')
49 |
50 | if (!selector) {
51 | selector = $this.attr('href')
52 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
53 | }
54 |
55 | var $parent = $(selector === '#' ? [] : selector)
56 |
57 | if (e) e.preventDefault()
58 |
59 | if (!$parent.length) {
60 | $parent = $this.closest('.alert')
61 | }
62 |
63 | $parent.trigger(e = $.Event('close.bs.alert'))
64 |
65 | if (e.isDefaultPrevented()) return
66 |
67 | $parent.removeClass('in')
68 |
69 | function removeElement() {
70 | // detach from parent, fire event then clean up data
71 | $parent.detach().trigger('closed.bs.alert').remove()
72 | }
73 |
74 | $.support.transition && $parent.hasClass('fade') ?
75 | $parent
76 | .one('bsTransitionEnd', removeElement)
77 | .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
78 | removeElement()
79 | }
80 |
81 |
82 | // ALERT PLUGIN DEFINITION
83 | // =======================
84 |
85 | function Plugin(option) {
86 | return this.each(function () {
87 | var $this = $(this)
88 | var data = $this.data('bs.alert')
89 |
90 | if (!data) $this.data('bs.alert', (data = new Alert(this)))
91 | if (typeof option == 'string') data[option].call($this)
92 | })
93 | }
94 |
95 | var old = $.fn.alert
96 |
97 | $.fn.alert = Plugin
98 | $.fn.alert.Constructor = Alert
99 |
100 |
101 | // ALERT NO CONFLICT
102 | // =================
103 |
104 | $.fn.alert.noConflict = function () {
105 | $.fn.alert = old
106 | return this
107 | }
108 |
109 |
110 | // ALERT DATA-API
111 | // ==============
112 |
113 | $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
114 |
115 | }(jQuery);
116 |
117 | /* ========================================================================
118 | * Bootstrap: button.js v3.3.7
119 | * http://getbootstrap.com/javascript/#buttons
120 | * ========================================================================
121 | * Copyright 2011-2016 Twitter, Inc.
122 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
123 | * ======================================================================== */
124 |
125 |
126 | +function ($) {
127 | 'use strict';
128 |
129 | // BUTTON PUBLIC CLASS DEFINITION
130 | // ==============================
131 |
132 | var Button = function (element, options) {
133 | this.$element = $(element)
134 | this.options = $.extend({}, Button.DEFAULTS, options)
135 | this.isLoading = false
136 | }
137 |
138 | Button.VERSION = '3.3.7'
139 |
140 | Button.DEFAULTS = {
141 | loadingText: 'loading...'
142 | }
143 |
144 | Button.prototype.setState = function (state) {
145 | var d = 'disabled'
146 | var $el = this.$element
147 | var val = $el.is('input') ? 'val' : 'html'
148 | var data = $el.data()
149 |
150 | state += 'Text'
151 |
152 | if (data.resetText == null) $el.data('resetText', $el[val]())
153 |
154 | // push to event loop to allow forms to submit
155 | setTimeout($.proxy(function () {
156 | $el[val](data[state] == null ? this.options[state] : data[state])
157 |
158 | if (state == 'loadingText') {
159 | this.isLoading = true
160 | $el.addClass(d).attr(d, d).prop(d, true)
161 | } else if (this.isLoading) {
162 | this.isLoading = false
163 | $el.removeClass(d).removeAttr(d).prop(d, false)
164 | }
165 | }, this), 0)
166 | }
167 |
168 | Button.prototype.toggle = function () {
169 | var changed = true
170 | var $parent = this.$element.closest('[data-toggle="buttons"]')
171 |
172 | if ($parent.length) {
173 | var $input = this.$element.find('input')
174 | if ($input.prop('type') == 'radio') {
175 | if ($input.prop('checked')) changed = false
176 | $parent.find('.active').removeClass('active')
177 | this.$element.addClass('active')
178 | } else if ($input.prop('type') == 'checkbox') {
179 | if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
180 | this.$element.toggleClass('active')
181 | }
182 | $input.prop('checked', this.$element.hasClass('active'))
183 | if (changed) $input.trigger('change')
184 | } else {
185 | this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
186 | this.$element.toggleClass('active')
187 | }
188 | }
189 |
190 |
191 | // BUTTON PLUGIN DEFINITION
192 | // ========================
193 |
194 | function Plugin(option) {
195 | return this.each(function () {
196 | var $this = $(this)
197 | var data = $this.data('bs.button')
198 | var options = typeof option == 'object' && option
199 |
200 | if (!data) $this.data('bs.button', (data = new Button(this, options)))
201 |
202 | if (option == 'toggle') data.toggle()
203 | else if (option) data.setState(option)
204 | })
205 | }
206 |
207 | var old = $.fn.button
208 |
209 | $.fn.button = Plugin
210 | $.fn.button.Constructor = Button
211 |
212 |
213 | // BUTTON NO CONFLICT
214 | // ==================
215 |
216 | $.fn.button.noConflict = function () {
217 | $.fn.button = old
218 | return this
219 | }
220 |
221 |
222 | // BUTTON DATA-API
223 | // ===============
224 |
225 | $(document)
226 | .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
227 | var $btn = $(e.target).closest('.btn')
228 | Plugin.call($btn, 'toggle')
229 | if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
230 | // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
231 | e.preventDefault()
232 | // The target component still receive the focus
233 | if ($btn.is('input,button')) $btn.trigger('focus')
234 | else $btn.find('input:visible,button:visible').first().trigger('focus')
235 | }
236 | })
237 | .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
238 | $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
239 | })
240 |
241 | }(jQuery);
242 |
243 | /* ========================================================================
244 | * Bootstrap: carousel.js v3.3.7
245 | * http://getbootstrap.com/javascript/#carousel
246 | * ========================================================================
247 | * Copyright 2011-2016 Twitter, Inc.
248 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
249 | * ======================================================================== */
250 |
251 |
252 | +function ($) {
253 | 'use strict';
254 |
255 | // CAROUSEL CLASS DEFINITION
256 | // =========================
257 |
258 | var Carousel = function (element, options) {
259 | this.$element = $(element)
260 | this.$indicators = this.$element.find('.carousel-indicators')
261 | this.options = options
262 | this.paused = null
263 | this.sliding = null
264 | this.interval = null
265 | this.$active = null
266 | this.$items = null
267 |
268 | this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
269 |
270 | this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
271 | .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
272 | .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
273 | }
274 |
275 | Carousel.VERSION = '3.3.7'
276 |
277 | Carousel.TRANSITION_DURATION = 600
278 |
279 | Carousel.DEFAULTS = {
280 | interval: 5000,
281 | pause: 'hover',
282 | wrap: true,
283 | keyboard: true
284 | }
285 |
286 | Carousel.prototype.keydown = function (e) {
287 | if (/input|textarea/i.test(e.target.tagName)) return
288 | switch (e.which) {
289 | case 37: this.prev(); break
290 | case 39: this.next(); break
291 | default: return
292 | }
293 |
294 | e.preventDefault()
295 | }
296 |
297 | Carousel.prototype.cycle = function (e) {
298 | e || (this.paused = false)
299 |
300 | this.interval && clearInterval(this.interval)
301 |
302 | this.options.interval
303 | && !this.paused
304 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
305 |
306 | return this
307 | }
308 |
309 | Carousel.prototype.getItemIndex = function (item) {
310 | this.$items = item.parent().children('.item')
311 | return this.$items.index(item || this.$active)
312 | }
313 |
314 | Carousel.prototype.getItemForDirection = function (direction, active) {
315 | var activeIndex = this.getItemIndex(active)
316 | var willWrap = (direction == 'prev' && activeIndex === 0)
317 | || (direction == 'next' && activeIndex == (this.$items.length - 1))
318 | if (willWrap && !this.options.wrap) return active
319 | var delta = direction == 'prev' ? -1 : 1
320 | var itemIndex = (activeIndex + delta) % this.$items.length
321 | return this.$items.eq(itemIndex)
322 | }
323 |
324 | Carousel.prototype.to = function (pos) {
325 | var that = this
326 | var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
327 |
328 | if (pos > (this.$items.length - 1) || pos < 0) return
329 |
330 | if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
331 | if (activeIndex == pos) return this.pause().cycle()
332 |
333 | return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
334 | }
335 |
336 | Carousel.prototype.pause = function (e) {
337 | e || (this.paused = true)
338 |
339 | if (this.$element.find('.next, .prev').length && $.support.transition) {
340 | this.$element.trigger($.support.transition.end)
341 | this.cycle(true)
342 | }
343 |
344 | this.interval = clearInterval(this.interval)
345 |
346 | return this
347 | }
348 |
349 | Carousel.prototype.next = function () {
350 | if (this.sliding) return
351 | return this.slide('next')
352 | }
353 |
354 | Carousel.prototype.prev = function () {
355 | if (this.sliding) return
356 | return this.slide('prev')
357 | }
358 |
359 | Carousel.prototype.slide = function (type, next) {
360 | var $active = this.$element.find('.item.active')
361 | var $next = next || this.getItemForDirection(type, $active)
362 | var isCycling = this.interval
363 | var direction = type == 'next' ? 'left' : 'right'
364 | var that = this
365 |
366 | if ($next.hasClass('active')) return (this.sliding = false)
367 |
368 | var relatedTarget = $next[0]
369 | var slideEvent = $.Event('slide.bs.carousel', {
370 | relatedTarget: relatedTarget,
371 | direction: direction
372 | })
373 | this.$element.trigger(slideEvent)
374 | if (slideEvent.isDefaultPrevented()) return
375 |
376 | this.sliding = true
377 |
378 | isCycling && this.pause()
379 |
380 | if (this.$indicators.length) {
381 | this.$indicators.find('.active').removeClass('active')
382 | var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
383 | $nextIndicator && $nextIndicator.addClass('active')
384 | }
385 |
386 | var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
387 | if ($.support.transition && this.$element.hasClass('slide')) {
388 | $next.addClass(type)
389 | $next[0].offsetWidth // force reflow
390 | $active.addClass(direction)
391 | $next.addClass(direction)
392 | $active
393 | .one('bsTransitionEnd', function () {
394 | $next.removeClass([type, direction].join(' ')).addClass('active')
395 | $active.removeClass(['active', direction].join(' '))
396 | that.sliding = false
397 | setTimeout(function () {
398 | that.$element.trigger(slidEvent)
399 | }, 0)
400 | })
401 | .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
402 | } else {
403 | $active.removeClass('active')
404 | $next.addClass('active')
405 | this.sliding = false
406 | this.$element.trigger(slidEvent)
407 | }
408 |
409 | isCycling && this.cycle()
410 |
411 | return this
412 | }
413 |
414 |
415 | // CAROUSEL PLUGIN DEFINITION
416 | // ==========================
417 |
418 | function Plugin(option) {
419 | return this.each(function () {
420 | var $this = $(this)
421 | var data = $this.data('bs.carousel')
422 | var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
423 | var action = typeof option == 'string' ? option : options.slide
424 |
425 | if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
426 | if (typeof option == 'number') data.to(option)
427 | else if (action) data[action]()
428 | else if (options.interval) data.pause().cycle()
429 | })
430 | }
431 |
432 | var old = $.fn.carousel
433 |
434 | $.fn.carousel = Plugin
435 | $.fn.carousel.Constructor = Carousel
436 |
437 |
438 | // CAROUSEL NO CONFLICT
439 | // ====================
440 |
441 | $.fn.carousel.noConflict = function () {
442 | $.fn.carousel = old
443 | return this
444 | }
445 |
446 |
447 | // CAROUSEL DATA-API
448 | // =================
449 |
450 | var clickHandler = function (e) {
451 | var href
452 | var $this = $(this)
453 | var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
454 | if (!$target.hasClass('carousel')) return
455 | var options = $.extend({}, $target.data(), $this.data())
456 | var slideIndex = $this.attr('data-slide-to')
457 | if (slideIndex) options.interval = false
458 |
459 | Plugin.call($target, options)
460 |
461 | if (slideIndex) {
462 | $target.data('bs.carousel').to(slideIndex)
463 | }
464 |
465 | e.preventDefault()
466 | }
467 |
468 | $(document)
469 | .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
470 | .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
471 |
472 | $(window).on('load', function () {
473 | $('[data-ride="carousel"]').each(function () {
474 | var $carousel = $(this)
475 | Plugin.call($carousel, $carousel.data())
476 | })
477 | })
478 |
479 | }(jQuery);
480 |
481 | /* ========================================================================
482 | * Bootstrap: dropdown.js v3.3.7
483 | * http://getbootstrap.com/javascript/#dropdowns
484 | * ========================================================================
485 | * Copyright 2011-2016 Twitter, Inc.
486 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
487 | * ======================================================================== */
488 |
489 |
490 | +function ($) {
491 | 'use strict';
492 |
493 | // DROPDOWN CLASS DEFINITION
494 | // =========================
495 |
496 | var backdrop = '.dropdown-backdrop'
497 | var toggle = '[data-toggle="dropdown"]'
498 | var Dropdown = function (element) {
499 | $(element).on('click.bs.dropdown', this.toggle)
500 | }
501 |
502 | Dropdown.VERSION = '3.3.7'
503 |
504 | function getParent($this) {
505 | var selector = $this.attr('data-target')
506 |
507 | if (!selector) {
508 | selector = $this.attr('href')
509 | selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
510 | }
511 |
512 | var $parent = selector && $(selector)
513 |
514 | return $parent && $parent.length ? $parent : $this.parent()
515 | }
516 |
517 | function clearMenus(e) {
518 | if (e && e.which === 3) return
519 | $(backdrop).remove()
520 | $(toggle).each(function () {
521 | var $this = $(this)
522 | var $parent = getParent($this)
523 | var relatedTarget = { relatedTarget: this }
524 |
525 | if (!$parent.hasClass('open')) return
526 |
527 | if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
528 |
529 | $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
530 |
531 | if (e.isDefaultPrevented()) return
532 |
533 | $this.attr('aria-expanded', 'false')
534 | $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
535 | })
536 | }
537 |
538 | Dropdown.prototype.toggle = function (e) {
539 | var $this = $(this)
540 |
541 | if ($this.is('.disabled, :disabled')) return
542 |
543 | var $parent = getParent($this)
544 | var isActive = $parent.hasClass('open')
545 |
546 | clearMenus()
547 |
548 | if (!isActive) {
549 | if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
550 | // if mobile we use a backdrop because click events don't delegate
551 | $(document.createElement('div'))
552 | .addClass('dropdown-backdrop')
553 | .insertAfter($(this))
554 | .on('click', clearMenus)
555 | }
556 |
557 | var relatedTarget = { relatedTarget: this }
558 | $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
559 |
560 | if (e.isDefaultPrevented()) return
561 |
562 | $this
563 | .trigger('focus')
564 | .attr('aria-expanded', 'true')
565 |
566 | $parent
567 | .toggleClass('open')
568 | .trigger($.Event('shown.bs.dropdown', relatedTarget))
569 | }
570 |
571 | return false
572 | }
573 |
574 | Dropdown.prototype.keydown = function (e) {
575 | if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
576 |
577 | var $this = $(this)
578 |
579 | e.preventDefault()
580 | e.stopPropagation()
581 |
582 | if ($this.is('.disabled, :disabled')) return
583 |
584 | var $parent = getParent($this)
585 | var isActive = $parent.hasClass('open')
586 |
587 | if (!isActive && e.which != 27 || isActive && e.which == 27) {
588 | if (e.which == 27) $parent.find(toggle).trigger('focus')
589 | return $this.trigger('click')
590 | }
591 |
592 | var desc = ' li:not(.disabled):visible a'
593 | var $items = $parent.find('.dropdown-menu' + desc)
594 |
595 | if (!$items.length) return
596 |
597 | var index = $items.index(e.target)
598 |
599 | if (e.which == 38 && index > 0) index-- // up
600 | if (e.which == 40 && index < $items.length - 1) index++ // down
601 | if (!~index) index = 0
602 |
603 | $items.eq(index).trigger('focus')
604 | }
605 |
606 |
607 | // DROPDOWN PLUGIN DEFINITION
608 | // ==========================
609 |
610 | function Plugin(option) {
611 | return this.each(function () {
612 | var $this = $(this)
613 | var data = $this.data('bs.dropdown')
614 |
615 | if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
616 | if (typeof option == 'string') data[option].call($this)
617 | })
618 | }
619 |
620 | var old = $.fn.dropdown
621 |
622 | $.fn.dropdown = Plugin
623 | $.fn.dropdown.Constructor = Dropdown
624 |
625 |
626 | // DROPDOWN NO CONFLICT
627 | // ====================
628 |
629 | $.fn.dropdown.noConflict = function () {
630 | $.fn.dropdown = old
631 | return this
632 | }
633 |
634 |
635 | // APPLY TO STANDARD DROPDOWN ELEMENTS
636 | // ===================================
637 |
638 | $(document)
639 | .on('click.bs.dropdown.data-api', clearMenus)
640 | .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
641 | .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
642 | .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
643 | .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
644 |
645 | }(jQuery);
646 |
647 | /* ========================================================================
648 | * Bootstrap: modal.js v3.3.7
649 | * http://getbootstrap.com/javascript/#modals
650 | * ========================================================================
651 | * Copyright 2011-2016 Twitter, Inc.
652 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
653 | * ======================================================================== */
654 |
655 |
656 | +function ($) {
657 | 'use strict';
658 |
659 | // MODAL CLASS DEFINITION
660 | // ======================
661 |
662 | var Modal = function (element, options) {
663 | this.options = options
664 | this.$body = $(document.body)
665 | this.$element = $(element)
666 | this.$dialog = this.$element.find('.modal-dialog')
667 | this.$backdrop = null
668 | this.isShown = null
669 | this.originalBodyPad = null
670 | this.scrollbarWidth = 0
671 | this.ignoreBackdropClick = false
672 |
673 | if (this.options.remote) {
674 | this.$element
675 | .find('.modal-content')
676 | .load(this.options.remote, $.proxy(function () {
677 | this.$element.trigger('loaded.bs.modal')
678 | }, this))
679 | }
680 | }
681 |
682 | Modal.VERSION = '3.3.7'
683 |
684 | Modal.TRANSITION_DURATION = 300
685 | Modal.BACKDROP_TRANSITION_DURATION = 150
686 |
687 | Modal.DEFAULTS = {
688 | backdrop: true,
689 | keyboard: true,
690 | show: true
691 | }
692 |
693 | Modal.prototype.toggle = function (_relatedTarget) {
694 | return this.isShown ? this.hide() : this.show(_relatedTarget)
695 | }
696 |
697 | Modal.prototype.show = function (_relatedTarget) {
698 | var that = this
699 | var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
700 |
701 | this.$element.trigger(e)
702 |
703 | if (this.isShown || e.isDefaultPrevented()) return
704 |
705 | this.isShown = true
706 |
707 | this.checkScrollbar()
708 | this.setScrollbar()
709 | this.$body.addClass('modal-open')
710 |
711 | this.escape()
712 | this.resize()
713 |
714 | this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
715 |
716 | this.$dialog.on('mousedown.dismiss.bs.modal', function () {
717 | that.$element.one('mouseup.dismiss.bs.modal', function (e) {
718 | if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
719 | })
720 | })
721 |
722 | this.backdrop(function () {
723 | var transition = $.support.transition && that.$element.hasClass('fade')
724 |
725 | if (!that.$element.parent().length) {
726 | that.$element.appendTo(that.$body) // don't move modals dom position
727 | }
728 |
729 | that.$element
730 | .show()
731 | .scrollTop(0)
732 |
733 | that.adjustDialog()
734 |
735 | if (transition) {
736 | that.$element[0].offsetWidth // force reflow
737 | }
738 |
739 | that.$element.addClass('in')
740 |
741 | that.enforceFocus()
742 |
743 | var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
744 |
745 | transition ?
746 | that.$dialog // wait for modal to slide in
747 | .one('bsTransitionEnd', function () {
748 | that.$element.trigger('focus').trigger(e)
749 | })
750 | .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
751 | that.$element.trigger('focus').trigger(e)
752 | })
753 | }
754 |
755 | Modal.prototype.hide = function (e) {
756 | if (e) e.preventDefault()
757 |
758 | e = $.Event('hide.bs.modal')
759 |
760 | this.$element.trigger(e)
761 |
762 | if (!this.isShown || e.isDefaultPrevented()) return
763 |
764 | this.isShown = false
765 |
766 | this.escape()
767 | this.resize()
768 |
769 | $(document).off('focusin.bs.modal')
770 |
771 | this.$element
772 | .removeClass('in')
773 | .off('click.dismiss.bs.modal')
774 | .off('mouseup.dismiss.bs.modal')
775 |
776 | this.$dialog.off('mousedown.dismiss.bs.modal')
777 |
778 | $.support.transition && this.$element.hasClass('fade') ?
779 | this.$element
780 | .one('bsTransitionEnd', $.proxy(this.hideModal, this))
781 | .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
782 | this.hideModal()
783 | }
784 |
785 | Modal.prototype.enforceFocus = function () {
786 | $(document)
787 | .off('focusin.bs.modal') // guard against infinite focus loop
788 | .on('focusin.bs.modal', $.proxy(function (e) {
789 | if (document !== e.target &&
790 | this.$element[0] !== e.target &&
791 | !this.$element.has(e.target).length) {
792 | this.$element.trigger('focus')
793 | }
794 | }, this))
795 | }
796 |
797 | Modal.prototype.escape = function () {
798 | if (this.isShown && this.options.keyboard) {
799 | this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
800 | e.which == 27 && this.hide()
801 | }, this))
802 | } else if (!this.isShown) {
803 | this.$element.off('keydown.dismiss.bs.modal')
804 | }
805 | }
806 |
807 | Modal.prototype.resize = function () {
808 | if (this.isShown) {
809 | $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
810 | } else {
811 | $(window).off('resize.bs.modal')
812 | }
813 | }
814 |
815 | Modal.prototype.hideModal = function () {
816 | var that = this
817 | this.$element.hide()
818 | this.backdrop(function () {
819 | that.$body.removeClass('modal-open')
820 | that.resetAdjustments()
821 | that.resetScrollbar()
822 | that.$element.trigger('hidden.bs.modal')
823 | })
824 | }
825 |
826 | Modal.prototype.removeBackdrop = function () {
827 | this.$backdrop && this.$backdrop.remove()
828 | this.$backdrop = null
829 | }
830 |
831 | Modal.prototype.backdrop = function (callback) {
832 | var that = this
833 | var animate = this.$element.hasClass('fade') ? 'fade' : ''
834 |
835 | if (this.isShown && this.options.backdrop) {
836 | var doAnimate = $.support.transition && animate
837 |
838 | this.$backdrop = $(document.createElement('div'))
839 | .addClass('modal-backdrop ' + animate)
840 | .appendTo(this.$body)
841 |
842 | this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
843 | if (this.ignoreBackdropClick) {
844 | this.ignoreBackdropClick = false
845 | return
846 | }
847 | if (e.target !== e.currentTarget) return
848 | this.options.backdrop == 'static'
849 | ? this.$element[0].focus()
850 | : this.hide()
851 | }, this))
852 |
853 | if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
854 |
855 | this.$backdrop.addClass('in')
856 |
857 | if (!callback) return
858 |
859 | doAnimate ?
860 | this.$backdrop
861 | .one('bsTransitionEnd', callback)
862 | .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
863 | callback()
864 |
865 | } else if (!this.isShown && this.$backdrop) {
866 | this.$backdrop.removeClass('in')
867 |
868 | var callbackRemove = function () {
869 | that.removeBackdrop()
870 | callback && callback()
871 | }
872 | $.support.transition && this.$element.hasClass('fade') ?
873 | this.$backdrop
874 | .one('bsTransitionEnd', callbackRemove)
875 | .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
876 | callbackRemove()
877 |
878 | } else if (callback) {
879 | callback()
880 | }
881 | }
882 |
883 | // these following methods are used to handle overflowing modals
884 |
885 | Modal.prototype.handleUpdate = function () {
886 | this.adjustDialog()
887 | }
888 |
889 | Modal.prototype.adjustDialog = function () {
890 | var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
891 |
892 | this.$element.css({
893 | paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
894 | paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
895 | })
896 | }
897 |
898 | Modal.prototype.resetAdjustments = function () {
899 | this.$element.css({
900 | paddingLeft: '',
901 | paddingRight: ''
902 | })
903 | }
904 |
905 | Modal.prototype.checkScrollbar = function () {
906 | var fullWindowWidth = window.innerWidth
907 | if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
908 | var documentElementRect = document.documentElement.getBoundingClientRect()
909 | fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
910 | }
911 | this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
912 | this.scrollbarWidth = this.measureScrollbar()
913 | }
914 |
915 | Modal.prototype.setScrollbar = function () {
916 | var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
917 | this.originalBodyPad = document.body.style.paddingRight || ''
918 | if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
919 | }
920 |
921 | Modal.prototype.resetScrollbar = function () {
922 | this.$body.css('padding-right', this.originalBodyPad)
923 | }
924 |
925 | Modal.prototype.measureScrollbar = function () { // thx walsh
926 | var scrollDiv = document.createElement('div')
927 | scrollDiv.className = 'modal-scrollbar-measure'
928 | this.$body.append(scrollDiv)
929 | var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
930 | this.$body[0].removeChild(scrollDiv)
931 | return scrollbarWidth
932 | }
933 |
934 |
935 | // MODAL PLUGIN DEFINITION
936 | // =======================
937 |
938 | function Plugin(option, _relatedTarget) {
939 | return this.each(function () {
940 | var $this = $(this)
941 | var data = $this.data('bs.modal')
942 | var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
943 |
944 | if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
945 | if (typeof option == 'string') data[option](_relatedTarget)
946 | else if (options.show) data.show(_relatedTarget)
947 | })
948 | }
949 |
950 | var old = $.fn.modal
951 |
952 | $.fn.modal = Plugin
953 | $.fn.modal.Constructor = Modal
954 |
955 |
956 | // MODAL NO CONFLICT
957 | // =================
958 |
959 | $.fn.modal.noConflict = function () {
960 | $.fn.modal = old
961 | return this
962 | }
963 |
964 |
965 | // MODAL DATA-API
966 | // ==============
967 |
968 | $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
969 | var $this = $(this)
970 | var href = $this.attr('href')
971 | var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
972 | var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
973 |
974 | if ($this.is('a')) e.preventDefault()
975 |
976 | $target.one('show.bs.modal', function (showEvent) {
977 | if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
978 | $target.one('hidden.bs.modal', function () {
979 | $this.is(':visible') && $this.trigger('focus')
980 | })
981 | })
982 | Plugin.call($target, option, this)
983 | })
984 |
985 | }(jQuery);
986 |
987 | /* ========================================================================
988 | * Bootstrap: tooltip.js v3.3.7
989 | * http://getbootstrap.com/javascript/#tooltip
990 | * Inspired by the original jQuery.tipsy by Jason Frame
991 | * ========================================================================
992 | * Copyright 2011-2016 Twitter, Inc.
993 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
994 | * ======================================================================== */
995 |
996 |
997 | +function ($) {
998 | 'use strict';
999 |
1000 | // TOOLTIP PUBLIC CLASS DEFINITION
1001 | // ===============================
1002 |
1003 | var Tooltip = function (element, options) {
1004 | this.type = null
1005 | this.options = null
1006 | this.enabled = null
1007 | this.timeout = null
1008 | this.hoverState = null
1009 | this.$element = null
1010 | this.inState = null
1011 |
1012 | this.init('tooltip', element, options)
1013 | }
1014 |
1015 | Tooltip.VERSION = '3.3.7'
1016 |
1017 | Tooltip.TRANSITION_DURATION = 150
1018 |
1019 | Tooltip.DEFAULTS = {
1020 | animation: true,
1021 | placement: 'top',
1022 | selector: false,
1023 | template: '
',
1024 | trigger: 'hover focus',
1025 | title: '',
1026 | delay: 0,
1027 | html: false,
1028 | container: false,
1029 | viewport: {
1030 | selector: 'body',
1031 | padding: 0
1032 | }
1033 | }
1034 |
1035 | Tooltip.prototype.init = function (type, element, options) {
1036 | this.enabled = true
1037 | this.type = type
1038 | this.$element = $(element)
1039 | this.options = this.getOptions(options)
1040 | this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
1041 | this.inState = { click: false, hover: false, focus: false }
1042 |
1043 | if (this.$element[0] instanceof document.constructor && !this.options.selector) {
1044 | throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
1045 | }
1046 |
1047 | var triggers = this.options.trigger.split(' ')
1048 |
1049 | for (var i = triggers.length; i--;) {
1050 | var trigger = triggers[i]
1051 |
1052 | if (trigger == 'click') {
1053 | this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1054 | } else if (trigger != 'manual') {
1055 | var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
1056 | var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
1057 |
1058 | this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1059 | this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1060 | }
1061 | }
1062 |
1063 | this.options.selector ?
1064 | (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1065 | this.fixTitle()
1066 | }
1067 |
1068 | Tooltip.prototype.getDefaults = function () {
1069 | return Tooltip.DEFAULTS
1070 | }
1071 |
1072 | Tooltip.prototype.getOptions = function (options) {
1073 | options = $.extend({}, this.getDefaults(), this.$element.data(), options)
1074 |
1075 | if (options.delay && typeof options.delay == 'number') {
1076 | options.delay = {
1077 | show: options.delay,
1078 | hide: options.delay
1079 | }
1080 | }
1081 |
1082 | return options
1083 | }
1084 |
1085 | Tooltip.prototype.getDelegateOptions = function () {
1086 | var options = {}
1087 | var defaults = this.getDefaults()
1088 |
1089 | this._options && $.each(this._options, function (key, value) {
1090 | if (defaults[key] != value) options[key] = value
1091 | })
1092 |
1093 | return options
1094 | }
1095 |
1096 | Tooltip.prototype.enter = function (obj) {
1097 | var self = obj instanceof this.constructor ?
1098 | obj : $(obj.currentTarget).data('bs.' + this.type)
1099 |
1100 | if (!self) {
1101 | self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1102 | $(obj.currentTarget).data('bs.' + this.type, self)
1103 | }
1104 |
1105 | if (obj instanceof $.Event) {
1106 | self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
1107 | }
1108 |
1109 | if (self.tip().hasClass('in') || self.hoverState == 'in') {
1110 | self.hoverState = 'in'
1111 | return
1112 | }
1113 |
1114 | clearTimeout(self.timeout)
1115 |
1116 | self.hoverState = 'in'
1117 |
1118 | if (!self.options.delay || !self.options.delay.show) return self.show()
1119 |
1120 | self.timeout = setTimeout(function () {
1121 | if (self.hoverState == 'in') self.show()
1122 | }, self.options.delay.show)
1123 | }
1124 |
1125 | Tooltip.prototype.isInStateTrue = function () {
1126 | for (var key in this.inState) {
1127 | if (this.inState[key]) return true
1128 | }
1129 |
1130 | return false
1131 | }
1132 |
1133 | Tooltip.prototype.leave = function (obj) {
1134 | var self = obj instanceof this.constructor ?
1135 | obj : $(obj.currentTarget).data('bs.' + this.type)
1136 |
1137 | if (!self) {
1138 | self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1139 | $(obj.currentTarget).data('bs.' + this.type, self)
1140 | }
1141 |
1142 | if (obj instanceof $.Event) {
1143 | self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
1144 | }
1145 |
1146 | if (self.isInStateTrue()) return
1147 |
1148 | clearTimeout(self.timeout)
1149 |
1150 | self.hoverState = 'out'
1151 |
1152 | if (!self.options.delay || !self.options.delay.hide) return self.hide()
1153 |
1154 | self.timeout = setTimeout(function () {
1155 | if (self.hoverState == 'out') self.hide()
1156 | }, self.options.delay.hide)
1157 | }
1158 |
1159 | Tooltip.prototype.show = function () {
1160 | var e = $.Event('show.bs.' + this.type)
1161 |
1162 | if (this.hasContent() && this.enabled) {
1163 | this.$element.trigger(e)
1164 |
1165 | var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
1166 | if (e.isDefaultPrevented() || !inDom) return
1167 | var that = this
1168 |
1169 | var $tip = this.tip()
1170 |
1171 | var tipId = this.getUID(this.type)
1172 |
1173 | this.setContent()
1174 | $tip.attr('id', tipId)
1175 | this.$element.attr('aria-describedby', tipId)
1176 |
1177 | if (this.options.animation) $tip.addClass('fade')
1178 |
1179 | var placement = typeof this.options.placement == 'function' ?
1180 | this.options.placement.call(this, $tip[0], this.$element[0]) :
1181 | this.options.placement
1182 |
1183 | var autoToken = /\s?auto?\s?/i
1184 | var autoPlace = autoToken.test(placement)
1185 | if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
1186 |
1187 | $tip
1188 | .detach()
1189 | .css({ top: 0, left: 0, display: 'block' })
1190 | .addClass(placement)
1191 | .data('bs.' + this.type, this)
1192 |
1193 | this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1194 | this.$element.trigger('inserted.bs.' + this.type)
1195 |
1196 | var pos = this.getPosition()
1197 | var actualWidth = $tip[0].offsetWidth
1198 | var actualHeight = $tip[0].offsetHeight
1199 |
1200 | if (autoPlace) {
1201 | var orgPlacement = placement
1202 | var viewportDim = this.getPosition(this.$viewport)
1203 |
1204 | placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
1205 | placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
1206 | placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
1207 | placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
1208 | placement
1209 |
1210 | $tip
1211 | .removeClass(orgPlacement)
1212 | .addClass(placement)
1213 | }
1214 |
1215 | var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
1216 |
1217 | this.applyPlacement(calculatedOffset, placement)
1218 |
1219 | var complete = function () {
1220 | var prevHoverState = that.hoverState
1221 | that.$element.trigger('shown.bs.' + that.type)
1222 | that.hoverState = null
1223 |
1224 | if (prevHoverState == 'out') that.leave(that)
1225 | }
1226 |
1227 | $.support.transition && this.$tip.hasClass('fade') ?
1228 | $tip
1229 | .one('bsTransitionEnd', complete)
1230 | .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
1231 | complete()
1232 | }
1233 | }
1234 |
1235 | Tooltip.prototype.applyPlacement = function (offset, placement) {
1236 | var $tip = this.tip()
1237 | var width = $tip[0].offsetWidth
1238 | var height = $tip[0].offsetHeight
1239 |
1240 | // manually read margins because getBoundingClientRect includes difference
1241 | var marginTop = parseInt($tip.css('margin-top'), 10)
1242 | var marginLeft = parseInt($tip.css('margin-left'), 10)
1243 |
1244 | // we must check for NaN for ie 8/9
1245 | if (isNaN(marginTop)) marginTop = 0
1246 | if (isNaN(marginLeft)) marginLeft = 0
1247 |
1248 | offset.top += marginTop
1249 | offset.left += marginLeft
1250 |
1251 | // $.fn.offset doesn't round pixel values
1252 | // so we use setOffset directly with our own function B-0
1253 | $.offset.setOffset($tip[0], $.extend({
1254 | using: function (props) {
1255 | $tip.css({
1256 | top: Math.round(props.top),
1257 | left: Math.round(props.left)
1258 | })
1259 | }
1260 | }, offset), 0)
1261 |
1262 | $tip.addClass('in')
1263 |
1264 | // check to see if placing tip in new offset caused the tip to resize itself
1265 | var actualWidth = $tip[0].offsetWidth
1266 | var actualHeight = $tip[0].offsetHeight
1267 |
1268 | if (placement == 'top' && actualHeight != height) {
1269 | offset.top = offset.top + height - actualHeight
1270 | }
1271 |
1272 | var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
1273 |
1274 | if (delta.left) offset.left += delta.left
1275 | else offset.top += delta.top
1276 |
1277 | var isVertical = /top|bottom/.test(placement)
1278 | var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
1279 | var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
1280 |
1281 | $tip.offset(offset)
1282 | this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
1283 | }
1284 |
1285 | Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
1286 | this.arrow()
1287 | .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
1288 | .css(isVertical ? 'top' : 'left', '')
1289 | }
1290 |
1291 | Tooltip.prototype.setContent = function () {
1292 | var $tip = this.tip()
1293 | var title = this.getTitle()
1294 |
1295 | $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1296 | $tip.removeClass('fade in top bottom left right')
1297 | }
1298 |
1299 | Tooltip.prototype.hide = function (callback) {
1300 | var that = this
1301 | var $tip = $(this.$tip)
1302 | var e = $.Event('hide.bs.' + this.type)
1303 |
1304 | function complete() {
1305 | if (that.hoverState != 'in') $tip.detach()
1306 | if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
1307 | that.$element
1308 | .removeAttr('aria-describedby')
1309 | .trigger('hidden.bs.' + that.type)
1310 | }
1311 | callback && callback()
1312 | }
1313 |
1314 | this.$element.trigger(e)
1315 |
1316 | if (e.isDefaultPrevented()) return
1317 |
1318 | $tip.removeClass('in')
1319 |
1320 | $.support.transition && $tip.hasClass('fade') ?
1321 | $tip
1322 | .one('bsTransitionEnd', complete)
1323 | .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
1324 | complete()
1325 |
1326 | this.hoverState = null
1327 |
1328 | return this
1329 | }
1330 |
1331 | Tooltip.prototype.fixTitle = function () {
1332 | var $e = this.$element
1333 | if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
1334 | $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1335 | }
1336 | }
1337 |
1338 | Tooltip.prototype.hasContent = function () {
1339 | return this.getTitle()
1340 | }
1341 |
1342 | Tooltip.prototype.getPosition = function ($element) {
1343 | $element = $element || this.$element
1344 |
1345 | var el = $element[0]
1346 | var isBody = el.tagName == 'BODY'
1347 |
1348 | var elRect = el.getBoundingClientRect()
1349 | if (elRect.width == null) {
1350 | // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
1351 | elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
1352 | }
1353 | var isSvg = window.SVGElement && el instanceof window.SVGElement
1354 | // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
1355 | // See https://github.com/twbs/bootstrap/issues/20280
1356 | var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
1357 | var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
1358 | var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
1359 |
1360 | return $.extend({}, elRect, scroll, outerDims, elOffset)
1361 | }
1362 |
1363 | Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
1364 | return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1365 | placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1366 | placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
1367 | /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
1368 |
1369 | }
1370 |
1371 | Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
1372 | var delta = { top: 0, left: 0 }
1373 | if (!this.$viewport) return delta
1374 |
1375 | var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
1376 | var viewportDimensions = this.getPosition(this.$viewport)
1377 |
1378 | if (/right|left/.test(placement)) {
1379 | var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
1380 | var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
1381 | if (topEdgeOffset < viewportDimensions.top) { // top overflow
1382 | delta.top = viewportDimensions.top - topEdgeOffset
1383 | } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
1384 | delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
1385 | }
1386 | } else {
1387 | var leftEdgeOffset = pos.left - viewportPadding
1388 | var rightEdgeOffset = pos.left + viewportPadding + actualWidth
1389 | if (leftEdgeOffset < viewportDimensions.left) { // left overflow
1390 | delta.left = viewportDimensions.left - leftEdgeOffset
1391 | } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
1392 | delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
1393 | }
1394 | }
1395 |
1396 | return delta
1397 | }
1398 |
1399 | Tooltip.prototype.getTitle = function () {
1400 | var title
1401 | var $e = this.$element
1402 | var o = this.options
1403 |
1404 | title = $e.attr('data-original-title')
1405 | || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1406 |
1407 | return title
1408 | }
1409 |
1410 | Tooltip.prototype.getUID = function (prefix) {
1411 | do prefix += ~~(Math.random() * 1000000)
1412 | while (document.getElementById(prefix))
1413 | return prefix
1414 | }
1415 |
1416 | Tooltip.prototype.tip = function () {
1417 | if (!this.$tip) {
1418 | this.$tip = $(this.options.template)
1419 | if (this.$tip.length != 1) {
1420 | throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
1421 | }
1422 | }
1423 | return this.$tip
1424 | }
1425 |
1426 | Tooltip.prototype.arrow = function () {
1427 | return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
1428 | }
1429 |
1430 | Tooltip.prototype.enable = function () {
1431 | this.enabled = true
1432 | }
1433 |
1434 | Tooltip.prototype.disable = function () {
1435 | this.enabled = false
1436 | }
1437 |
1438 | Tooltip.prototype.toggleEnabled = function () {
1439 | this.enabled = !this.enabled
1440 | }
1441 |
1442 | Tooltip.prototype.toggle = function (e) {
1443 | var self = this
1444 | if (e) {
1445 | self = $(e.currentTarget).data('bs.' + this.type)
1446 | if (!self) {
1447 | self = new this.constructor(e.currentTarget, this.getDelegateOptions())
1448 | $(e.currentTarget).data('bs.' + this.type, self)
1449 | }
1450 | }
1451 |
1452 | if (e) {
1453 | self.inState.click = !self.inState.click
1454 | if (self.isInStateTrue()) self.enter(self)
1455 | else self.leave(self)
1456 | } else {
1457 | self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
1458 | }
1459 | }
1460 |
1461 | Tooltip.prototype.destroy = function () {
1462 | var that = this
1463 | clearTimeout(this.timeout)
1464 | this.hide(function () {
1465 | that.$element.off('.' + that.type).removeData('bs.' + that.type)
1466 | if (that.$tip) {
1467 | that.$tip.detach()
1468 | }
1469 | that.$tip = null
1470 | that.$arrow = null
1471 | that.$viewport = null
1472 | that.$element = null
1473 | })
1474 | }
1475 |
1476 |
1477 | // TOOLTIP PLUGIN DEFINITION
1478 | // =========================
1479 |
1480 | function Plugin(option) {
1481 | return this.each(function () {
1482 | var $this = $(this)
1483 | var data = $this.data('bs.tooltip')
1484 | var options = typeof option == 'object' && option
1485 |
1486 | if (!data && /destroy|hide/.test(option)) return
1487 | if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
1488 | if (typeof option == 'string') data[option]()
1489 | })
1490 | }
1491 |
1492 | var old = $.fn.tooltip
1493 |
1494 | $.fn.tooltip = Plugin
1495 | $.fn.tooltip.Constructor = Tooltip
1496 |
1497 |
1498 | // TOOLTIP NO CONFLICT
1499 | // ===================
1500 |
1501 | $.fn.tooltip.noConflict = function () {
1502 | $.fn.tooltip = old
1503 | return this
1504 | }
1505 |
1506 | }(jQuery);
1507 |
1508 | /* ========================================================================
1509 | * Bootstrap: popover.js v3.3.7
1510 | * http://getbootstrap.com/javascript/#popovers
1511 | * ========================================================================
1512 | * Copyright 2011-2016 Twitter, Inc.
1513 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1514 | * ======================================================================== */
1515 |
1516 |
1517 | +function ($) {
1518 | 'use strict';
1519 |
1520 | // POPOVER PUBLIC CLASS DEFINITION
1521 | // ===============================
1522 |
1523 | var Popover = function (element, options) {
1524 | this.init('popover', element, options)
1525 | }
1526 |
1527 | if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1528 |
1529 | Popover.VERSION = '3.3.7'
1530 |
1531 | Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
1532 | placement: 'right',
1533 | trigger: 'click',
1534 | content: '',
1535 | template: ''
1536 | })
1537 |
1538 |
1539 | // NOTE: POPOVER EXTENDS tooltip.js
1540 | // ================================
1541 |
1542 | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
1543 |
1544 | Popover.prototype.constructor = Popover
1545 |
1546 | Popover.prototype.getDefaults = function () {
1547 | return Popover.DEFAULTS
1548 | }
1549 |
1550 | Popover.prototype.setContent = function () {
1551 | var $tip = this.tip()
1552 | var title = this.getTitle()
1553 | var content = this.getContent()
1554 |
1555 | $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1556 | $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
1557 | this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
1558 | ](content)
1559 |
1560 | $tip.removeClass('fade top bottom left right in')
1561 |
1562 | // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
1563 | // this manually by checking the contents.
1564 | if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
1565 | }
1566 |
1567 | Popover.prototype.hasContent = function () {
1568 | return this.getTitle() || this.getContent()
1569 | }
1570 |
1571 | Popover.prototype.getContent = function () {
1572 | var $e = this.$element
1573 | var o = this.options
1574 |
1575 | return $e.attr('data-content')
1576 | || (typeof o.content == 'function' ?
1577 | o.content.call($e[0]) :
1578 | o.content)
1579 | }
1580 |
1581 | Popover.prototype.arrow = function () {
1582 | return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
1583 | }
1584 |
1585 |
1586 | // POPOVER PLUGIN DEFINITION
1587 | // =========================
1588 |
1589 | function Plugin(option) {
1590 | return this.each(function () {
1591 | var $this = $(this)
1592 | var data = $this.data('bs.popover')
1593 | var options = typeof option == 'object' && option
1594 |
1595 | if (!data && /destroy|hide/.test(option)) return
1596 | if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
1597 | if (typeof option == 'string') data[option]()
1598 | })
1599 | }
1600 |
1601 | var old = $.fn.popover
1602 |
1603 | $.fn.popover = Plugin
1604 | $.fn.popover.Constructor = Popover
1605 |
1606 |
1607 | // POPOVER NO CONFLICT
1608 | // ===================
1609 |
1610 | $.fn.popover.noConflict = function () {
1611 | $.fn.popover = old
1612 | return this
1613 | }
1614 |
1615 | }(jQuery);
1616 |
1617 | /* ========================================================================
1618 | * Bootstrap: tab.js v3.3.7
1619 | * http://getbootstrap.com/javascript/#tabs
1620 | * ========================================================================
1621 | * Copyright 2011-2016 Twitter, Inc.
1622 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1623 | * ======================================================================== */
1624 |
1625 |
1626 | +function ($) {
1627 | 'use strict';
1628 |
1629 | // TAB CLASS DEFINITION
1630 | // ====================
1631 |
1632 | var Tab = function (element) {
1633 | // jscs:disable requireDollarBeforejQueryAssignment
1634 | this.element = $(element)
1635 | // jscs:enable requireDollarBeforejQueryAssignment
1636 | }
1637 |
1638 | Tab.VERSION = '3.3.7'
1639 |
1640 | Tab.TRANSITION_DURATION = 150
1641 |
1642 | Tab.prototype.show = function () {
1643 | var $this = this.element
1644 | var $ul = $this.closest('ul:not(.dropdown-menu)')
1645 | var selector = $this.data('target')
1646 |
1647 | if (!selector) {
1648 | selector = $this.attr('href')
1649 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
1650 | }
1651 |
1652 | if ($this.parent('li').hasClass('active')) return
1653 |
1654 | var $previous = $ul.find('.active:last a')
1655 | var hideEvent = $.Event('hide.bs.tab', {
1656 | relatedTarget: $this[0]
1657 | })
1658 | var showEvent = $.Event('show.bs.tab', {
1659 | relatedTarget: $previous[0]
1660 | })
1661 |
1662 | $previous.trigger(hideEvent)
1663 | $this.trigger(showEvent)
1664 |
1665 | if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
1666 |
1667 | var $target = $(selector)
1668 |
1669 | this.activate($this.closest('li'), $ul)
1670 | this.activate($target, $target.parent(), function () {
1671 | $previous.trigger({
1672 | type: 'hidden.bs.tab',
1673 | relatedTarget: $this[0]
1674 | })
1675 | $this.trigger({
1676 | type: 'shown.bs.tab',
1677 | relatedTarget: $previous[0]
1678 | })
1679 | })
1680 | }
1681 |
1682 | Tab.prototype.activate = function (element, container, callback) {
1683 | var $active = container.find('> .active')
1684 | var transition = callback
1685 | && $.support.transition
1686 | && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
1687 |
1688 | function next() {
1689 | $active
1690 | .removeClass('active')
1691 | .find('> .dropdown-menu > .active')
1692 | .removeClass('active')
1693 | .end()
1694 | .find('[data-toggle="tab"]')
1695 | .attr('aria-expanded', false)
1696 |
1697 | element
1698 | .addClass('active')
1699 | .find('[data-toggle="tab"]')
1700 | .attr('aria-expanded', true)
1701 |
1702 | if (transition) {
1703 | element[0].offsetWidth // reflow for transition
1704 | element.addClass('in')
1705 | } else {
1706 | element.removeClass('fade')
1707 | }
1708 |
1709 | if (element.parent('.dropdown-menu').length) {
1710 | element
1711 | .closest('li.dropdown')
1712 | .addClass('active')
1713 | .end()
1714 | .find('[data-toggle="tab"]')
1715 | .attr('aria-expanded', true)
1716 | }
1717 |
1718 | callback && callback()
1719 | }
1720 |
1721 | $active.length && transition ?
1722 | $active
1723 | .one('bsTransitionEnd', next)
1724 | .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
1725 | next()
1726 |
1727 | $active.removeClass('in')
1728 | }
1729 |
1730 |
1731 | // TAB PLUGIN DEFINITION
1732 | // =====================
1733 |
1734 | function Plugin(option) {
1735 | return this.each(function () {
1736 | var $this = $(this)
1737 | var data = $this.data('bs.tab')
1738 |
1739 | if (!data) $this.data('bs.tab', (data = new Tab(this)))
1740 | if (typeof option == 'string') data[option]()
1741 | })
1742 | }
1743 |
1744 | var old = $.fn.tab
1745 |
1746 | $.fn.tab = Plugin
1747 | $.fn.tab.Constructor = Tab
1748 |
1749 |
1750 | // TAB NO CONFLICT
1751 | // ===============
1752 |
1753 | $.fn.tab.noConflict = function () {
1754 | $.fn.tab = old
1755 | return this
1756 | }
1757 |
1758 |
1759 | // TAB DATA-API
1760 | // ============
1761 |
1762 | var clickHandler = function (e) {
1763 | e.preventDefault()
1764 | Plugin.call($(this), 'show')
1765 | }
1766 |
1767 | $(document)
1768 | .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
1769 | .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
1770 |
1771 | }(jQuery);
1772 |
1773 | /* ========================================================================
1774 | * Bootstrap: affix.js v3.3.7
1775 | * http://getbootstrap.com/javascript/#affix
1776 | * ========================================================================
1777 | * Copyright 2011-2016 Twitter, Inc.
1778 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1779 | * ======================================================================== */
1780 |
1781 |
1782 | +function ($) {
1783 | 'use strict';
1784 |
1785 | // AFFIX CLASS DEFINITION
1786 | // ======================
1787 |
1788 | var Affix = function (element, options) {
1789 | this.options = $.extend({}, Affix.DEFAULTS, options)
1790 |
1791 | this.$target = $(this.options.target)
1792 | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
1793 | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
1794 |
1795 | this.$element = $(element)
1796 | this.affixed = null
1797 | this.unpin = null
1798 | this.pinnedOffset = null
1799 |
1800 | this.checkPosition()
1801 | }
1802 |
1803 | Affix.VERSION = '3.3.7'
1804 |
1805 | Affix.RESET = 'affix affix-top affix-bottom'
1806 |
1807 | Affix.DEFAULTS = {
1808 | offset: 0,
1809 | target: window
1810 | }
1811 |
1812 | Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
1813 | var scrollTop = this.$target.scrollTop()
1814 | var position = this.$element.offset()
1815 | var targetHeight = this.$target.height()
1816 |
1817 | if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
1818 |
1819 | if (this.affixed == 'bottom') {
1820 | if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
1821 | return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
1822 | }
1823 |
1824 | var initializing = this.affixed == null
1825 | var colliderTop = initializing ? scrollTop : position.top
1826 | var colliderHeight = initializing ? targetHeight : height
1827 |
1828 | if (offsetTop != null && scrollTop <= offsetTop) return 'top'
1829 | if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
1830 |
1831 | return false
1832 | }
1833 |
1834 | Affix.prototype.getPinnedOffset = function () {
1835 | if (this.pinnedOffset) return this.pinnedOffset
1836 | this.$element.removeClass(Affix.RESET).addClass('affix')
1837 | var scrollTop = this.$target.scrollTop()
1838 | var position = this.$element.offset()
1839 | return (this.pinnedOffset = position.top - scrollTop)
1840 | }
1841 |
1842 | Affix.prototype.checkPositionWithEventLoop = function () {
1843 | setTimeout($.proxy(this.checkPosition, this), 1)
1844 | }
1845 |
1846 | Affix.prototype.checkPosition = function () {
1847 | if (!this.$element.is(':visible')) return
1848 |
1849 | var height = this.$element.height()
1850 | var offset = this.options.offset
1851 | var offsetTop = offset.top
1852 | var offsetBottom = offset.bottom
1853 | var scrollHeight = Math.max($(document).height(), $(document.body).height())
1854 |
1855 | if (typeof offset != 'object') offsetBottom = offsetTop = offset
1856 | if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
1857 | if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
1858 |
1859 | var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
1860 |
1861 | if (this.affixed != affix) {
1862 | if (this.unpin != null) this.$element.css('top', '')
1863 |
1864 | var affixType = 'affix' + (affix ? '-' + affix : '')
1865 | var e = $.Event(affixType + '.bs.affix')
1866 |
1867 | this.$element.trigger(e)
1868 |
1869 | if (e.isDefaultPrevented()) return
1870 |
1871 | this.affixed = affix
1872 | this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
1873 |
1874 | this.$element
1875 | .removeClass(Affix.RESET)
1876 | .addClass(affixType)
1877 | .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
1878 | }
1879 |
1880 | if (affix == 'bottom') {
1881 | this.$element.offset({
1882 | top: scrollHeight - height - offsetBottom
1883 | })
1884 | }
1885 | }
1886 |
1887 |
1888 | // AFFIX PLUGIN DEFINITION
1889 | // =======================
1890 |
1891 | function Plugin(option) {
1892 | return this.each(function () {
1893 | var $this = $(this)
1894 | var data = $this.data('bs.affix')
1895 | var options = typeof option == 'object' && option
1896 |
1897 | if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
1898 | if (typeof option == 'string') data[option]()
1899 | })
1900 | }
1901 |
1902 | var old = $.fn.affix
1903 |
1904 | $.fn.affix = Plugin
1905 | $.fn.affix.Constructor = Affix
1906 |
1907 |
1908 | // AFFIX NO CONFLICT
1909 | // =================
1910 |
1911 | $.fn.affix.noConflict = function () {
1912 | $.fn.affix = old
1913 | return this
1914 | }
1915 |
1916 |
1917 | // AFFIX DATA-API
1918 | // ==============
1919 |
1920 | $(window).on('load', function () {
1921 | $('[data-spy="affix"]').each(function () {
1922 | var $spy = $(this)
1923 | var data = $spy.data()
1924 |
1925 | data.offset = data.offset || {}
1926 |
1927 | if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
1928 | if (data.offsetTop != null) data.offset.top = data.offsetTop
1929 |
1930 | Plugin.call($spy, data)
1931 | })
1932 | })
1933 |
1934 | }(jQuery);
1935 |
1936 | /* ========================================================================
1937 | * Bootstrap: collapse.js v3.3.7
1938 | * http://getbootstrap.com/javascript/#collapse
1939 | * ========================================================================
1940 | * Copyright 2011-2016 Twitter, Inc.
1941 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1942 | * ======================================================================== */
1943 |
1944 | /* jshint latedef: false */
1945 |
1946 | +function ($) {
1947 | 'use strict';
1948 |
1949 | // COLLAPSE PUBLIC CLASS DEFINITION
1950 | // ================================
1951 |
1952 | var Collapse = function (element, options) {
1953 | this.$element = $(element)
1954 | this.options = $.extend({}, Collapse.DEFAULTS, options)
1955 | this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
1956 | '[data-toggle="collapse"][data-target="#' + element.id + '"]')
1957 | this.transitioning = null
1958 |
1959 | if (this.options.parent) {
1960 | this.$parent = this.getParent()
1961 | } else {
1962 | this.addAriaAndCollapsedClass(this.$element, this.$trigger)
1963 | }
1964 |
1965 | if (this.options.toggle) this.toggle()
1966 | }
1967 |
1968 | Collapse.VERSION = '3.3.7'
1969 |
1970 | Collapse.TRANSITION_DURATION = 350
1971 |
1972 | Collapse.DEFAULTS = {
1973 | toggle: true
1974 | }
1975 |
1976 | Collapse.prototype.dimension = function () {
1977 | var hasWidth = this.$element.hasClass('width')
1978 | return hasWidth ? 'width' : 'height'
1979 | }
1980 |
1981 | Collapse.prototype.show = function () {
1982 | if (this.transitioning || this.$element.hasClass('in')) return
1983 |
1984 | var activesData
1985 | var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
1986 |
1987 | if (actives && actives.length) {
1988 | activesData = actives.data('bs.collapse')
1989 | if (activesData && activesData.transitioning) return
1990 | }
1991 |
1992 | var startEvent = $.Event('show.bs.collapse')
1993 | this.$element.trigger(startEvent)
1994 | if (startEvent.isDefaultPrevented()) return
1995 |
1996 | if (actives && actives.length) {
1997 | Plugin.call(actives, 'hide')
1998 | activesData || actives.data('bs.collapse', null)
1999 | }
2000 |
2001 | var dimension = this.dimension()
2002 |
2003 | this.$element
2004 | .removeClass('collapse')
2005 | .addClass('collapsing')[dimension](0)
2006 | .attr('aria-expanded', true)
2007 |
2008 | this.$trigger
2009 | .removeClass('collapsed')
2010 | .attr('aria-expanded', true)
2011 |
2012 | this.transitioning = 1
2013 |
2014 | var complete = function () {
2015 | this.$element
2016 | .removeClass('collapsing')
2017 | .addClass('collapse in')[dimension]('')
2018 | this.transitioning = 0
2019 | this.$element
2020 | .trigger('shown.bs.collapse')
2021 | }
2022 |
2023 | if (!$.support.transition) return complete.call(this)
2024 |
2025 | var scrollSize = $.camelCase(['scroll', dimension].join('-'))
2026 |
2027 | this.$element
2028 | .one('bsTransitionEnd', $.proxy(complete, this))
2029 | .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
2030 | }
2031 |
2032 | Collapse.prototype.hide = function () {
2033 | if (this.transitioning || !this.$element.hasClass('in')) return
2034 |
2035 | var startEvent = $.Event('hide.bs.collapse')
2036 | this.$element.trigger(startEvent)
2037 | if (startEvent.isDefaultPrevented()) return
2038 |
2039 | var dimension = this.dimension()
2040 |
2041 | this.$element[dimension](this.$element[dimension]())[0].offsetHeight
2042 |
2043 | this.$element
2044 | .addClass('collapsing')
2045 | .removeClass('collapse in')
2046 | .attr('aria-expanded', false)
2047 |
2048 | this.$trigger
2049 | .addClass('collapsed')
2050 | .attr('aria-expanded', false)
2051 |
2052 | this.transitioning = 1
2053 |
2054 | var complete = function () {
2055 | this.transitioning = 0
2056 | this.$element
2057 | .removeClass('collapsing')
2058 | .addClass('collapse')
2059 | .trigger('hidden.bs.collapse')
2060 | }
2061 |
2062 | if (!$.support.transition) return complete.call(this)
2063 |
2064 | this.$element
2065 | [dimension](0)
2066 | .one('bsTransitionEnd', $.proxy(complete, this))
2067 | .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
2068 | }
2069 |
2070 | Collapse.prototype.toggle = function () {
2071 | this[this.$element.hasClass('in') ? 'hide' : 'show']()
2072 | }
2073 |
2074 | Collapse.prototype.getParent = function () {
2075 | return $(this.options.parent)
2076 | .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
2077 | .each($.proxy(function (i, element) {
2078 | var $element = $(element)
2079 | this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
2080 | }, this))
2081 | .end()
2082 | }
2083 |
2084 | Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
2085 | var isOpen = $element.hasClass('in')
2086 |
2087 | $element.attr('aria-expanded', isOpen)
2088 | $trigger
2089 | .toggleClass('collapsed', !isOpen)
2090 | .attr('aria-expanded', isOpen)
2091 | }
2092 |
2093 | function getTargetFromTrigger($trigger) {
2094 | var href
2095 | var target = $trigger.attr('data-target')
2096 | || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
2097 |
2098 | return $(target)
2099 | }
2100 |
2101 |
2102 | // COLLAPSE PLUGIN DEFINITION
2103 | // ==========================
2104 |
2105 | function Plugin(option) {
2106 | return this.each(function () {
2107 | var $this = $(this)
2108 | var data = $this.data('bs.collapse')
2109 | var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
2110 |
2111 | if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
2112 | if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
2113 | if (typeof option == 'string') data[option]()
2114 | })
2115 | }
2116 |
2117 | var old = $.fn.collapse
2118 |
2119 | $.fn.collapse = Plugin
2120 | $.fn.collapse.Constructor = Collapse
2121 |
2122 |
2123 | // COLLAPSE NO CONFLICT
2124 | // ====================
2125 |
2126 | $.fn.collapse.noConflict = function () {
2127 | $.fn.collapse = old
2128 | return this
2129 | }
2130 |
2131 |
2132 | // COLLAPSE DATA-API
2133 | // =================
2134 |
2135 | $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
2136 | var $this = $(this)
2137 |
2138 | if (!$this.attr('data-target')) e.preventDefault()
2139 |
2140 | var $target = getTargetFromTrigger($this)
2141 | var data = $target.data('bs.collapse')
2142 | var option = data ? 'toggle' : $this.data()
2143 |
2144 | Plugin.call($target, option)
2145 | })
2146 |
2147 | }(jQuery);
2148 |
2149 | /* ========================================================================
2150 | * Bootstrap: scrollspy.js v3.3.7
2151 | * http://getbootstrap.com/javascript/#scrollspy
2152 | * ========================================================================
2153 | * Copyright 2011-2016 Twitter, Inc.
2154 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2155 | * ======================================================================== */
2156 |
2157 |
2158 | +function ($) {
2159 | 'use strict';
2160 |
2161 | // SCROLLSPY CLASS DEFINITION
2162 | // ==========================
2163 |
2164 | function ScrollSpy(element, options) {
2165 | this.$body = $(document.body)
2166 | this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
2167 | this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
2168 | this.selector = (this.options.target || '') + ' .nav li > a'
2169 | this.offsets = []
2170 | this.targets = []
2171 | this.activeTarget = null
2172 | this.scrollHeight = 0
2173 |
2174 | this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
2175 | this.refresh()
2176 | this.process()
2177 | }
2178 |
2179 | ScrollSpy.VERSION = '3.3.7'
2180 |
2181 | ScrollSpy.DEFAULTS = {
2182 | offset: 10
2183 | }
2184 |
2185 | ScrollSpy.prototype.getScrollHeight = function () {
2186 | return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
2187 | }
2188 |
2189 | ScrollSpy.prototype.refresh = function () {
2190 | var that = this
2191 | var offsetMethod = 'offset'
2192 | var offsetBase = 0
2193 |
2194 | this.offsets = []
2195 | this.targets = []
2196 | this.scrollHeight = this.getScrollHeight()
2197 |
2198 | if (!$.isWindow(this.$scrollElement[0])) {
2199 | offsetMethod = 'position'
2200 | offsetBase = this.$scrollElement.scrollTop()
2201 | }
2202 |
2203 | this.$body
2204 | .find(this.selector)
2205 | .map(function () {
2206 | var $el = $(this)
2207 | var href = $el.data('target') || $el.attr('href')
2208 | var $href = /^#./.test(href) && $(href)
2209 |
2210 | return ($href
2211 | && $href.length
2212 | && $href.is(':visible')
2213 | && [[$href[offsetMethod]().top + offsetBase, href]]) || null
2214 | })
2215 | .sort(function (a, b) { return a[0] - b[0] })
2216 | .each(function () {
2217 | that.offsets.push(this[0])
2218 | that.targets.push(this[1])
2219 | })
2220 | }
2221 |
2222 | ScrollSpy.prototype.process = function () {
2223 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
2224 | var scrollHeight = this.getScrollHeight()
2225 | var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
2226 | var offsets = this.offsets
2227 | var targets = this.targets
2228 | var activeTarget = this.activeTarget
2229 | var i
2230 |
2231 | if (this.scrollHeight != scrollHeight) {
2232 | this.refresh()
2233 | }
2234 |
2235 | if (scrollTop >= maxScroll) {
2236 | return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
2237 | }
2238 |
2239 | if (activeTarget && scrollTop < offsets[0]) {
2240 | this.activeTarget = null
2241 | return this.clear()
2242 | }
2243 |
2244 | for (i = offsets.length; i--;) {
2245 | activeTarget != targets[i]
2246 | && scrollTop >= offsets[i]
2247 | && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
2248 | && this.activate(targets[i])
2249 | }
2250 | }
2251 |
2252 | ScrollSpy.prototype.activate = function (target) {
2253 | this.activeTarget = target
2254 |
2255 | this.clear()
2256 |
2257 | var selector = this.selector +
2258 | '[data-target="' + target + '"],' +
2259 | this.selector + '[href="' + target + '"]'
2260 |
2261 | var active = $(selector)
2262 | .parents('li')
2263 | .addClass('active')
2264 |
2265 | if (active.parent('.dropdown-menu').length) {
2266 | active = active
2267 | .closest('li.dropdown')
2268 | .addClass('active')
2269 | }
2270 |
2271 | active.trigger('activate.bs.scrollspy')
2272 | }
2273 |
2274 | ScrollSpy.prototype.clear = function () {
2275 | $(this.selector)
2276 | .parentsUntil(this.options.target, '.active')
2277 | .removeClass('active')
2278 | }
2279 |
2280 |
2281 | // SCROLLSPY PLUGIN DEFINITION
2282 | // ===========================
2283 |
2284 | function Plugin(option) {
2285 | return this.each(function () {
2286 | var $this = $(this)
2287 | var data = $this.data('bs.scrollspy')
2288 | var options = typeof option == 'object' && option
2289 |
2290 | if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
2291 | if (typeof option == 'string') data[option]()
2292 | })
2293 | }
2294 |
2295 | var old = $.fn.scrollspy
2296 |
2297 | $.fn.scrollspy = Plugin
2298 | $.fn.scrollspy.Constructor = ScrollSpy
2299 |
2300 |
2301 | // SCROLLSPY NO CONFLICT
2302 | // =====================
2303 |
2304 | $.fn.scrollspy.noConflict = function () {
2305 | $.fn.scrollspy = old
2306 | return this
2307 | }
2308 |
2309 |
2310 | // SCROLLSPY DATA-API
2311 | // ==================
2312 |
2313 | $(window).on('load.bs.scrollspy.data-api', function () {
2314 | $('[data-spy="scroll"]').each(function () {
2315 | var $spy = $(this)
2316 | Plugin.call($spy, $spy.data())
2317 | })
2318 | })
2319 |
2320 | }(jQuery);
2321 |
2322 | /* ========================================================================
2323 | * Bootstrap: transition.js v3.3.7
2324 | * http://getbootstrap.com/javascript/#transitions
2325 | * ========================================================================
2326 | * Copyright 2011-2016 Twitter, Inc.
2327 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2328 | * ======================================================================== */
2329 |
2330 |
2331 | +function ($) {
2332 | 'use strict';
2333 |
2334 | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
2335 | // ============================================================
2336 |
2337 | function transitionEnd() {
2338 | var el = document.createElement('bootstrap')
2339 |
2340 | var transEndEventNames = {
2341 | WebkitTransition : 'webkitTransitionEnd',
2342 | MozTransition : 'transitionend',
2343 | OTransition : 'oTransitionEnd otransitionend',
2344 | transition : 'transitionend'
2345 | }
2346 |
2347 | for (var name in transEndEventNames) {
2348 | if (el.style[name] !== undefined) {
2349 | return { end: transEndEventNames[name] }
2350 | }
2351 | }
2352 |
2353 | return false // explicit for ie8 ( ._.)
2354 | }
2355 |
2356 | // http://blog.alexmaccaw.com/css-transitions
2357 | $.fn.emulateTransitionEnd = function (duration) {
2358 | var called = false
2359 | var $el = this
2360 | $(this).one('bsTransitionEnd', function () { called = true })
2361 | var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
2362 | setTimeout(callback, duration)
2363 | return this
2364 | }
2365 |
2366 | $(function () {
2367 | $.support.transition = transitionEnd()
2368 |
2369 | if (!$.support.transition) return
2370 |
2371 | $.event.special.bsTransitionEnd = {
2372 | bindType: $.support.transition.end,
2373 | delegateType: $.support.transition.end,
2374 | handle: function (e) {
2375 | if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
2376 | }
2377 | }
2378 | })
2379 |
2380 | }(jQuery);
2381 |
--------------------------------------------------------------------------------
/assets/js/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.7 (http://getbootstrap.com)
3 | * Copyright 2011-2017 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 |
7 | /*!
8 | * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=d54a43febee21689b4ca77f6ccba6a21)
9 | * Config saved to config.json and https://gist.github.com/d54a43febee21689b4ca77f6ccba6a21
10 | */
11 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new o(this)),"string"==typeof e&&n[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.7",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t("#"===s?[]:s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof e&&e;n||o.data("bs.button",n=new i(this,s)),"toggle"==e?n.toggle():e&&n.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.7",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,n=o.is("input")?"val":"html",s=o.data();e+="Text",null==s.resetText&&o.data("resetText",o[n]()),setTimeout(t.proxy(function(){o[n](null==s[e]?this.options[e]:s[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i).prop(i,!0)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i).prop(i,!1))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target).closest(".btn");e.call(o,"toggle"),t(i.target).is('input[type="radio"], input[type="checkbox"]')||(i.preventDefault(),o.is("input,button")?o.trigger("focus"):o.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new i(this,s)),"number"==typeof e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e),o="prev"==t&&0===i||"next"==t&&i==this.$items.length-1;if(o&&!this.options.wrap)return e;var n="prev"==t?-1:1,s=(i+n)%this.$items.length;return this.$items.eq(s)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){return this.sliding?void 0:this.slide("next")},i.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},i.prototype.slide=function(e,o){var n=this.$element.find(".item.active"),s=o||this.getItemForDirection(e,n),a=this.interval,r="next"==e?"left":"right",l=this;if(s.hasClass("active"))return this.sliding=!1;var h=s[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var p=t(this.$indicators.children()[this.getItemIndex(s)]);p&&p.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,n.addClass(r),s.addClass(r),n.one("bsTransitionEnd",function(){s.removeClass([e,r].join(" ")).addClass("active"),n.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(c)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(n.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(c)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var n=function(i){var o,n=t(this),s=t(n.attr("data-target")||(o=n.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(s.hasClass("carousel")){var a=t.extend({},s.data(),n.data()),r=n.attr("data-slide-to");r&&(a.interval=!1),e.call(s,a),r&&s.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),+function(t){"use strict";function e(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var o=t(this),n=e(o),s={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(n[0],i.target)||(n.trigger(i=t.Event("hide.bs.dropdown",s)),i.isDefaultPrevented()||(o.attr("aria-expanded","false"),n.removeClass("open").trigger(t.Event("hidden.bs.dropdown",s)))))}))}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.7",a.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=e(n),a=s.hasClass("open");if(i(),!a){"ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var r={relatedTarget:this};if(s.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),s.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},a.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var o=t(this);if(i.preventDefault(),i.stopPropagation(),!o.is(".disabled, :disabled")){var n=e(o),a=n.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&n.find(s).trigger("focus"),o.trigger("click");var r=" li:not(.disabled):visible a",l=n.find(".dropdown-menu"+r);if(l.length){var h=l.index(i.target);38==i.which&&h>0&&h--,40==i.which&&hdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),i.isInStateTrue()?void 0:(clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide())},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var f=r,u=this.getPosition(this.$viewport);r="bottom"==r&&d.bottom+c>u.bottom?"top":"top"==r&&d.top-cu.width?"left":"left"==r&&d.left-pa.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},i.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return t=e.attr("data-original-title")||("function"==typeof i.title?i.title.call(e[0]):i.title)},i.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&(i=t(e.currentTarget).data("bs."+this.type),i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof e&&e;!n&&/destroy|hide/.test(e)||(n||o.data("bs.popover",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");i.VERSION="3.3.7",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.tab");n||o.data("bs.tab",n=new i(this)),"string"==typeof e&&n[e]()})}var i=function(e){this.element=t(e)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=e.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var n=i.find(".active:last a"),s=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:n[0]});if(n.trigger(s),e.trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){var r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){n.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:n[0]})})}}},i.prototype.activate=function(e,o,n){function s(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var a=o.find("> .active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.7",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return i>n?"top":!1;if("bottom"==this.affixed)return null!=i?n+this.unpin<=s.top?!1:"bottom":t-o>=n+a?!1:"bottom";var r=null==this.affixed,l=r?n:s.top,h=r?a:e;return null!=i&&i>=n?"top":null!=o&&l+h>=t-o?"bottom":!1},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof s&&(s=o.bottom(this.$element));var r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery),+function(t){"use strict";function e(e){var i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(o)}function i(e){return this.each(function(){var i=t(this),n=i.data("bs.collapse"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);!n&&s.toggle&&/show|hide/.test(e)&&(s.toggle=!1),n||i.data("bs.collapse",n=new o(this,s)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.7",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0},o.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var s=t.Event("show.bs.collapse");if(this.$element.trigger(s),!s.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,
12 | this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l])}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION):n.call(this)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var n=t(o);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var n=t(this);n.attr("data-target")||o.preventDefault();var s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),+function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(void 0===n[t+1]||e/g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset"}function u(e){s+=""+t(e)+">"}function c(e){("start"===e.event?o:u)(e.node)}for(var l=0,s="",f=[];e.length||r.length;){var g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return s+n(a.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!y[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=null!=E.sL?d():h(),k=""}function v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"
":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/
/g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/,r:0,c:[{cN:"attr",b:e,r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[c]},{b:/(fr|rf|f)"/,e:/"/,c:[c]},e.ASM,e.QSM]},s={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,s,a]};return c.c=[a,s,b],{aliases:["py","gyp"],k:r,i:/(<\/|->|\?)|=>/,c:[b,s,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});
--------------------------------------------------------------------------------
/background.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/background.js:
--------------------------------------------------------------------------------
1 | // Chrome automatically creates a background.html page for this to execute.
2 | // This can access the inspected page via executeScript
3 | //
4 | // Can use:
5 | // chrome.tabs.*
6 | // chrome.extension.*
7 |
8 | // Standard Google Universal Analytics code
9 |
10 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
11 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
12 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
13 | })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); // Note: https protocol here
14 |
15 | ga('create', 'UA-98927264-1', 'auto');
16 | ga('set', 'checkProtocolTask', function(){}); // Removes failing protocol check. @see: http://stackoverflow.com/a/22152353/1958200
17 | ga('require', 'displayfeatures');
18 |
19 |
20 | chrome.extension.onConnect.addListener(function (port) {
21 |
22 | var extensionListener = function (message, sender, sendResponse) {
23 |
24 | if(message.tabId && message.action && message.content) {
25 |
26 | if (message.action === 'track-pageview') {
27 | ga('send', 'pageview', message.content);
28 | }
29 |
30 | // This accepts messages from the inspectedPage and
31 | // sends them to the panel
32 | } else {
33 | port.postMessage(message);
34 | }
35 | sendResponse(message);
36 | }
37 |
38 | // Listens to messages sent from the panel
39 | chrome.extension.onMessage.addListener(extensionListener);
40 |
41 | port.onDisconnect.addListener(function(port) {
42 | chrome.extension.onMessage.removeListener(extensionListener);
43 | });
44 |
45 | // port.onMessage.addListener(function (message) {
46 | // port.postMessage(message);
47 | // });
48 |
49 | });
50 | chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
51 | return true;
52 | });
53 |
--------------------------------------------------------------------------------
/devtools.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/devtools.js:
--------------------------------------------------------------------------------
1 | // Can use
2 | // chrome.devtools.*
3 | // chrome.extension.*
4 |
5 | // Create a tab in the devtools area
6 | chrome.devtools.panels.create("Django", "icon16.png", "panel.html", function(panel) {});
7 |
--------------------------------------------------------------------------------
/dist/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/dist/.DS_Store
--------------------------------------------------------------------------------
/dist/djdevpanel-0.1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/dist/djdevpanel-0.1.zip
--------------------------------------------------------------------------------
/icon128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/icon128.png
--------------------------------------------------------------------------------
/icon16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/icon16.png
--------------------------------------------------------------------------------
/icon256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/icon256.png
--------------------------------------------------------------------------------
/icon48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loftylabs/djdevpanel-devtools/ff4dcadb9ff5521fed81db39ca99bb1762723290/icon48.png
--------------------------------------------------------------------------------
/inserted-script.js:
--------------------------------------------------------------------------------
1 | // This is included and executed in the inspected page
2 | function inserted() {
3 | console.log('External script attached');
4 | }
5 | inserted();
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Django Developer Panel",
3 | "short_name": "djdevpanel",
4 | "version": "0.1",
5 | "author": "Lofty Labs",
6 | "homepage_url": "https://github.com/loftylabs/django-developer-panel",
7 | "description": "Debugging tools for Django applications.",
8 | "devtools_page": "devtools.html",
9 | "background": {
10 | "page": "background.html"
11 | },
12 | "permissions": [
13 | "tabs",
14 | "http://*/*",
15 | "https://*/*"
16 | ],
17 | "content_security_policy": "script-src 'self' https://www.google-analytics.com; object-src 'self'",
18 | "manifest_version": 2,
19 | "icons": {
20 | "128": "icon128.png"}
21 | }
22 |
--------------------------------------------------------------------------------
/messageback-script.js:
--------------------------------------------------------------------------------
1 | // document.querySelector('button').addEventListener('click', function() {
2 | // chrome.extension.sendMessage({action: 'message', content:"Changed by page"}, function(message){});
3 | // });
4 | document.querySelector('button').addEventListener('click', function() {
5 | sendObjectToDevTools({content: "Changed by page"});
6 | });
7 | function sendObjectToDevTools(message) {
8 | // The callback here can be used to execute something on receipt
9 | chrome.extension.sendMessage(message, function(message){});
10 | }
--------------------------------------------------------------------------------
/messaging.js:
--------------------------------------------------------------------------------
1 | // This creates and maintains the communication channel between
2 | // the inspectedPage and the dev tools panel.
3 | //
4 | // In this example, messages are JSON objects
5 | // {
6 | // action: ['code'|'script'|'message'], // What action to perform on the inspected page
7 | // content: [String|Path to script|Object], // data to be passed through
8 | // tabId: [Automatically added]
9 | // }
10 |
11 | (function createChannel() {
12 | //Create a port with background page for continous message communication
13 | var port = chrome.extension.connect({
14 | name: "Sample Communication" //Given a Name
15 | });
16 |
17 | // Listen to messages from the background page
18 | port.onMessage.addListener(function (message) {
19 | document.querySelector('#insertmessagebutton').innerHTML = message.content;
20 | // port.postMessage(message);
21 | });
22 |
23 | }());
24 |
25 | // This sends an object to the background page
26 | // where it can be relayed to the inspected page
27 | function sendObjectToInspectedPage(message) {
28 | message.tabId = chrome.devtools.inspectedWindow.tabId;
29 | chrome.extension.sendMessage(message);
30 | }
--------------------------------------------------------------------------------
/panel.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | djDevPanel
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | Time |
37 | Query |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | Setting |
51 | Value |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | Check ID |
65 | Message |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
Method Resolution Order
76 |
78 |
79 |
80 |
81 |
82 |
83 | Call |
84 | Result |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | App State
98 |
99 |
100 |
101 |
102 | Django Version |
103 | |
104 |
105 |
106 | View |
107 | |
108 |
109 |
110 | URL Resolution |
111 | Namespaces:
112 | Name:
113 | |
114 |
115 |
116 | View *args |
117 | |
118 |
119 |
120 |
121 | View **kwargs |
122 | |
123 |
124 |
125 | Current User |
126 | |
127 |
128 |
129 | Session Data |
130 | |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
--------------------------------------------------------------------------------
/panel.js:
--------------------------------------------------------------------------------
1 | // This one acts in the context of the panel in the Dev Tools
2 | //
3 | // Can use
4 | // chrome.devtools.*
5 | // chrome.extension.*
6 |
7 | window.djbug_data = {};
8 | window.djbug_no_django = false;
9 |
10 | function render() {
11 | // Track a pageview for every render
12 | sendObjectToInspectedPage({action: "track-pageview", content: "/render"});
13 |
14 | clear_panes();
15 |
16 | chrome.devtools.inspectedWindow.eval(
17 | "dj_chrome",
18 | function (result, isException) {
19 | if (isException) {
20 | $('.no-django').modal({ backdrop: 'static', keyboard: false });
21 | window.djbug_no_django = true;
22 | } else {
23 | var version = result.version;
24 | djangoVersion = version[0] + '.' + version[1] + '.' + version[2] + '-' + version[3];
25 |
26 | // bind this to the global var
27 | window.djbug_data = result;
28 |
29 | $('.django-version').html(djangoVersion);
30 |
31 | if (window.djbug_no_django) {
32 | $('.no-django').modal('hide');
33 | window.djbug_no_django = false;
34 | }
35 |
36 | build_panes();
37 | }
38 | }
39 | );
40 |
41 | $(".se-pre-con").fadeOut("slow");
42 |
43 | }
44 |
45 | function clear_panes() {
46 | var query_table = $('.query-table tbody');
47 | var settings_table = $('.settings-table tbody');
48 | var warnings_pane = $('.warnings-table tbody');
49 | var mro_pane = $('.bases-list');
50 | var view_data_pane = $('.cbv-table tbody');
51 |
52 | [query_table, settings_table, warnings_pane, mro_pane, view_data_pane].forEach(function(el) {
53 | el.html("");
54 | });
55 |
56 | }
57 |
58 |
59 | $().ready(function() {
60 | render();
61 |
62 | // Capture tab changes and send them to GA
63 | $('a[data-toggle="tab"]').on('show.bs.tab', function (e) {
64 | sendObjectToInspectedPage({action: "track-pageview", content: "/tab/" + $(e.target).attr('href') });
65 | })
66 | });
67 |
68 |
69 | chrome.devtools.network.onNavigated.addListener(function(){
70 | $(".se-pre-con").fadeIn("fast");
71 | window.setTimeout(render, 1000);
72 | });
73 |
74 | function build_panes() {
75 |
76 | // Database queries
77 | var queries = window.djbug_data.db_queries
78 | var query_table = $('.query-table tbody')
79 |
80 | $('.query-count').html(queries.length);
81 |
82 | for (i in queries) {
83 | row = $("");
84 | row.append($("").html(queries[i].time));
85 | row.append($(" | ").html($('').html($('').addClass('sql').html(queries[i].sql))));
86 | query_table.append(row);
87 | }
88 |
89 | // Django Settings
90 | var settings = window.djbug_data.settings
91 | var settings_table = $('.settings-table tbody')
92 | Object.keys(settings).forEach(function(key) {
93 | row = $("");
94 | row.append($("").html(key));
95 | value = JSON.stringify(settings[key], null, 4);
96 | row.append($(" | ").html($('').html(value)));
97 | settings_table.append(row);
98 | });
99 |
100 | // Warnings
101 | var checks = window.djbug_data.checks
102 | var warnings_table = $('.warnings-table tbody');
103 | Object.keys(checks).forEach(function(key) {
104 | var check_level = 'text-warning'
105 |
106 | // check level
107 | if (checks[key].level < 30)
108 | check_level = 'text-info';
109 | else if (checks[key].level > 30)
110 | check_level = 'text-danger';
111 |
112 | row = $("");
113 | row.append($("").html(key));
114 | value = JSON.stringify(checks[key], null, 4);
115 | row.append($(" | ").html($('').addClass(check_level).html(value)));
116 | warnings_table.append(row);
117 | });
118 |
119 | var warning_count = Object.keys(checks).length;
120 |
121 | // Some custom warnings that aren't worth the installation overhead of building
122 | // into a Django app config
123 | if (settings.APPEND_SLASH) {
124 | row = $("");
125 | row.append($("").html('djdev.I001'));
126 | row.append($(" | ").html($('').addClass('text-info').html(
127 | '"Django is automatically appending trailing slashes to URLs. Check the APPEND_SLASH setting to change."')));
128 | warnings_table.append(row);
129 | warning_count++;
130 | }
131 |
132 |
133 |
134 | $('.warning-count').html(warning_count);
135 |
136 | // CBV Introspection
137 |
138 | $('.cbv-tab').hide();
139 | if (window.djbug_data.view_data.cbv){
140 | cbv_data = window.djbug_data.view_data;
141 | $('.cbv-tab').show();
142 | $('.cbv-name').html(cbv_data.view_name);
143 |
144 | // Populate MRO
145 | cbv_data.bases.forEach(function(key) {
146 | var base = $('').addClass('list-group-item').text(key);
147 | $('.bases-list').append(base);
148 | });
149 |
150 | // Populate Method Calls
151 | Object.keys(cbv_data.view_methods).forEach(function(key) {
152 | var row = $('').append(
153 | $('').html(
154 | $('').text(key)));
155 | row.append($('').html($('').text(cbv_data.view_methods[key].return)));
156 | $('.cbv-table tbody').append(row);
157 | });
158 | }
159 |
160 |
161 | // Other Info
162 | $('.current-user').html($('').html($('').addClass('json').html(JSON.stringify(window.djbug_data.current_user, null, 4))));
163 | $('.session-data').html($('').html($('').html(JSON.stringify(window.djbug_data.session, null, 4))));
164 | $('.current-view').html($('').html(window.djbug_data.view_data.view_name));
165 | $('.current-view-args').html($('').html(JSON.stringify(window.djbug_data.view_data.view_args)));
166 | $('.current-view-kwargs').html($('').html(JSON.stringify(window.djbug_data.view_data.view_kwargs)));
167 | $('.url-namespaces').html($('').html(JSON.stringify(window.djbug_data.url_namespaces)));
168 | $('.url-name').html($('').html(window.djbug_data.url_name));
169 |
170 | $('pre > code').each(function() {
171 | hljs.highlightBlock(this);
172 | });
173 |
174 |
175 | }
176 |
--------------------------------------------------------------------------------
| | | | | |