Version Description
Download this release
Release Info
Developer | dovyp |
Plugin | Redux Framework |
Version | 3.5.9 |
Comparing to | |
See all releases |
Code changes from version 3.5.8 to 3.5.9
- CHANGELOG.md +57 -0
- CONTRIBUTING.md +12 -14
- ReduxCore/assets/css/redux-admin.css +1 -1
- ReduxCore/assets/css/vendor/qtip/jquery.qtip.css +328 -335
- ReduxCore/assets/css/vendor/qtip/jquery.qtip.min.css +2 -1
- ReduxCore/assets/js/redux.js +5 -3
- ReduxCore/assets/js/redux.min.js +1 -1
- ReduxCore/assets/js/vendor/qtip/jquery.qtip.js +2989 -3489
- ReduxCore/assets/js/vendor/qtip/jquery.qtip.min.js +5 -3
- ReduxCore/core/dashboard.php +9 -4
- ReduxCore/core/newsflash.php +12 -5
- ReduxCore/framework.php +95 -20
- ReduxCore/inc/browser.php +1176 -1088
- ReduxCore/inc/class.redux_admin_notices.php +20 -19
- ReduxCore/inc/class.redux_api.php +1 -1
- ReduxCore/inc/class.redux_filesystem.php +1 -0
- ReduxCore/inc/class.redux_functions.php +16 -1
- ReduxCore/inc/class.redux_helpers.php +15 -13
- ReduxCore/inc/class.thirdparty.fixes.php +10 -0
- ReduxCore/inc/extensions/customizer/extension_customizer.php +6 -6
- ReduxCore/inc/fields/border/field_border.php +4 -4
- ReduxCore/inc/fields/editor/field_editor.js +5 -3
- ReduxCore/inc/fields/editor/field_editor.min.js +1 -1
- ReduxCore/inc/fields/gallery/field_gallery.js +7 -0
- ReduxCore/inc/fields/gallery/field_gallery.min.js +1 -1
- ReduxCore/inc/fields/raw/field_raw.php +3 -3
- ReduxCore/inc/fields/raw/parsedown.php +962 -796
CHANGELOG.md
CHANGED
@@ -1,5 +1,62 @@
|
|
1 |
# Redux Framework Changelog
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
## 3.5.8
|
4 |
* Fixed: Customizer preview callback working again.
|
5 |
|
1 |
# Redux Framework Changelog
|
2 |
|
3 |
+
## 3.5.9
|
4 |
+
* Notice: New wp.org release
|
5 |
+
|
6 |
+
## 3.5.8.15
|
7 |
+
* Fixed: Wordpress 4.4.1 related issues.
|
8 |
+
|
9 |
+
## 3.5.8.14
|
10 |
+
* Fixed: #2794 - User contributed code from #2716 did not contain isset and caused an index error.
|
11 |
+
|
12 |
+
## 3.5.8.13
|
13 |
+
* Modified: Added tons of wp_remote_get handlings to stop bringing down site if Redux is down.
|
14 |
+
* Modified: When some items appear or not. Making devs lives easier. ;)
|
15 |
+
|
16 |
+
## 3.5.8.12
|
17 |
+
* Updated: parsedown.php vendor code, to deal. with PHP 7.0 errors.
|
18 |
+
|
19 |
+
## 3.5.8.11
|
20 |
+
* Fixed: #2774 - border fields set to 0 would disappear after saving.
|
21 |
+
* Modified: Post/page settings on the media gallery window hidden for gallery field, since they are not applicable to Redux.
|
22 |
+
* Added: #2728 - Filter for hints HTML. 'redux/hints/html'. Thanks, @nyordanov.
|
23 |
+
* Fixed: #2716 - Enqueue jquery sortable when select field is set to sortable. Thanks, @josh-rathke.
|
24 |
+
|
25 |
+
## 3.5.8.10
|
26 |
+
* Fixed: #2726 - Redux fixes for WordPress 4.4.
|
27 |
+
* Fixed: #2713 - Alerts wouldn't disappear.
|
28 |
+
|
29 |
+
## 3.5.8.9
|
30 |
+
* Fixed: #2726 - WP 4.4 breaking template.php include, because the core WP guys thought it would be hilarious to break everyone else's stuff.
|
31 |
+
|
32 |
+
## 3.5.8.8
|
33 |
+
* Fixed: Specifying 'user' in a field's data argument would produce WordPress depreciation errors.
|
34 |
+
|
35 |
+
## 3.5.8.7
|
36 |
+
* Fixed: Reflective XSS security fix. Thanks to Kacper Szurek for the information.
|
37 |
+
|
38 |
+
## 3.5.8.6
|
39 |
+
* Modified: #2685 - Rejoined http strings to prevent errors in theme check. Trade off, INFO notices will appear. @Otto says this is ok.
|
40 |
+
|
41 |
+
## 3.5.8.5
|
42 |
+
* Fixed: #2684 - Sorter not displaying (or saving) WordPress data when using the data argument.
|
43 |
+
|
44 |
+
## 3.5.8.4
|
45 |
+
* Added: #2673 - WP_CLI check before welcome page redirect.
|
46 |
+
* Fixed: #2677 - tinymce javascript errors when wp editor is disabled.
|
47 |
+
|
48 |
+
## 3.5.8.3
|
49 |
+
* Modified: While in dev_mode, noticies will appear if Redux sample data in share_icons and admin_bar_links arguments is not changed.
|
50 |
+
This became necessary because devs are not changing this data and theme ends users are coming to us for theme support.
|
51 |
+
* Modified: Redux links to be // instead of http:// or https:// to ensure portability for secure sites.
|
52 |
+
|
53 |
+
## 3.5.8.2
|
54 |
+
* Fixed: #2665 - For those who must have empty dirs in the extensions dir. No more errors.
|
55 |
+
* Added: #2660 - Added 'user'/'users' data type to wordpress data arg. Thanks @golchha21.
|
56 |
+
|
57 |
+
## 3.5.8.1
|
58 |
+
* Fixed: #2652 - load_plugin_textdomain using depreciated argument.
|
59 |
+
|
60 |
## 3.5.8
|
61 |
* Fixed: Customizer preview callback working again.
|
62 |
|
CONTRIBUTING.md
CHANGED
@@ -1,27 +1,25 @@
|
|
1 |
-
|
2 |
|
3 |
-
|
4 |
|
5 |
-
|
6 |
|
7 |
-
|
8 |
|
9 |
-
|
10 |
|
11 |
-
|
12 |
|
13 |
-
|
14 |
|
15 |
-
|
16 |
|
17 |
-
|
18 |
|
19 |
-
|
20 |
|
21 |
-
|
22 |
|
23 |
-
|
24 |
-
|
25 |
-
What we do NOT do is debug your code. We support the Redux code and the way in which the config is put together. Any other issue pertaining to your project is your own, or we might be able to assist with premium support.
|
26 |
|
27 |
- Team Redux
|
1 |
+
Hello, and welcome to Redux Framework!
|
2 |
|
3 |
+
These are our new guidelines for support. Please read them thoroughly before submitting an issue on our issue tracker (or if you were directed her, modify your ticket with the required information).
|
4 |
|
5 |
+
First, and most importantly, we need to know if you are a developer using Redux in their project, or if you are using a theme/plugin that uses Redux. Redux is a tool for developers to include an options panel in their project. Consequently, we do not offer support for folks who have purchased a theme or plugin that uses Redux. The responsibility of support for themes and plugins falls upon it's author. We realize that some authors have included support links for Redux in their projects, when they should not have. We do apologize for that confusion and are taking steps to remedy this confusion. If you have purchased a theme or plugin that utilizes Redux, please contact the author for support. If the author is unavailable for support or has discontinued support, please refer to this article: [Support Defined](https://docs.reduxframework.com/core/support-defined/).
|
6 |
|
7 |
+
If you are a developer, using Redux Framework in your project, PLEASE check to see if you are using the latest version of Redux by checking this repository. If you plan to reporting an issue with any version BUT the latest version, we are going to ask you to upgrade to the latest code base anyway to see if your issue persists. Please save yourself and us some time by taking this simple step first. Thanks!
|
8 |
|
9 |
+
We designed our issue tracker to help identify and correct issues within Redux Framework. If you believe you have discovered an issue, or something is not working as it should, then submitting an issue is appropriate. However, if you are looking for a custom solution involving Redux, or require assistance with original code unrelated to the Redux core itself, then this type of support falls under Premium support. We are not PHP/JavaScript tutors, or a version of Stack Overflow, or have the time and resources to debug your code. For Premium support options, please visit this page: [Premium Support](https://reduxframework.com/extension/premium-support/). Our cost is $100.00 per hour. If you require a more tailored quote, please contact support@reduxframework.com.
|
10 |
|
11 |
+
We handle all support for Redux Framework via our issue tracker. Email support is available only for those who have purchased Premium Support, or in instances where we have requested contact via EMail.
|
12 |
|
13 |
+
For Redux Extensions: All pre-sale and support for premium extensions need to be posted to the [Redux Extensions Issue Tracker] (https://github.com/reduxframework/redux-extensions). Please do not post them to this issue tracker.
|
14 |
|
15 |
+
You MUST be using Redux in dev mode when submitting an issue to us. If you are not, or have circumvented our dev mode protocol, you are on your own. There could be information in your issue that requires dev move active. (Compressed Javascript, for example. We are unable to diagnose issues with compressed Javascript and why dev mode needs to be enabled.)
|
16 |
|
17 |
+
Because it is sometimes difficult to get all the necessary information for a support issue,we have designed the Support URL protocol, in which we are able to gather all the required data via one URL. It will be necessary for you to post one in your issue. Please refer to this article for instructions on generating a support URL: [Generating a Support URL] (https://docs.reduxframework.com/core/generating-a-support-hash/). This is *required*. We will not be able to offer support without one. We appreciate the understanding.
|
18 |
|
19 |
+
If an error or notice appears on your screen, please cut and paste it into your issue. PLEASE, do not say you 'got an error' without telling us what the error or notice is.
|
20 |
|
21 |
+
Sometimes, an issue may be tied to JavaScript. To make this determination, you will need to check the JavaScript console. To do this, ensure your web browser is the topmost window. On your keyboard, press CTRL+SHIFT+I. The JavaScript console will open. If there are notices or errors there, please cut and paste them into your issue. We would prefer a cut and paste, since it will include all pertinent information. Also, Redux dev mode must be enabled so an accurate line number may be reported.
|
22 |
|
23 |
+
It would also be hugely helpful to us if you are able to indicate any steps taken up until the issue occurred. We may need to be able to recreate your issue on our end, and having this information would help with that. Simply stating something 'doesn't work' isn't helpful, and tells us nothing. PLEASE, be as specific as possible.
|
|
|
|
|
24 |
|
25 |
- Team Redux
|
ReduxCore/assets/css/redux-admin.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.spinner{visibility:hidden;display:block}.spinner.is-active{visibility:visible}.redux-main .description{margin-top:7px}.form-table>tbody>tr>th{width:30%}.redux-container{background-color:#f5f5f5;background-repeat:repeat-x;background-image:-moz-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f2f2), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-ms-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-o-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#eeeeee', GradientType=0);background-image:-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);border:1px solid #dedede;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04);-moz-box-shadow:0 1px 5px rgba(0,0,0,0.4);margin-top:5px;overflow:hidden}.redux-container a:focus{box-shadow:none}.redux-container #redux-header,.redux-container #redux-footer{text-align:right;padding:6px 10px}.redux-container #redux-header{background:#f1f1f1;border-bottom:3px solid blue}.redux-container #redux-header .display_header{float:left;margin:20px 10px}.redux-container #redux-header .display_header h2{display:inline-block;font-style:normal;padding-right:5px}.redux-container #redux-header .display_header .redux-dev-mode-notice-container{position:absolute;top:67px;left:20px;bottom:auto;width:auto}.redux-container #redux-header .display_header span{color:#888}.redux-container #redux-header .display_header span.redux-dev-mode-notice{background-color:#f0ad4e;display:inline;padding:.2em .5em .2em;font-weight:700;line-height:1;color:#fff !important;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.redux-container #redux-header .icon32{float:right;margin:16px 16px 0}.redux-container #redux-footer{border-top:1px solid #E7E7E7;z-index:999}.redux-container #redux-footer #redux-share{float:left;line-height:28px;font-size:15px}.redux-container #redux-footer #redux-share a{text-decoration:none;margin-right:10px}.redux-container #redux-footer #redux-share a img{margin-bottom:-3px}.redux-container .notice-green{margin:0;border-bottom:1px solid #E7E7E7;background-color:#DFF0D8;color:#468847;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-blue{margin:0;border-bottom:1px solid #BCE8F1;background-color:#D9EDF7;color:#3A87AD;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-yellow{margin:0;border-bottom:1px solid #E7E7E7;background-color:#FCF8E3;color:#C09853;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-red,.redux-container .redux-field-errors{margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .redux-field-error input,.redux-container .redux-field-error textarea,.redux-container .redux-field-error checkbox{background-color:#FFF6F6;color:#A00}.redux-container .redux-field-warning input,.redux-container .redux-field-warning textarea,.redux-container .redux-field-warning checkbox{background-color:#fcf8e3;color:#444}.redux-container .redux-field-errors,.redux-container .redux-field-warnings,.redux-container .redux-save-warn{display:none}.redux-container .sticky-save-warn{min-height:76px}.redux-container .sticky-save-warn .redux-save-warn{position:fixed;top:32px;right:21px;left:183px;opacity:1;z-index:9999}.redux-container #info_bar{background:#f3f3f3;border-bottom:1px solid #dedede;padding:6px 10px 6px 6px;text-align:right;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-group-tab{display:none;margin-bottom:15px}.redux-container .redux-group-tab .redux-theme-data{padding:20px 0;border-top:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-theme-data.theme-description{padding:10px 0;border-width:0}.redux-container .redux-group-tab .redux-theme-data.theme-uri,.redux-container .redux-group-tab .redux-theme-data.theme-author,.redux-container .redux-group-tab .redux-theme-data.theme-version{padding:0;border-width:0}.redux-container .redux-group-tab h3{margin-top:0;line-height:2em;border-bottom:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-section-desc{margin-bottom:15px;color:#666}.redux-container .redux-action_bar{float:right}.redux-container .redux-action_bar .spinner{float:left;margin-top:4px}.redux-container .redux-ajax-loading{display:none;background:red url(data:image/gif;base64,R0lGODlhEAAQAPUAAIiIiIqKio2NjZSUlJqamp6enqKioqSkpK+vr7i4uL+/v8PDw8XFxcnJyc/Pz9HR0dTU1NjY2Nzc3OLi4ubm5unp6ezs7PPz88vLy83NzdDQ0NXV1d3d3eHh4bu7u8zMzOvr6+3t7ZiYmNbW1sDAwMTExNra2s7OztPT09vb2+Xl5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAAoA/wAsAAAAABAAEAAABXDgJY6XZZEoOTnOlI5WdUFNA5UnSR3FJNUSieFAIUUEgcdl4noEBBGSZaHIiSqKhTX2GhVFiQGjuxgkSoYAoosAGE6RhKQrUURHlS+pItMVCHMjEgQ9JBJISg+JT3ciFg4NFkcCNw0OViiDgF0oTC8hACH5BAAKAP8ALAAAAAAQABAAAAVx4CWOZGle1qJYp2hV1xYE29V1JXUYHWUcnQgGwyFFBAENiqUZ1kapFamTyeBcsNOLMkoMGC3GIIEyBBAtRMDAiiSKp04iQqpwc9kRpUCAizgEBVciEQNJFxpKGgECdFAYYBsCAjUMGS0XgAODmDacIyEAIfkEAAoA/wAsAAAAABAAEAAABnbAi3BILBovIMUidBSGQJdNIKBBMomUg6FDMRgoHcOBQowIqNaLJiCIEEMLxdWpnIfITRAHnxgwjiEfDR8UIQYBCEcgDYwdUR6ORxEfG3MgeFiFRB0FBBxEHAQFkUJmaBofamxuRB9/GwICGxeMTRehnrabpERBACH5BAAKAP8ALAAAAAAQABAAAAZ9wItwSCwaL5aFwnIUWiqXUSAwulSYRMrB0KEYDJSO4UAhRgQBDZLpCAgixOSSWFEssEho81IWJgYMTQwDCUgGAQhNCAEGTCMJHU0dCXBDFX1DFhwdeHwFIhxmGBihQxEDaRcOGhYao1WZGIFnAiMUDg6YRR0ioE57Fx2RRkEAIfkEAAoA/wAsAAAAABAAEAAABXLgJY5kaV7WolinaLGQEEBXxZLUUUyUYVATw4FCisg0NZYmIIiQUosKqaJY3FDS1oUoSgwYrcUggTIAEC1EwMCKJCatSYI2qnBx2dGkQOCQOAQFdxdGARoVGhCITE4kGBgWEI8QFgwYWhGTWiMWERFXIyEAIfkEAAoA/wAsAAAAABAAEAAABn/Ai3BILBovloXCchRaKpdRIDC6VJhEysHQoRgMlI7hQCFGBAENkukICCLE5JJYUSywSGjzUhYmBgxNDAMJSAYBCE0IAAZMEQkdTRwKVUMcHHhCFXpDERgYcJYEBZFDI58aFhoOFxpuoUIUGhoUZwJVGA6ZaxccBAQce0QdpUVBACH5BAAKAP8ALAAAAAAQABAAAAZ8wItwSCwaLyEFKXQUhioXSCAAuVSYRMrB0KEYDJSO4UAhmgQBDZKpCQhMxFBJgRVWlFkOtElhUj4NH3VEJQMJFx0NintFCAEGISEQH3BHHR5VThVlRRSMQh0FBBxEHAQFnEJnaRcfHxdtb0WKIWcCVSUNTYgEo7tEHR1HQQAh+QQACgD/ACwAAAAAEAAQAAAGdcCLcEgsGi8hhSJ0FHY6l1EgMLqAmEROo5HqGAwqL5g42qKsoAsqIEgRVacTdAhSLLBI1bWpwiYGDE0MAwlIBgEITQgBBkwjCRxNHQlVdCpGekUqBQSRQxwEBZdDKQIBZ3FqbG5EDYEjpikhW3hFoJ1NRU9HQQA7) no-repeat;width:16px;height:16px;margin:3px 4px 0;float:right}.redux-container #redux-intro-text{background:#f3f3f3;border-bottom:1px solid #dedede;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc;padding:3px;padding:10px 10px}.redux-container #redux-intro-text p{margin:0;font-family:"Lucida Grande", Sans-serif;color:#888}.redux-container .expand_options{cursor:pointer;display:block;height:22px;width:21px;float:left;font-size:0;text-indent:-9999px;margin:1px 0 0 5px;border:1px solid #bbb;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -26px}.redux-container .expand_options.expanded{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -1px}.redux-container .expand_options:hover{border-color:#888}.redux-container .sticky-footer-fixed{background:#f3f3f3;border-top:1px solid #dedede !important;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-sidebar,.redux-container .redux-main{min-height:300px}.no-js{border:1px solid #ffbaba;margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-main{background:#FCFCFC;margin-left:201px;border-left:1px solid #D8D8D8;padding:10px 20px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #FFF;box-shadow:inset 0 1px 0 #FFF;position:relative}.redux-main #redux_ajax_overlay{position:absolute;top:0;left:0;right:0;bottom:0;-moz-opacity:0.10;-khtml-opacity:0.10;opacity:0.10;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10);filter:alpha(opacity=10);background:#000;z-index:200;display:none}.redux-main .form-table.no-border{border-top:none}.redux-main .form-table tr{border-bottom:1px solid #E7E7E7}.redux-main .form-table tr:last-child{border-bottom:none !important}.redux-main .form-table tr th,.redux-main .form-table tr td{color:#333}.redux-main .form-table tr td table.mceLayout,.redux-main .form-table tr td table.mceLayout tr,.redux-main .form-table tr td table.mceLayout tr td{padding:0;border-width:0}.redux-main .form-table tr td .redux-th-warning{font-size:1em;color:#C09853;font-weight:normal;display:block;margin-top:10px}.redux-main .form-table tr td .redux-field-warning{border-color:#C09853;margin-top:10px}.redux-main .form-table tr td .redux-th-error{font-size:1em;color:#B94A48;font-weight:normal;display:block;margin-top:10px}.redux-main input.large-text{width:100%}.redux-main .hide{display:none}.redux-main .redux-field-container{padding:20px 0}.redux-main .mini,.redux-main input[type=text].mini{width:60px;text-align:center}.redux-main input{line-height:19px}.redux-main img{max-width:100%;height:auto;width:auto !important}.redux-main .select2-default{width:auto !important}.redux-main .showDefaults{display:block;font-weight:normal;font-size:.8em;color:#888}.redux-main span.description{display:block;font-style:normal;font-weight:400}.redux-main #redux-system-info textarea{min-height:730px;width:100%}.redux-main .field-desc{clear:both;font-size:13px}.redux-main .data-full li{width:100%}.redux-main .data-half li{width:50%;float:left}.redux-main .data-third li{width:33.3%;float:left}.redux-main .data-quarter li{width:25%;float:left}.redux-main .ui-helper-hidden-accessible{top:inherit}.redux-main .form-table{clear:none;margin-top:0px !important}.redux-main .form-table tr:first-child th,.redux-main .form-table tr:first-child td{padding-top:0}.redux-main .input-append input{border-right:0;margin-bottom:0;border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0;float:left;margin-top:0;display:block}.redux-main .input-append .add-on{border-top-right-radius:3px;border-bottom-right-radius:3px;margin-left:-2px;padding-top:4px !important;padding-bottom:2px !important}.redux-main .input-prepend input{border-left:0;margin-bottom:0;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0;padding-top:2px;padding-bottom:5px;float:left;margin-top:0;display:block}.redux-main .input-prepend .add-on{border-top-left-radius:3px;border-bottom-left-radius:3px;float:left}.redux-main .input-append{margin-right:10px;font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-main .input-append .add-on,.redux-main .input-prepend .add-on{width:auto;display:inline-block;min-width:16px;padding:3px 4px;font-size:12px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #cccccc}.redux-main .input-prepend{font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-sidebar{width:202px;float:left}.redux-sidebar .redux-group-menu{margin-top:0 !important}.redux-sidebar .redux-group-menu li{margin-top:0}.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{background:#FCFCFC;color:#269ad6;width:184px;opacity:1}.redux-sidebar .redux-group-menu li.active a li a{background:#333;padding-left:5px}.redux-sidebar .redux-group-menu li.divide{padding:0;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9}.redux-sidebar .redux-group-menu li a:first-child{border-top:none}.redux-sidebar .redux-group-menu li a{display:block;padding:10px 4px 10px 14px;background:#e0e0e0;background:transparent;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9;opacity:0.7;color:#555;font-weight:bold;text-decoration:none;-webkit-transition:none;transition:none}.redux-sidebar .redux-group-menu li a.custom-tab{background:#f6f6f6}.redux-sidebar .redux-group-menu li a img{width:16px;height:16px;position:absolute;left:15px}.redux-sidebar .redux-group-menu li a:hover{background:#e5e5e5;color:#777;opacity:1}.redux-sidebar .redux-menu-warning,.redux-sidebar .redux-menu-error,.redux-sidebar .hasSubSections .extraIconSubsections{display:inline-block;float:right;padding:6px 7px 4px 7px;margin-left:4px;font-family:sans-serif;font-size:9px;font-weight:bold;line-height:9px;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent}.redux-sidebar .redux-menu-warning i,.redux-sidebar .redux-menu-error i,.redux-sidebar .hasSubSections .extraIconSubsections i{margin-left:-3px;margin-top:-3px}.redux-sidebar .redux-menu-error{background-color:#b94a48;color:#f2dede}.redux-sidebar .redux-menu-warning{background-color:#C09853;color:#FCF8E3}.redux-sidebar ul .subsection{display:none}.redux-sidebar .redux-group-tab-link-a{position:relative;outline:0}.redux-sidebar .redux-group-tab-link-a i{vertical-align:middle;font-size:1.35em;position:absolute}.redux-sidebar .redux-group-tab-link-a span{display:block}.redux-sidebar .redux-group-tab-link-a span.group_title{padding-left:30px}.redux-sidebar .redux-group-tab-link-li a.hasError span.group_title{padding-right:25px}.redux-sidebar #redux-header{text-align:center}.redux-sidebar #redux-header .display_header{float:none}.form-table th,.form-table td{margin:0;padding:0;width:auto}.redux_field_th{font-weight:bold;padding:20px 10px 20px 0px;display:block}.redux_field_th span:first-child{font-weight:normal;display:block;color:#666}.farb-popup-wrapper{position:relative;display:block}.farb-popup{position:absolute;left:40px;top:40px;background-color:white;border:1px solid #222;padding:5px;z-index:100}#ui-datepicker-div{display:none}.mp6 .icon-themes{display:none}.mp6 .redux-container #info_bar{padding:6px 10px 6px 6px}.mp6 .redux-container #info_bar a{margin-top:2px}.redux-timer{text-align:center;font-size:10px;color:#888}.wrap{margin-top:0}@media screen and (max-width: 600px){.redux-sidebar{width:44px}.redux-sidebar .extraIconSubsections{display:none !important}.redux-sidebar .redux-group-menu li a,.redux-sidebar .redux-group-menu li a:hover,.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{width:auto}.redux-sidebar .redux-group-tab-link-a{position:relative}.redux-sidebar .redux-group-tab-link-a i{position:inherit}.redux-sidebar .redux-group-tab-link-a span{display:none;position:absolute;top:0;left:44px;padding:12px;width:200px;background:#eeeeee;border:1px solid #ccc;-webkit-box-shadow:2px 2px 8px rgba(0,0,0,0.2);-moz-box-shadow:2px 2px 8px rgba(0,0,0,0.2);box-shadow:2px 2px 8px rgba(0,0,0,0.2);border-width:1px 1px 1px 0px;z-index:3}.redux-sidebar .redux-group-tab-link-a:hover>span{display:block}.redux-main{margin-left:43px;width:auto;max-width:100%}table.form-table,.form-table>thead,.form-table>tbody,.form-table>tbody>tr>th,.form-table>tbody>tr>td,.form-table>tbody>tr{display:block;width:100% !important;padding:0px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}}@media screen and (max-width: 782px){.form-table>tbody>tr>th{width:100%}.redux_field_th{padding-bottom:0}.mp6 .redux-container #info_bar{height:auto;padding-bottom:1px}.mp6 .redux-container #info_bar a{margin-top:5px}.redux-container-switch label{padding:5px 10px !important}.redux-container-button_set label{padding:12px 10px}.redux-container #redux-footer #redux-share{line-height:34px}}pre{overflow:hidden}#redux-header h2{color:#fff}.admin-color-fresh .button.ui-datepicker-current,.admin-color-fresh button.ui-datepicker-close,.wp-customizer .button.ui-datepicker-current,.wp-customizer button.ui-datepicker-close{background-color:#007db9 !important}.admin-color-fresh .ui-datepicker-buttonpane button.ui-datepicker-current,.wp-customizer .ui-datepicker-buttonpane button.ui-datepicker-current{background:#1e8cbe !important;color:white !important;border:1px solid #104b66 !important}.admin-color-fresh .ui-datepicker-header .ui-icon,.wp-customizer .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-fresh .ui-datepicker-header,.wp-customizer .ui-datepicker-header{background-color:#23282d !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{background-color:#007db9 !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-hover,.wp-customizer .ui-datepicker td .ui-state-hover{color:#007db9 !important}.admin-color-fresh .ui-datepicker td .ui-state-highlight,.wp-customizer .ui-datepicker td .ui-state-highlight{background:#0073aa !important;border:1px solid #23282d !important;color:white !important}.admin-color-fresh .redux-container-switch .cb-disable,.admin-color-fresh .redux-container-switch .cb-enable,.admin-color-fresh .ui-state-default,.admin-color-fresh .ui-widget-content .ui-state-default,.admin-color-fresh .ui-widget-header .ui-state-default,.wp-customizer .redux-container-switch .cb-disable,.wp-customizer .redux-container-switch .cb-enable,.wp-customizer .ui-state-default,.wp-customizer .ui-widget-content .ui-state-default,.wp-customizer .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-fresh .redux-container-switch .cb-disable.selected,.wp-customizer .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-fresh .redux-container-switch .cb-enable.selected,.admin-color-fresh .redux-field-container .ui-buttonset .ui-state-active,.wp-customizer .redux-container-switch .cb-enable.selected,.wp-customizer .redux-field-container .ui-buttonset .ui-state-active{background-color:#0073aa !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#008bce), to(#0073aa)) !important;background-image:-moz-linear-gradient(top, #008bce, #0073aa) !important;background-image:-ms-linear-gradient(top, #008bce, #0073aa) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #008bce), color-stop(100%, #0073aa)) !important;background-image:-webkit-linear-gradient(top, #008bce, #0073aa) !important;background-image:-o-linear-gradient(top, #008bce, #0073aa) !important;background-image:-linear-gradient(top, #008bce, #0073aa) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#008bce', endColorstr='#0073aa', GradientType=0) !important;border-color:#003f5e !important;border-color:#005177 !important;-webkit-box-shadow:inset 0 1px 0 #00a7f7,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #00a7f7,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-fresh #redux-header,.wp-customizer #redux-header{background:#23282d;border-color:#0073aa}.admin-color-fresh #redux-header .display_header span,.wp-customizer #redux-header .display_header span{color:#a0a5aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild,.wp-customizer .redux-sidebar .redux-group-menu li.active,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a,.wp-customizer .redux-sidebar .redux-group-menu li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a{color:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#1e8cbe;background:#0d0f10}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#0073aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#a0a5aa;text-shadow:1px 1px #54595d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#23282d;text-shadow:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#0073aa;text-shadow:1px 1px #002e44}.admin-color-fresh .redux-container-image_select .redux-image-select-selected img,.wp-customizer .redux-container-image_select .redux-image-select-selected img{border-color:#0073aa}.admin-color-fresh #redux-footer #redux-share a,.wp-customizer #redux-footer #redux-share a{color:#0073aa}.admin-color-fresh #redux-footer #redux-share a:hover,.wp-customizer #redux-footer #redux-share a:hover{color:#002e44}.admin-color-fresh .select2-results .select2-highlighted,.wp-customizer .select2-results .select2-highlighted{background:#0073aa}.admin-color-fresh .select2-drop-active,.admin-color-fresh .select2-container-multi.select2-container-active .select2-choices,.admin-color-fresh .select2-drop.select2-drop-above.select2-drop-active,.admin-color-fresh .select2-container-active .select2-choice,.admin-color-fresh .select2-container-active .select2-choices,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-drop-active,.wp-customizer .select2-container-multi.select2-container-active .select2-choices,.wp-customizer .select2-drop.select2-drop-above.select2-drop-active,.wp-customizer .select2-container-active .select2-choice,.wp-customizer .select2-container-active .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#0073aa}.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-fresh .noUi-connect,.wp-customizer .noUi-connect{background-color:#007db9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#0096dd), to(#007db9)) !important;background-image:-moz-linear-gradient(top, #0096dd, #007db9) !important;background-image:-ms-linear-gradient(top, #0096dd, #007db9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #0096dd), color-stop(100%, #007db9)) !important;background-image:-webkit-linear-gradient(top, #0096dd, #007db9) !important;background-image:-o-linear-gradient(top, #0096dd, #007db9) !important;background-image:-linear-gradient(top, #0096dd, #007db9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0096dd', endColorstr='#007db9', GradientType=0) !important}.admin-color-light .button.ui-datepicker-current,.admin-color-light button.ui-datepicker-close{background-color:#04b0db !important}.admin-color-light .ui-datepicker-buttonpane button.ui-datepicker-current{background:#0384a4 !important;color:white !important;border:1px solid #013340 !important}.admin-color-light .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-light .ui-datepicker-header{background-color:#888 !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-active{background-color:#04b0db !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-hover{color:#04b0db !important}.admin-color-light .ui-datepicker td .ui-state-highlight{background:#04a4cc !important;border:1px solid #888 !important;color:white !important}.admin-color-light .redux-container-switch .cb-disable,.admin-color-light .redux-container-switch .cb-enable,.admin-color-light .ui-state-default,.admin-color-light .ui-widget-content .ui-state-default,.admin-color-light .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-light .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-light .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-light .redux-container-switch .cb-enable.selected,.admin-color-light .redux-field-container .ui-buttonset .ui-state-active{background-color:#04a4cc !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#05c0ef), to(#04a4cc)) !important;background-image:-moz-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-ms-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #05c0ef), color-stop(100%, #04a4cc)) !important;background-image:-webkit-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-o-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-linear-gradient(top, #05c0ef, #04a4cc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#05c0ef', endColorstr='#04a4cc', GradientType=0) !important;border-color:#036881 !important;border-color:#037c9a !important;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-light #redux-header{background:#888;border-color:#04a4cc}.admin-color-light #redux-header .display_header span{color:#e6e6e6}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-light .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-light .redux-sidebar .redux-group-menu li.active,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-light .redux-sidebar .redux-group-menu li.active a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a{color:#888}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#0384a4;background:#6f6f6f}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#04a4cc}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#888}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e6e6e6;text-shadow:1px 1px #9a9a9a}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#888;text-shadow:none}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#04a4cc;text-shadow:1px 1px #025468}.admin-color-light .redux-container-image_select .redux-image-select-selected img{border-color:#04a4cc}.admin-color-light #redux-footer #redux-share a{color:#04a4cc}.admin-color-light #redux-footer #redux-share a:hover{color:#025468}.admin-color-light .select2-results .select2-highlighted{background:#04a4cc}.admin-color-light .select2-drop-active,.admin-color-light .select2-container-multi.select2-container-active .select2-choices,.admin-color-light .select2-drop.select2-drop-above.select2-drop-active,.admin-color-light .select2-container-active .select2-choice,.admin-color-light .select2-container-active .select2-choices,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#04a4cc}.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-light .noUi-connect{background-color:#04b0db !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#09cafa), to(#04b0db)) !important;background-image:-moz-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-ms-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #09cafa), color-stop(100%, #04b0db)) !important;background-image:-webkit-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-o-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-linear-gradient(top, #09cafa, #04b0db) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#09cafa', endColorstr='#04b0db', GradientType=0) !important}.admin-color-blue .button.ui-datepicker-current,.admin-color-blue button.ui-datepicker-close{background-color:#509dba !important}.admin-color-blue .ui-datepicker-buttonpane button.ui-datepicker-current{background:#db9825 !important;color:white !important;border:1px solid #845c16 !important}.admin-color-blue .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-blue .ui-datepicker-header{background-color:#096484 !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-active{background-color:#509dba !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-hover{color:#509dba !important}.admin-color-blue .ui-datepicker td .ui-state-highlight{background:#4796b3 !important;border:1px solid #096484 !important;color:white !important}.admin-color-blue .redux-container-switch .cb-disable,.admin-color-blue .redux-container-switch .cb-enable,.admin-color-blue .ui-state-default,.admin-color-blue .ui-widget-content .ui-state-default,.admin-color-blue .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-blue .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-blue .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-blue .redux-container-switch .cb-enable.selected,.admin-color-blue .redux-field-container .ui-buttonset .ui-state-active{background-color:#4796b3 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#5ea5bf), to(#4796b3)) !important;background-image:-moz-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-ms-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5ea5bf), color-stop(100%, #4796b3)) !important;background-image:-webkit-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-o-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-linear-gradient(top, #5ea5bf, #4796b3) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5ea5bf', endColorstr='#4796b3', GradientType=0) !important;border-color:#31687c !important;border-color:#39778e !important;-webkit-box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-blue #redux-header{background:#096484;border-color:#4796b3}.admin-color-blue #redux-header .display_header span{color:#e2ecf1}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-blue .redux-sidebar .redux-group-menu li.active,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-blue .redux-sidebar .redux-group-menu li.active a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a{color:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#db9825;background:#064054}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#4796b3}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e2ecf1;text-shadow:1px 1px #7ba8bf}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#096484;text-shadow:none}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#4796b3;text-shadow:1px 1px #2a596a}.admin-color-blue .redux-container-image_select .redux-image-select-selected img{border-color:#4796b3}.admin-color-blue #redux-footer #redux-share a{color:#4796b3}.admin-color-blue #redux-footer #redux-share a:hover{color:#2a596a}.admin-color-blue .select2-results .select2-highlighted{background:#4796b3}.admin-color-blue .select2-drop-active,.admin-color-blue .select2-container-multi.select2-container-active .select2-choices,.admin-color-blue .select2-drop.select2-drop-above.select2-drop-active,.admin-color-blue .select2-container-active .select2-choice,.admin-color-blue .select2-container-active .select2-choices,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#4796b3}.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-blue .noUi-connect{background-color:#509dba !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#69abc4), to(#509dba)) !important;background-image:-moz-linear-gradient(top, #69abc4, #509dba) !important;background-image:-ms-linear-gradient(top, #69abc4, #509dba) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #69abc4), color-stop(100%, #509dba)) !important;background-image:-webkit-linear-gradient(top, #69abc4, #509dba) !important;background-image:-o-linear-gradient(top, #69abc4, #509dba) !important;background-image:-linear-gradient(top, #69abc4, #509dba) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#69abc4', endColorstr='#509dba', GradientType=0) !important}.admin-color-coffee .button.ui-datepicker-current,.admin-color-coffee button.ui-datepicker-close{background-color:#ccad93 !important}.admin-color-coffee .ui-datepicker-buttonpane button.ui-datepicker-current{background:#ba906d !important;color:white !important;border:1px solid #835d3e !important}.admin-color-coffee .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-coffee .ui-datepicker-header{background-color:#46403c !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-active{background-color:#ccad93 !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-hover{color:#ccad93 !important}.admin-color-coffee .ui-datepicker td .ui-state-highlight{background:#c7a589 !important;border:1px solid #46403c !important;color:white !important}.admin-color-coffee .redux-container-switch .cb-disable,.admin-color-coffee .redux-container-switch .cb-enable,.admin-color-coffee .ui-state-default,.admin-color-coffee .ui-widget-content .ui-state-default,.admin-color-coffee .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-coffee .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-coffee .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-coffee .redux-container-switch .cb-enable.selected,.admin-color-coffee .redux-field-container .ui-buttonset .ui-state-active{background-color:#c7a589 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d2b7a1), to(#c7a589)) !important;background-image:-moz-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-ms-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d2b7a1), color-stop(100%, #c7a589)) !important;background-image:-webkit-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-o-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-linear-gradient(top, #d2b7a1, #c7a589) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d2b7a1', endColorstr='#c7a589', GradientType=0) !important;border-color:#ae7d55 !important;border-color:#b78b66 !important;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-coffee #redux-header{background:#46403c;border-color:#c7a589}.admin-color-coffee #redux-header .display_header span{color:#cdcbc9}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a{color:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#ba906d;background:#2b2724}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#c7a589}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cdcbc9;text-shadow:1px 1px #837f7a}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#46403c;text-shadow:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#c7a589;text-shadow:1px 1px #9f714b}.admin-color-coffee .redux-container-image_select .redux-image-select-selected img{border-color:#c7a589}.admin-color-coffee #redux-footer #redux-share a{color:#c7a589}.admin-color-coffee #redux-footer #redux-share a:hover{color:#9f714b}.admin-color-coffee .select2-results .select2-highlighted{background:#c7a589}.admin-color-coffee .select2-drop-active,.admin-color-coffee .select2-container-multi.select2-container-active .select2-choices,.admin-color-coffee .select2-drop.select2-drop-above.select2-drop-active,.admin-color-coffee .select2-container-active .select2-choice,.admin-color-coffee .select2-container-active .select2-choices,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#c7a589}.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-coffee .noUi-connect{background-color:#ccad93 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d7bfac), to(#ccad93)) !important;background-image:-moz-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-ms-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d7bfac), color-stop(100%, #ccad93)) !important;background-image:-webkit-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-o-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-linear-gradient(top, #d7bfac, #ccad93) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d7bfac', endColorstr='#ccad93', GradientType=0) !important}.admin-color-ectoplasm .button.ui-datepicker-current,.admin-color-ectoplasm button.ui-datepicker-close{background-color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker-buttonpane button.ui-datepicker-current{background:#89993a !important;color:white !important;border:1px solid #474f1e !important}.admin-color-ectoplasm .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-ectoplasm .ui-datepicker-header{background-color:#413256 !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{background-color:#a9bd4f !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-hover{color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-highlight{background:#a3b745 !important;border:1px solid #413256 !important;color:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable,.admin-color-ectoplasm .redux-container-switch .cb-enable,.admin-color-ectoplasm .ui-state-default,.admin-color-ectoplasm .ui-widget-content .ui-state-default,.admin-color-ectoplasm .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ectoplasm .redux-container-switch .cb-enable.selected,.admin-color-ectoplasm .redux-field-container .ui-buttonset .ui-state-active{background-color:#a3b745 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b0c25e), to(#a3b745)) !important;background-image:-moz-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-ms-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0c25e), color-stop(100%, #a3b745)) !important;background-image:-webkit-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-o-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-linear-gradient(top, #b0c25e, #a3b745) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b0c25e', endColorstr='#a3b745', GradientType=0) !important;border-color:#727f30 !important;border-color:#829237 !important;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ectoplasm #redux-header{background:#413256;border-color:#a3b745}.admin-color-ectoplasm #redux-header .display_header span{color:#cbc5d3}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a{color:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#89993a;background:#291f36}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#a3b745}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cbc5d3;text-shadow:1px 1px #7d6e91}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#413256;text-shadow:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#a3b745;text-shadow:1px 1px #616d29}.admin-color-ectoplasm .redux-container-image_select .redux-image-select-selected img{border-color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a{color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a:hover{color:#616d29}.admin-color-ectoplasm .select2-results .select2-highlighted{background:#a3b745}.admin-color-ectoplasm .select2-drop-active,.admin-color-ectoplasm .select2-container-multi.select2-container-active .select2-choices,.admin-color-ectoplasm .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ectoplasm .select2-container-active .select2-choice,.admin-color-ectoplasm .select2-container-active .select2-choices,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#a3b745}.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ectoplasm .noUi-connect{background-color:#a9bd4f !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b6c669), to(#a9bd4f)) !important;background-image:-moz-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-ms-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b6c669), color-stop(100%, #a9bd4f)) !important;background-image:-webkit-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-o-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-linear-gradient(top, #b6c669, #a9bd4f) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b6c669', endColorstr='#a9bd4f', GradientType=0) !important}.admin-color-midnight .button.ui-datepicker-current,.admin-color-midnight button.ui-datepicker-close{background-color:#e35950 !important}.admin-color-midnight .ui-datepicker-buttonpane button.ui-datepicker-current{background:#d92c23 !important;color:white !important;border:1px solid #811a15 !important}.admin-color-midnight .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-midnight .ui-datepicker-header{background-color:#363b3f !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-active{background-color:#e35950 !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-hover{color:#e35950 !important}.admin-color-midnight .ui-datepicker td .ui-state-highlight{background:#e14d43 !important;border:1px solid #363b3f !important;color:white !important}.admin-color-midnight .redux-container-switch .cb-disable,.admin-color-midnight .redux-container-switch .cb-enable,.admin-color-midnight .ui-state-default,.admin-color-midnight .ui-widget-content .ui-state-default,.admin-color-midnight .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-midnight .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-midnight .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-midnight .redux-container-switch .cb-enable.selected,.admin-color-midnight .redux-field-container .ui-buttonset .ui-state-active{background-color:#e14d43 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e66a62), to(#e14d43)) !important;background-image:-moz-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-ms-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e66a62), color-stop(100%, #e14d43)) !important;background-image:-webkit-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-o-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-linear-gradient(top, #e66a62, #e14d43) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e66a62', endColorstr='#e14d43', GradientType=0) !important;border-color:#ba281e !important;border-color:#d02c21 !important;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-midnight #redux-header{background:#363b3f;border-color:#e14d43}.admin-color-midnight #redux-header .display_header span{color:#c2c4c5}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a{color:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#d92c23;background:#1e2124}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#e14d43}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#c2c4c5;text-shadow:1px 1px #74787a}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#363b3f;text-shadow:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#e14d43;text-shadow:1px 1px #a4231a}.admin-color-midnight .redux-container-image_select .redux-image-select-selected img{border-color:#e14d43}.admin-color-midnight #redux-footer #redux-share a{color:#e14d43}.admin-color-midnight #redux-footer #redux-share a:hover{color:#a4231a}.admin-color-midnight .select2-results .select2-highlighted{background:#e14d43}.admin-color-midnight .select2-drop-active,.admin-color-midnight .select2-container-multi.select2-container-active .select2-choices,.admin-color-midnight .select2-drop.select2-drop-above.select2-drop-active,.admin-color-midnight .select2-container-active .select2-choice,.admin-color-midnight .select2-container-active .select2-choices,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#e14d43}.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-midnight .noUi-connect{background-color:#e35950 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e8776f), to(#e35950)) !important;background-image:-moz-linear-gradient(top, #e8776f, #e35950) !important;background-image:-ms-linear-gradient(top, #e8776f, #e35950) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e8776f), color-stop(100%, #e35950)) !important;background-image:-webkit-linear-gradient(top, #e8776f, #e35950) !important;background-image:-o-linear-gradient(top, #e8776f, #e35950) !important;background-image:-linear-gradient(top, #e8776f, #e35950) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e8776f', endColorstr='#e35950', GradientType=0) !important}.admin-color-ocean .button.ui-datepicker-current,.admin-color-ocean button.ui-datepicker-close{background-color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker-buttonpane button.ui-datepicker-current{background:#86a988 !important;color:white !important;border:1px solid #547555 !important}.admin-color-ocean .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-ocean .ui-datepicker-header{background-color:#627c83 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-active{background-color:#a7c0a9 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-hover{color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker td .ui-state-highlight{background:#9ebaa0 !important;border:1px solid #627c83 !important;color:white !important}.admin-color-ocean .redux-container-switch .cb-disable,.admin-color-ocean .redux-container-switch .cb-enable,.admin-color-ocean .ui-state-default,.admin-color-ocean .ui-widget-content .ui-state-default,.admin-color-ocean .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ocean .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ocean .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ocean .redux-container-switch .cb-enable.selected,.admin-color-ocean .redux-field-container .ui-buttonset .ui-state-active{background-color:#9ebaa0 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b3c9b4), to(#9ebaa0)) !important;background-image:-moz-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-ms-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b3c9b4), color-stop(100%, #9ebaa0)) !important;background-image:-webkit-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-o-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-linear-gradient(top, #b3c9b4, #9ebaa0) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3c9b4', endColorstr='#9ebaa0', GradientType=0) !important;border-color:#719a74 !important;border-color:#80a583 !important;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ocean #redux-header{background:#627c83;border-color:#9ebaa0}.admin-color-ocean #redux-header .display_header span{color:#d5dddf}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a{color:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#86a988;background:#4c6066}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#9ebaa0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#d5dddf;text-shadow:1px 1px #7e979d}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#627c83;text-shadow:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#9ebaa0;text-shadow:1px 1px #658d68}.admin-color-ocean .redux-container-image_select .redux-image-select-selected img{border-color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a{color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a:hover{color:#658d68}.admin-color-ocean .select2-results .select2-highlighted{background:#9ebaa0}.admin-color-ocean .select2-drop-active,.admin-color-ocean .select2-container-multi.select2-container-active .select2-choices,.admin-color-ocean .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ocean .select2-container-active .select2-choice,.admin-color-ocean .select2-container-active .select2-choices,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#9ebaa0}.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ocean .noUi-connect{background-color:#a7c0a9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#bccfbd), to(#a7c0a9)) !important;background-image:-moz-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-ms-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #bccfbd), color-stop(100%, #a7c0a9)) !important;background-image:-webkit-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-o-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-linear-gradient(top, #bccfbd, #a7c0a9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bccfbd', endColorstr='#a7c0a9', GradientType=0) !important}.admin-color-sunrise .button.ui-datepicker-current,.admin-color-sunrise button.ui-datepicker-close{background-color:#df8a48 !important}.admin-color-sunrise .ui-datepicker-buttonpane button.ui-datepicker-current{background:#cc6c23 !important;color:white !important;border:1px solid #753e14 !important}.admin-color-sunrise .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-sunrise .ui-datepicker-header{background-color:#b43c38 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{background-color:#df8a48 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-hover{color:#df8a48 !important}.admin-color-sunrise .ui-datepicker td .ui-state-highlight{background:#dd823b !important;border:1px solid #b43c38 !important;color:white !important}.admin-color-sunrise .redux-container-switch .cb-disable,.admin-color-sunrise .redux-container-switch .cb-enable,.admin-color-sunrise .ui-state-default,.admin-color-sunrise .ui-widget-content .ui-state-default,.admin-color-sunrise .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-sunrise .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-sunrise .redux-container-switch .cb-enable.selected,.admin-color-sunrise .redux-field-container .ui-buttonset .ui-state-active{background-color:#dd823b !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e29559), to(#dd823b)) !important;background-image:-moz-linear-gradient(top, #e29559, #dd823b) !important;background-image:-ms-linear-gradient(top, #e29559, #dd823b) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e29559), color-stop(100%, #dd823b)) !important;background-image:-webkit-linear-gradient(top, #e29559, #dd823b) !important;background-image:-o-linear-gradient(top, #e29559, #dd823b) !important;background-image:-linear-gradient(top, #e29559, #dd823b) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e29559', endColorstr='#dd823b', GradientType=0) !important;border-color:#ad5d1e !important;border-color:#c36922 !important;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-sunrise #redux-header{background:#b43c38;border-color:#dd823b}.admin-color-sunrise #redux-header .display_header span{color:#f0c8c6}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a{color:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#cc6c23;background:#8d2f2c}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#dd823b}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#f0c8c6;text-shadow:1px 1px #d0534d}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#b43c38;text-shadow:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#dd823b;text-shadow:1px 1px #98511a}.admin-color-sunrise .redux-container-image_select .redux-image-select-selected img{border-color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a{color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a:hover{color:#98511a}.admin-color-sunrise .select2-results .select2-highlighted{background:#dd823b}.admin-color-sunrise .select2-drop-active,.admin-color-sunrise .select2-container-multi.select2-container-active .select2-choices,.admin-color-sunrise .select2-drop.select2-drop-above.select2-drop-active,.admin-color-sunrise .select2-container-active .select2-choice,.admin-color-sunrise .select2-container-active .select2-choices,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#dd823b}.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-sunrise .noUi-connect{background-color:#df8a48 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e59e66), to(#df8a48)) !important;background-image:-moz-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-ms-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e59e66), color-stop(100%, #df8a48)) !important;background-image:-webkit-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-o-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-linear-gradient(top, #e59e66, #df8a48) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e59e66', endColorstr='#df8a48', GradientType=0) !important}@media screen and (max-width: 600px){.redux-group-tab-link-a{min-height:15px}.redux-group-tab-link-a span{padding:11px 12px;color:#555;-webkit-transition:all 0.3s;-moz-transition:all 0.3s;transition:all 0.3s;text-shadow:none !important}.redux-group-tab-link-a span:hover{background:#e5e5e5}}@media screen and (max-width: 782px){#redux-footer #redux-share{line-height:38px;font-size:18px}.sticky-save-warn .redux-save-warn{right:13px;top:46px}.redux-container .expand_options{margin-top:5px}.redux-action_bar input{margin-bottom:0 !important}}@media screen and (max-width: 600px){#redux-footer #redux-share,.redux-hint-qtip{display:none}.redux-container .redux-action_bar{float:none}}.redux-sidebar .icon-large,.redux-main .icon-large{background-image:inherit !important;width:inherit;height:inherit}.redux-main dd,.redux-main li,.redux-sidebar li{margin-bottom:0 !important}.fully-expanded .redux-sidebar{margin-left:-500px}.fully-expanded .redux-main{margin-left:0}.fully-expanded .redux-group-tab{display:block}@media screen and (max-width: 640px){#redux-defaults-section{display:none}}@media screen and (max-width: 730px){#redux-share{display:none}}@media screen and (max-width: 730px){#redux-defaults-section2{display:none}#redux-share{display:none}}@media screen and (max-width: 600px){.form-table>tbody>tr>th{padding-bottom:0 !important}.redux_field_th{padding-top:0;padding-bottom:0}.redux-main .redux-field-container{padding-top:0;padding-bottom:0}.redux-main .subsection a{min-height:15px}}@media screen and (min-width: 601px) and (max-width: 782px){.redux-container .sticky-save-warn .redux-save-warn{top:47px !important;right:13px !important}}@media screen and (max-width: 782px){.redux-main .form-table-section-indented input[type=text]{width:95% !important}.redux-main .redux-container-sortable input[type=text]{width:80%;display:initial}.redux-main .redux-typography-container .input_wrapper input.mini{font-size:16px !important;height:40px !important;padding:7px 10px !important;line-height:24px !important}.redux-main .redux-typography-container .picker-wrapper label{margin-top:16px !important}.redux-main .input-append{height:50px !important}.redux-main .input-append .add-on{font-size:16px;line-height:24px !important;padding:7px;height:32px !important;float:right;margin-top:-40px}.redux-main .redux-hint-qtip{float:left !important}.redux-main .redux-action_bar .button{margin-top:-1px}}@media screen and (max-width: 600px){.sticky-save-warn .redux-save-warn{top:0 !important;right:14px !important}}@media screen and (max-width: 570px){.redux-main .redux-container-sortable .checkbox-container{width:85%;padding-bottom:5px}.redux-main .redux-container-sortable .checkbox-container label{display:initial}}#redux-header{position:relative}.redux-main{position:relative}.redux-main #redux-sticky{min-height:32px;margin-left:-20px;margin-right:-20px;margin-top:-10px;margin-bottom:8px}.redux-main #redux-sticky #info_bar{height:32px}.redux-main #redux-sticky #info_bar .expand_options{margin-top:4px}.redux-main .redux_field_search{top:50px;right:5px}.redux-main #redux-footer-sticky{margin-left:-20px;margin-right:-20px;margin-bottom:-10px}.redux-qtip{z-index:999999 !important}.redux-main pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}
|
1 |
+
.spinner{visibility:hidden;display:block}.spinner.is-active{visibility:visible}.redux-main .description{margin-top:7px}.form-table>tbody>tr>th{width:30%}.redux-container{background-color:#f5f5f5;background-repeat:repeat-x;background-image:-moz-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f2f2), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-ms-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-o-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#eeeeee', GradientType=0);background-image:-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);border:1px solid #dedede;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04);-moz-box-shadow:0 1px 5px rgba(0,0,0,0.4);margin-top:5px;overflow:hidden}.redux-container a:focus{box-shadow:none}.redux-container #redux-header,.redux-container #redux-footer{text-align:right;padding:6px 10px}.redux-container #redux-header{background:#f1f1f1;border-bottom:3px solid blue}.redux-container #redux-header .display_header{float:left;margin:20px 10px}.redux-container #redux-header .display_header h2{display:inline-block;font-style:normal;padding-right:5px}.redux-container #redux-header .display_header .redux-dev-mode-notice-container{position:absolute;top:67px;left:20px;bottom:auto;width:auto}.redux-container #redux-header .display_header span{color:#888}.redux-container #redux-header .display_header span.redux-dev-mode-notice{background-color:#f0ad4e;display:inline;padding:.2em .5em .2em;font-weight:700;line-height:1;color:#fff !important;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.redux-container #redux-header .icon32{float:right;margin:16px 16px 0}.redux-container #redux-footer{border-top:1px solid #E7E7E7;z-index:999}.redux-container #redux-footer #redux-share{float:left;line-height:28px;font-size:15px}.redux-container #redux-footer #redux-share a{text-decoration:none;margin-right:10px}.redux-container #redux-footer #redux-share a img{margin-bottom:-3px}.redux-container .notice-green{margin:0;border-bottom:1px solid #E7E7E7;background-color:#DFF0D8;color:#468847;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-blue{margin:0;border-bottom:1px solid #BCE8F1;background-color:#D9EDF7;color:#3A87AD;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-yellow{margin:0;border-bottom:1px solid #E7E7E7;background-color:#FCF8E3;color:#C09853;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-red,.redux-container .redux-field-errors{margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .redux-field-error input,.redux-container .redux-field-error textarea,.redux-container .redux-field-error checkbox{background-color:#FFF6F6;color:#A00}.redux-container .redux-field-warning input,.redux-container .redux-field-warning textarea,.redux-container .redux-field-warning checkbox{background-color:#fcf8e3;color:#444}.redux-container .redux-field-errors,.redux-container .redux-field-warnings,.redux-container .redux-save-warn{display:none}.redux-container .sticky-save-warn{min-height:76px}.redux-container .sticky-save-warn .redux-save-warn{position:fixed;top:32px;right:21px;left:183px;opacity:1;z-index:9999}.redux-container #info_bar{background:#f3f3f3;border-bottom:1px solid #dedede;padding:6px 10px 6px 6px;text-align:right;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-group-tab{display:none;margin-bottom:15px}.redux-container .redux-group-tab .redux-theme-data{padding:20px 0;border-top:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-theme-data.theme-description{padding:10px 0;border-width:0}.redux-container .redux-group-tab .redux-theme-data.theme-uri,.redux-container .redux-group-tab .redux-theme-data.theme-author,.redux-container .redux-group-tab .redux-theme-data.theme-version{padding:0;border-width:0}.redux-container .redux-group-tab h3{margin-top:0;line-height:2em;border-bottom:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-section-desc{margin-bottom:15px;color:#666}.redux-container .redux-action_bar{float:right}.redux-container .redux-action_bar .spinner{float:left;margin-top:4px}.redux-container .redux-ajax-loading{display:none;background:red url(data:image/gif;base64,R0lGODlhEAAQAPUAAIiIiIqKio2NjZSUlJqamp6enqKioqSkpK+vr7i4uL+/v8PDw8XFxcnJyc/Pz9HR0dTU1NjY2Nzc3OLi4ubm5unp6ezs7PPz88vLy83NzdDQ0NXV1d3d3eHh4bu7u8zMzOvr6+3t7ZiYmNbW1sDAwMTExNra2s7OztPT09vb2+Xl5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAAoA/wAsAAAAABAAEAAABXDgJY6XZZEoOTnOlI5WdUFNA5UnSR3FJNUSieFAIUUEgcdl4noEBBGSZaHIiSqKhTX2GhVFiQGjuxgkSoYAoosAGE6RhKQrUURHlS+pItMVCHMjEgQ9JBJISg+JT3ciFg4NFkcCNw0OViiDgF0oTC8hACH5BAAKAP8ALAAAAAAQABAAAAVx4CWOZGle1qJYp2hV1xYE29V1JXUYHWUcnQgGwyFFBAENiqUZ1kapFamTyeBcsNOLMkoMGC3GIIEyBBAtRMDAiiSKp04iQqpwc9kRpUCAizgEBVciEQNJFxpKGgECdFAYYBsCAjUMGS0XgAODmDacIyEAIfkEAAoA/wAsAAAAABAAEAAABnbAi3BILBovIMUidBSGQJdNIKBBMomUg6FDMRgoHcOBQowIqNaLJiCIEEMLxdWpnIfITRAHnxgwjiEfDR8UIQYBCEcgDYwdUR6ORxEfG3MgeFiFRB0FBBxEHAQFkUJmaBofamxuRB9/GwICGxeMTRehnrabpERBACH5BAAKAP8ALAAAAAAQABAAAAZ9wItwSCwaL5aFwnIUWiqXUSAwulSYRMrB0KEYDJSO4UAhRgQBDZLpCAgixOSSWFEssEho81IWJgYMTQwDCUgGAQhNCAEGTCMJHU0dCXBDFX1DFhwdeHwFIhxmGBihQxEDaRcOGhYao1WZGIFnAiMUDg6YRR0ioE57Fx2RRkEAIfkEAAoA/wAsAAAAABAAEAAABXLgJY5kaV7WolinaLGQEEBXxZLUUUyUYVATw4FCisg0NZYmIIiQUosKqaJY3FDS1oUoSgwYrcUggTIAEC1EwMCKJCatSYI2qnBx2dGkQOCQOAQFdxdGARoVGhCITE4kGBgWEI8QFgwYWhGTWiMWERFXIyEAIfkEAAoA/wAsAAAAABAAEAAABn/Ai3BILBovloXCchRaKpdRIDC6VJhEysHQoRgMlI7hQCFGBAENkukICCLE5JJYUSywSGjzUhYmBgxNDAMJSAYBCE0IAAZMEQkdTRwKVUMcHHhCFXpDERgYcJYEBZFDI58aFhoOFxpuoUIUGhoUZwJVGA6ZaxccBAQce0QdpUVBACH5BAAKAP8ALAAAAAAQABAAAAZ8wItwSCwaLyEFKXQUhioXSCAAuVSYRMrB0KEYDJSO4UAhmgQBDZKpCQhMxFBJgRVWlFkOtElhUj4NH3VEJQMJFx0NintFCAEGISEQH3BHHR5VThVlRRSMQh0FBBxEHAQFnEJnaRcfHxdtb0WKIWcCVSUNTYgEo7tEHR1HQQAh+QQACgD/ACwAAAAAEAAQAAAGdcCLcEgsGi8hhSJ0FHY6l1EgMLqAmEROo5HqGAwqL5g42qKsoAsqIEgRVacTdAhSLLBI1bWpwiYGDE0MAwlIBgEITQgBBkwjCRxNHQlVdCpGekUqBQSRQxwEBZdDKQIBZ3FqbG5EDYEjpikhW3hFoJ1NRU9HQQA7) no-repeat;width:16px;height:16px;margin:3px 4px 0;float:right}.redux-container #redux-intro-text{background:#f3f3f3;border-bottom:1px solid #dedede;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc;padding:3px;padding:10px 10px}.redux-container #redux-intro-text p{margin:0;font-family:"Lucida Grande", Sans-serif;color:#888}.redux-container .expand_options{cursor:pointer;display:block;height:22px;width:21px;float:left;font-size:0;text-indent:-9999px;margin:1px 0 0 5px;border:1px solid #bbb;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -26px}.redux-container .expand_options.expanded{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -1px}.redux-container .expand_options:hover{border-color:#888}.redux-container .sticky-footer-fixed{background:#f3f3f3;border-top:1px solid #dedede !important;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-sidebar,.redux-container .redux-main{min-height:300px}.no-js{border:1px solid #ffbaba;margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-main{background:#FCFCFC;margin-left:201px;border-left:1px solid #D8D8D8;padding:10px 20px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #FFF;box-shadow:inset 0 1px 0 #FFF;position:relative}.redux-main #redux_ajax_overlay{position:absolute;top:0;left:0;right:0;bottom:0;-moz-opacity:0.10;-khtml-opacity:0.10;opacity:0.10;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10);filter:alpha(opacity=10);background:#000;z-index:200;display:none}.redux-main .form-table.no-border{border-top:none}.redux-main .form-table tr{border-bottom:1px solid #E7E7E7}.redux-main .form-table tr:last-child{border-bottom:none !important}.redux-main .form-table tr th,.redux-main .form-table tr td{color:#333}.redux-main .form-table tr td table.mceLayout,.redux-main .form-table tr td table.mceLayout tr,.redux-main .form-table tr td table.mceLayout tr td{padding:0;border-width:0}.redux-main .form-table tr td .redux-th-warning{font-size:1em;color:#C09853;font-weight:normal;display:block;margin-top:10px}.redux-main .form-table tr td .redux-field-warning{border-color:#C09853;margin-top:10px}.redux-main .form-table tr td .redux-th-error{font-size:1em;color:#B94A48;font-weight:normal;display:block;margin-top:10px}.redux-main input.large-text{width:100%}.redux-main .hide{display:none}.redux-main .redux-field-container{padding:20px 0}.redux-main .mini,.redux-main input[type=text].mini{width:60px;text-align:center}.redux-main input{line-height:19px}.redux-main img{max-width:100%;height:auto;width:auto !important}.redux-main .select2-default{width:auto !important}.redux-main .showDefaults{display:block;font-weight:normal;font-size:.8em;color:#888}.redux-main span.description{display:block;font-style:normal;font-weight:400}.redux-main #redux-system-info textarea{min-height:730px;width:100%}.redux-main .field-desc{clear:both;font-size:13px}.redux-main .data-full li{width:100%}.redux-main .data-half li{width:50%;float:left}.redux-main .data-third li{width:33.3%;float:left}.redux-main .data-quarter li{width:25%;float:left}.redux-main .ui-helper-hidden-accessible{top:inherit}.redux-main .form-table{clear:none;margin-top:0px !important}.redux-main .form-table tr:first-child th,.redux-main .form-table tr:first-child td{padding-top:0}.redux-main .input-append input{border-right:0;margin-bottom:0;border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0;float:left;margin-top:0;display:block}.redux-main .input-append .add-on{border-top-right-radius:3px;border-bottom-right-radius:3px;margin-left:-2px;padding-top:4px !important;padding-bottom:2px !important}.redux-main .input-prepend input{border-left:0;margin-bottom:0;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0;padding-top:2px;padding-bottom:5px;float:left;margin-top:0;display:block}.redux-main .input-prepend .add-on{border-top-left-radius:3px;border-bottom-left-radius:3px;float:left}.redux-main .input-append{margin-right:10px;font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-main .input-append .add-on,.redux-main .input-prepend .add-on{width:auto;display:inline-block;min-width:16px;padding:3px 4px;font-size:12px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #cccccc}.redux-main .input-prepend{font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-sidebar{width:202px;float:left}.redux-sidebar .redux-group-menu{margin-top:0 !important}.redux-sidebar .redux-group-menu li{margin-top:0}.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{background:#FCFCFC;color:#269ad6;width:184px;opacity:1}.redux-sidebar .redux-group-menu li.active a li a{background:#333;padding-left:5px}.redux-sidebar .redux-group-menu li.divide{padding:0;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9}.redux-sidebar .redux-group-menu li a:first-child{border-top:none}.redux-sidebar .redux-group-menu li a{display:block;padding:10px 4px 10px 14px;background:#e0e0e0;background:transparent;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9;opacity:0.7;color:#555;font-weight:bold;text-decoration:none;-webkit-transition:none;transition:none}.redux-sidebar .redux-group-menu li a.custom-tab{background:#f6f6f6}.redux-sidebar .redux-group-menu li a img{width:16px;height:16px;position:absolute;left:15px}.redux-sidebar .redux-group-menu li a:hover{background:#e5e5e5;color:#777;opacity:1}.redux-sidebar .redux-menu-warning,.redux-sidebar .redux-menu-error,.redux-sidebar .hasSubSections .extraIconSubsections{display:inline-block;float:right;padding:6px 7px 4px 7px;margin-left:4px;font-family:sans-serif;font-size:9px;font-weight:bold;line-height:9px;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent}.redux-sidebar .redux-menu-warning i,.redux-sidebar .redux-menu-error i,.redux-sidebar .hasSubSections .extraIconSubsections i{margin-left:-3px;margin-top:-3px}.redux-sidebar .redux-menu-error{background-color:#b94a48;color:#f2dede}.redux-sidebar .redux-menu-warning{background-color:#C09853;color:#FCF8E3}.redux-sidebar ul .subsection{display:none}.redux-sidebar .redux-group-tab-link-a{position:relative;outline:0}.redux-sidebar .redux-group-tab-link-a i{vertical-align:middle;font-size:1.35em;position:absolute}.redux-sidebar .redux-group-tab-link-a span{display:block}.redux-sidebar .redux-group-tab-link-a span.group_title{padding-left:30px}.redux-sidebar .redux-group-tab-link-li a.hasError span.group_title{padding-right:25px}.redux-sidebar #redux-header{text-align:center}.redux-sidebar #redux-header .display_header{float:none}.form-table th,.form-table td{margin:0;padding:0;width:auto}.redux_field_th{font-weight:bold;padding:20px 10px 20px 0px;display:block}.redux_field_th span:first-child{font-weight:normal;display:block;color:#666}.farb-popup-wrapper{position:relative;display:block}.farb-popup{position:absolute;left:40px;top:40px;background-color:white;border:1px solid #222;padding:5px;z-index:100}#ui-datepicker-div{display:none}.mp6 .icon-themes{display:none}.mp6 .redux-container #info_bar{padding:6px 10px 6px 6px}.mp6 .redux-container #info_bar a{margin-top:2px}.redux-timer{text-align:center;font-size:10px;color:#888}.wrap{margin-top:0}@media screen and (max-width: 600px){.redux-sidebar{width:44px}.redux-sidebar .extraIconSubsections{display:none !important}.redux-sidebar .redux-group-menu li a,.redux-sidebar .redux-group-menu li a:hover,.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{width:auto}.redux-sidebar .redux-group-tab-link-a{position:relative}.redux-sidebar .redux-group-tab-link-a i{position:inherit}.redux-sidebar .redux-group-tab-link-a span{display:none;position:absolute;top:0;left:44px;padding:12px;width:200px;background:#eeeeee;border:1px solid #ccc;-webkit-box-shadow:2px 2px 8px rgba(0,0,0,0.2);-moz-box-shadow:2px 2px 8px rgba(0,0,0,0.2);box-shadow:2px 2px 8px rgba(0,0,0,0.2);border-width:1px 1px 1px 0px;z-index:3}.redux-sidebar .redux-group-tab-link-a:hover>span{display:block}.redux-main{margin-left:43px;width:auto;max-width:100%}table.form-table,.form-table>thead,.form-table>tbody,.form-table>tbody>tr>th,.form-table>tbody>tr>td,.form-table>tbody>tr{display:block;width:100% !important;padding:0px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}}@media screen and (max-width: 782px){.form-table>tbody>tr>th{width:100%}.redux_field_th{padding-bottom:0}.mp6 .redux-container #info_bar{height:auto;padding-bottom:1px}.mp6 .redux-container #info_bar a{margin-top:5px}.redux-container-switch label{padding:5px 10px !important}.redux-container-button_set label{padding:12px 10px}.redux-container #redux-footer #redux-share{line-height:34px}}pre{overflow:hidden}#redux-header h2{color:#fff}.admin-color-fresh .button.ui-datepicker-current,.admin-color-fresh button.ui-datepicker-close,.wp-customizer .button.ui-datepicker-current,.wp-customizer button.ui-datepicker-close{background-color:#007db9 !important}.admin-color-fresh .ui-datepicker-buttonpane button.ui-datepicker-current,.wp-customizer .ui-datepicker-buttonpane button.ui-datepicker-current{background:#1e8cbe !important;color:white !important;border:1px solid #104b66 !important}.admin-color-fresh .ui-datepicker-header .ui-icon,.wp-customizer .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-fresh .ui-datepicker-header,.wp-customizer .ui-datepicker-header{background-color:#23282d !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{background-color:#007db9 !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-hover,.wp-customizer .ui-datepicker td .ui-state-hover{color:#007db9 !important}.admin-color-fresh .ui-datepicker td .ui-state-highlight,.wp-customizer .ui-datepicker td .ui-state-highlight{background:#0073aa !important;border:1px solid #23282d !important;color:white !important}.admin-color-fresh .redux-container-switch .cb-disable,.admin-color-fresh .redux-container-switch .cb-enable,.admin-color-fresh .ui-state-default,.admin-color-fresh .ui-widget-content .ui-state-default,.admin-color-fresh .ui-widget-header .ui-state-default,.wp-customizer .redux-container-switch .cb-disable,.wp-customizer .redux-container-switch .cb-enable,.wp-customizer .ui-state-default,.wp-customizer .ui-widget-content .ui-state-default,.wp-customizer .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-fresh .redux-container-switch .cb-disable.selected,.wp-customizer .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-fresh .redux-container-switch .cb-enable.selected,.admin-color-fresh .redux-field-container .ui-buttonset .ui-state-active,.wp-customizer .redux-container-switch .cb-enable.selected,.wp-customizer .redux-field-container .ui-buttonset .ui-state-active{background-color:#0073aa !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#008bce), to(#0073aa)) !important;background-image:-moz-linear-gradient(top, #008bce, #0073aa) !important;background-image:-ms-linear-gradient(top, #008bce, #0073aa) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #008bce), color-stop(100%, #0073aa)) !important;background-image:-webkit-linear-gradient(top, #008bce, #0073aa) !important;background-image:-o-linear-gradient(top, #008bce, #0073aa) !important;background-image:-linear-gradient(top, #008bce, #0073aa) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#008bce', endColorstr='#0073aa', GradientType=0) !important;border-color:#003f5d !important;border-color:#005077 !important;-webkit-box-shadow:inset 0 1px 0 #00a7f6,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #00a7f6,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-fresh #redux-header,.wp-customizer #redux-header{background:#23282d;border-color:#0073aa}.admin-color-fresh #redux-header .display_header span,.wp-customizer #redux-header .display_header span{color:#a0a5aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild,.wp-customizer .redux-sidebar .redux-group-menu li.active,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a,.wp-customizer .redux-sidebar .redux-group-menu li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a{color:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#1e8cbe;background:#0d0e10}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#0073aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#a0a5aa;text-shadow:1px 1px #54595d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#23282d;text-shadow:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#0073aa;text-shadow:1px 1px #002e44}.admin-color-fresh .redux-container-image_select .redux-image-select-selected img,.wp-customizer .redux-container-image_select .redux-image-select-selected img{border-color:#0073aa}.admin-color-fresh #redux-footer #redux-share a,.wp-customizer #redux-footer #redux-share a{color:#0073aa}.admin-color-fresh #redux-footer #redux-share a:hover,.wp-customizer #redux-footer #redux-share a:hover{color:#002e44}.admin-color-fresh .select2-results .select2-highlighted,.wp-customizer .select2-results .select2-highlighted{background:#0073aa}.admin-color-fresh .select2-drop-active,.admin-color-fresh .select2-container-multi.select2-container-active .select2-choices,.admin-color-fresh .select2-drop.select2-drop-above.select2-drop-active,.admin-color-fresh .select2-container-active .select2-choice,.admin-color-fresh .select2-container-active .select2-choices,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-drop-active,.wp-customizer .select2-container-multi.select2-container-active .select2-choices,.wp-customizer .select2-drop.select2-drop-above.select2-drop-active,.wp-customizer .select2-container-active .select2-choice,.wp-customizer .select2-container-active .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#0073aa}.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-fresh .noUi-connect,.wp-customizer .noUi-connect{background-color:#007db9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#0095dd), to(#007db9)) !important;background-image:-moz-linear-gradient(top, #0095dd, #007db9) !important;background-image:-ms-linear-gradient(top, #0095dd, #007db9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #0095dd), color-stop(100%, #007db9)) !important;background-image:-webkit-linear-gradient(top, #0095dd, #007db9) !important;background-image:-o-linear-gradient(top, #0095dd, #007db9) !important;background-image:-linear-gradient(top, #0095dd, #007db9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0095dd', endColorstr='#007db9', GradientType=0) !important}.admin-color-light .button.ui-datepicker-current,.admin-color-light button.ui-datepicker-close{background-color:#04b0db !important}.admin-color-light .ui-datepicker-buttonpane button.ui-datepicker-current{background:#0384a4 !important;color:white !important;border:1px solid #013340 !important}.admin-color-light .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-light .ui-datepicker-header{background-color:#888 !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-active{background-color:#04b0db !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-hover{color:#04b0db !important}.admin-color-light .ui-datepicker td .ui-state-highlight{background:#04a4cc !important;border:1px solid #888 !important;color:white !important}.admin-color-light .redux-container-switch .cb-disable,.admin-color-light .redux-container-switch .cb-enable,.admin-color-light .ui-state-default,.admin-color-light .ui-widget-content .ui-state-default,.admin-color-light .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-light .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-light .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-light .redux-container-switch .cb-enable.selected,.admin-color-light .redux-field-container .ui-buttonset .ui-state-active{background-color:#04a4cc !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#05c0ef), to(#04a4cc)) !important;background-image:-moz-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-ms-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #05c0ef), color-stop(100%, #04a4cc)) !important;background-image:-webkit-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-o-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-linear-gradient(top, #05c0ef, #04a4cc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#05c0ef', endColorstr='#04a4cc', GradientType=0) !important;border-color:#036881 !important;border-color:#037c9a !important;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-light #redux-header{background:#888;border-color:#04a4cc}.admin-color-light #redux-header .display_header span{color:#e6e6e6}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-light .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-light .redux-sidebar .redux-group-menu li.active,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-light .redux-sidebar .redux-group-menu li.active a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a{color:#888}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#0384a4;background:#6f6f6f}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#04a4cc}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#888}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e6e6e6;text-shadow:1px 1px #9a9a9a}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#888;text-shadow:none}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#04a4cc;text-shadow:1px 1px #025468}.admin-color-light .redux-container-image_select .redux-image-select-selected img{border-color:#04a4cc}.admin-color-light #redux-footer #redux-share a{color:#04a4cc}.admin-color-light #redux-footer #redux-share a:hover{color:#025468}.admin-color-light .select2-results .select2-highlighted{background:#04a4cc}.admin-color-light .select2-drop-active,.admin-color-light .select2-container-multi.select2-container-active .select2-choices,.admin-color-light .select2-drop.select2-drop-above.select2-drop-active,.admin-color-light .select2-container-active .select2-choice,.admin-color-light .select2-container-active .select2-choices,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#04a4cc}.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-light .noUi-connect{background-color:#04b0db !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#09cafa), to(#04b0db)) !important;background-image:-moz-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-ms-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #09cafa), color-stop(100%, #04b0db)) !important;background-image:-webkit-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-o-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-linear-gradient(top, #09cafa, #04b0db) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#09cafa', endColorstr='#04b0db', GradientType=0) !important}.admin-color-blue .button.ui-datepicker-current,.admin-color-blue button.ui-datepicker-close{background-color:#509dba !important}.admin-color-blue .ui-datepicker-buttonpane button.ui-datepicker-current{background:#db9825 !important;color:white !important;border:1px solid #845c16 !important}.admin-color-blue .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-blue .ui-datepicker-header{background-color:#096484 !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-active{background-color:#509dba !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-hover{color:#509dba !important}.admin-color-blue .ui-datepicker td .ui-state-highlight{background:#4796b3 !important;border:1px solid #096484 !important;color:white !important}.admin-color-blue .redux-container-switch .cb-disable,.admin-color-blue .redux-container-switch .cb-enable,.admin-color-blue .ui-state-default,.admin-color-blue .ui-widget-content .ui-state-default,.admin-color-blue .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-blue .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-blue .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-blue .redux-container-switch .cb-enable.selected,.admin-color-blue .redux-field-container .ui-buttonset .ui-state-active{background-color:#4796b3 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#5ea5bf), to(#4796b3)) !important;background-image:-moz-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-ms-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5ea5bf), color-stop(100%, #4796b3)) !important;background-image:-webkit-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-o-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-linear-gradient(top, #5ea5bf, #4796b3) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5ea5bf', endColorstr='#4796b3', GradientType=0) !important;border-color:#31687c !important;border-color:#39778e !important;-webkit-box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-blue #redux-header{background:#096484;border-color:#4796b3}.admin-color-blue #redux-header .display_header span{color:#e2ecf1}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-blue .redux-sidebar .redux-group-menu li.active,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-blue .redux-sidebar .redux-group-menu li.active a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a{color:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#db9825;background:#064054}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#4796b3}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e2ecf1;text-shadow:1px 1px #7ba8bf}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#096484;text-shadow:none}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#4796b3;text-shadow:1px 1px #2a596a}.admin-color-blue .redux-container-image_select .redux-image-select-selected img{border-color:#4796b3}.admin-color-blue #redux-footer #redux-share a{color:#4796b3}.admin-color-blue #redux-footer #redux-share a:hover{color:#2a596a}.admin-color-blue .select2-results .select2-highlighted{background:#4796b3}.admin-color-blue .select2-drop-active,.admin-color-blue .select2-container-multi.select2-container-active .select2-choices,.admin-color-blue .select2-drop.select2-drop-above.select2-drop-active,.admin-color-blue .select2-container-active .select2-choice,.admin-color-blue .select2-container-active .select2-choices,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#4796b3}.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-blue .noUi-connect{background-color:#509dba !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#69abc4), to(#509dba)) !important;background-image:-moz-linear-gradient(top, #69abc4, #509dba) !important;background-image:-ms-linear-gradient(top, #69abc4, #509dba) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #69abc4), color-stop(100%, #509dba)) !important;background-image:-webkit-linear-gradient(top, #69abc4, #509dba) !important;background-image:-o-linear-gradient(top, #69abc4, #509dba) !important;background-image:-linear-gradient(top, #69abc4, #509dba) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#69abc4', endColorstr='#509dba', GradientType=0) !important}.admin-color-coffee .button.ui-datepicker-current,.admin-color-coffee button.ui-datepicker-close{background-color:#ccad93 !important}.admin-color-coffee .ui-datepicker-buttonpane button.ui-datepicker-current{background:#ba906d !important;color:white !important;border:1px solid #835d3e !important}.admin-color-coffee .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-coffee .ui-datepicker-header{background-color:#46403c !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-active{background-color:#ccad93 !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-hover{color:#ccad93 !important}.admin-color-coffee .ui-datepicker td .ui-state-highlight{background:#c7a589 !important;border:1px solid #46403c !important;color:white !important}.admin-color-coffee .redux-container-switch .cb-disable,.admin-color-coffee .redux-container-switch .cb-enable,.admin-color-coffee .ui-state-default,.admin-color-coffee .ui-widget-content .ui-state-default,.admin-color-coffee .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-coffee .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-coffee .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-coffee .redux-container-switch .cb-enable.selected,.admin-color-coffee .redux-field-container .ui-buttonset .ui-state-active{background-color:#c7a589 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d2b7a1), to(#c7a589)) !important;background-image:-moz-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-ms-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d2b7a1), color-stop(100%, #c7a589)) !important;background-image:-webkit-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-o-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-linear-gradient(top, #d2b7a1, #c7a589) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d2b7a1', endColorstr='#c7a589', GradientType=0) !important;border-color:#ae7d55 !important;border-color:#b78b66 !important;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-coffee #redux-header{background:#46403c;border-color:#c7a589}.admin-color-coffee #redux-header .display_header span{color:#cdcbc9}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a{color:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#ba906d;background:#2b2724}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#c7a589}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cdcbc9;text-shadow:1px 1px #837e7a}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#46403c;text-shadow:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#c7a589;text-shadow:1px 1px #9f714b}.admin-color-coffee .redux-container-image_select .redux-image-select-selected img{border-color:#c7a589}.admin-color-coffee #redux-footer #redux-share a{color:#c7a589}.admin-color-coffee #redux-footer #redux-share a:hover{color:#9f714b}.admin-color-coffee .select2-results .select2-highlighted{background:#c7a589}.admin-color-coffee .select2-drop-active,.admin-color-coffee .select2-container-multi.select2-container-active .select2-choices,.admin-color-coffee .select2-drop.select2-drop-above.select2-drop-active,.admin-color-coffee .select2-container-active .select2-choice,.admin-color-coffee .select2-container-active .select2-choices,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#c7a589}.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-coffee .noUi-connect{background-color:#ccad93 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d7bfac), to(#ccad93)) !important;background-image:-moz-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-ms-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d7bfac), color-stop(100%, #ccad93)) !important;background-image:-webkit-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-o-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-linear-gradient(top, #d7bfac, #ccad93) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d7bfac', endColorstr='#ccad93', GradientType=0) !important}.admin-color-ectoplasm .button.ui-datepicker-current,.admin-color-ectoplasm button.ui-datepicker-close{background-color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker-buttonpane button.ui-datepicker-current{background:#89993a !important;color:white !important;border:1px solid #474f1e !important}.admin-color-ectoplasm .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-ectoplasm .ui-datepicker-header{background-color:#413256 !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{background-color:#a9bd4f !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-hover{color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-highlight{background:#a3b745 !important;border:1px solid #413256 !important;color:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable,.admin-color-ectoplasm .redux-container-switch .cb-enable,.admin-color-ectoplasm .ui-state-default,.admin-color-ectoplasm .ui-widget-content .ui-state-default,.admin-color-ectoplasm .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ectoplasm .redux-container-switch .cb-enable.selected,.admin-color-ectoplasm .redux-field-container .ui-buttonset .ui-state-active{background-color:#a3b745 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b0c25e), to(#a3b745)) !important;background-image:-moz-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-ms-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0c25e), color-stop(100%, #a3b745)) !important;background-image:-webkit-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-o-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-linear-gradient(top, #b0c25e, #a3b745) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b0c25e', endColorstr='#a3b745', GradientType=0) !important;border-color:#727f30 !important;border-color:#829237 !important;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ectoplasm #redux-header{background:#413256;border-color:#a3b745}.admin-color-ectoplasm #redux-header .display_header span{color:#cbc5d3}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a{color:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#89993a;background:#291f36}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#a3b745}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cbc5d3;text-shadow:1px 1px #7d6e91}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#413256;text-shadow:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#a3b745;text-shadow:1px 1px #616d29}.admin-color-ectoplasm .redux-container-image_select .redux-image-select-selected img{border-color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a{color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a:hover{color:#616d29}.admin-color-ectoplasm .select2-results .select2-highlighted{background:#a3b745}.admin-color-ectoplasm .select2-drop-active,.admin-color-ectoplasm .select2-container-multi.select2-container-active .select2-choices,.admin-color-ectoplasm .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ectoplasm .select2-container-active .select2-choice,.admin-color-ectoplasm .select2-container-active .select2-choices,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#a3b745}.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ectoplasm .noUi-connect{background-color:#a9bd4f !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b6c669), to(#a9bd4f)) !important;background-image:-moz-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-ms-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b6c669), color-stop(100%, #a9bd4f)) !important;background-image:-webkit-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-o-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-linear-gradient(top, #b6c669, #a9bd4f) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b6c669', endColorstr='#a9bd4f', GradientType=0) !important}.admin-color-midnight .button.ui-datepicker-current,.admin-color-midnight button.ui-datepicker-close{background-color:#e35950 !important}.admin-color-midnight .ui-datepicker-buttonpane button.ui-datepicker-current{background:#d92c23 !important;color:white !important;border:1px solid #811a15 !important}.admin-color-midnight .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-midnight .ui-datepicker-header{background-color:#363b3f !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-active{background-color:#e35950 !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-hover{color:#e35950 !important}.admin-color-midnight .ui-datepicker td .ui-state-highlight{background:#e14d43 !important;border:1px solid #363b3f !important;color:white !important}.admin-color-midnight .redux-container-switch .cb-disable,.admin-color-midnight .redux-container-switch .cb-enable,.admin-color-midnight .ui-state-default,.admin-color-midnight .ui-widget-content .ui-state-default,.admin-color-midnight .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-midnight .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-midnight .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-midnight .redux-container-switch .cb-enable.selected,.admin-color-midnight .redux-field-container .ui-buttonset .ui-state-active{background-color:#e14d43 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e66a62), to(#e14d43)) !important;background-image:-moz-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-ms-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e66a62), color-stop(100%, #e14d43)) !important;background-image:-webkit-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-o-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-linear-gradient(top, #e66a62, #e14d43) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e66a62', endColorstr='#e14d43', GradientType=0) !important;border-color:#ba281e !important;border-color:#d02c21 !important;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-midnight #redux-header{background:#363b3f;border-color:#e14d43}.admin-color-midnight #redux-header .display_header span{color:#c2c4c5}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a{color:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#d92c23;background:#1e2124}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#e14d43}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#c2c4c5;text-shadow:1px 1px #74787a}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#363b3f;text-shadow:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#e14d43;text-shadow:1px 1px #a4231a}.admin-color-midnight .redux-container-image_select .redux-image-select-selected img{border-color:#e14d43}.admin-color-midnight #redux-footer #redux-share a{color:#e14d43}.admin-color-midnight #redux-footer #redux-share a:hover{color:#a4231a}.admin-color-midnight .select2-results .select2-highlighted{background:#e14d43}.admin-color-midnight .select2-drop-active,.admin-color-midnight .select2-container-multi.select2-container-active .select2-choices,.admin-color-midnight .select2-drop.select2-drop-above.select2-drop-active,.admin-color-midnight .select2-container-active .select2-choice,.admin-color-midnight .select2-container-active .select2-choices,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#e14d43}.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-midnight .noUi-connect{background-color:#e35950 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e8776f), to(#e35950)) !important;background-image:-moz-linear-gradient(top, #e8776f, #e35950) !important;background-image:-ms-linear-gradient(top, #e8776f, #e35950) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e8776f), color-stop(100%, #e35950)) !important;background-image:-webkit-linear-gradient(top, #e8776f, #e35950) !important;background-image:-o-linear-gradient(top, #e8776f, #e35950) !important;background-image:-linear-gradient(top, #e8776f, #e35950) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e8776f', endColorstr='#e35950', GradientType=0) !important}.admin-color-ocean .button.ui-datepicker-current,.admin-color-ocean button.ui-datepicker-close{background-color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker-buttonpane button.ui-datepicker-current{background:#86a988 !important;color:white !important;border:1px solid #547555 !important}.admin-color-ocean .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-ocean .ui-datepicker-header{background-color:#627c83 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-active{background-color:#a7c0a9 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-hover{color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker td .ui-state-highlight{background:#9ebaa0 !important;border:1px solid #627c83 !important;color:white !important}.admin-color-ocean .redux-container-switch .cb-disable,.admin-color-ocean .redux-container-switch .cb-enable,.admin-color-ocean .ui-state-default,.admin-color-ocean .ui-widget-content .ui-state-default,.admin-color-ocean .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ocean .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ocean .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ocean .redux-container-switch .cb-enable.selected,.admin-color-ocean .redux-field-container .ui-buttonset .ui-state-active{background-color:#9ebaa0 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b3c9b4), to(#9ebaa0)) !important;background-image:-moz-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-ms-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b3c9b4), color-stop(100%, #9ebaa0)) !important;background-image:-webkit-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-o-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-linear-gradient(top, #b3c9b4, #9ebaa0) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3c9b4', endColorstr='#9ebaa0', GradientType=0) !important;border-color:#719a74 !important;border-color:#80a583 !important;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ocean #redux-header{background:#627c83;border-color:#9ebaa0}.admin-color-ocean #redux-header .display_header span{color:#d5dddf}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a{color:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#86a988;background:#4c6066}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#9ebaa0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#d5dddf;text-shadow:1px 1px #7e979d}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#627c83;text-shadow:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#9ebaa0;text-shadow:1px 1px #658d68}.admin-color-ocean .redux-container-image_select .redux-image-select-selected img{border-color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a{color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a:hover{color:#658d68}.admin-color-ocean .select2-results .select2-highlighted{background:#9ebaa0}.admin-color-ocean .select2-drop-active,.admin-color-ocean .select2-container-multi.select2-container-active .select2-choices,.admin-color-ocean .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ocean .select2-container-active .select2-choice,.admin-color-ocean .select2-container-active .select2-choices,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#9ebaa0}.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ocean .noUi-connect{background-color:#a7c0a9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#bccfbd), to(#a7c0a9)) !important;background-image:-moz-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-ms-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #bccfbd), color-stop(100%, #a7c0a9)) !important;background-image:-webkit-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-o-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-linear-gradient(top, #bccfbd, #a7c0a9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bccfbd', endColorstr='#a7c0a9', GradientType=0) !important}.admin-color-sunrise .button.ui-datepicker-current,.admin-color-sunrise button.ui-datepicker-close{background-color:#df8a48 !important}.admin-color-sunrise .ui-datepicker-buttonpane button.ui-datepicker-current{background:#cc6c23 !important;color:white !important;border:1px solid #753e14 !important}.admin-color-sunrise .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,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) !important}.admin-color-sunrise .ui-datepicker-header{background-color:#b43c38 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{background-color:#df8a48 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-hover{color:#df8a48 !important}.admin-color-sunrise .ui-datepicker td .ui-state-highlight{background:#dd823b !important;border:1px solid #b43c38 !important;color:white !important}.admin-color-sunrise .redux-container-switch .cb-disable,.admin-color-sunrise .redux-container-switch .cb-enable,.admin-color-sunrise .ui-state-default,.admin-color-sunrise .ui-widget-content .ui-state-default,.admin-color-sunrise .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-sunrise .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-sunrise .redux-container-switch .cb-enable.selected,.admin-color-sunrise .redux-field-container .ui-buttonset .ui-state-active{background-color:#dd823b !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e29559), to(#dd823b)) !important;background-image:-moz-linear-gradient(top, #e29559, #dd823b) !important;background-image:-ms-linear-gradient(top, #e29559, #dd823b) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e29559), color-stop(100%, #dd823b)) !important;background-image:-webkit-linear-gradient(top, #e29559, #dd823b) !important;background-image:-o-linear-gradient(top, #e29559, #dd823b) !important;background-image:-linear-gradient(top, #e29559, #dd823b) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e29559', endColorstr='#dd823b', GradientType=0) !important;border-color:#ad5d1e !important;border-color:#c36922 !important;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-sunrise #redux-header{background:#b43c38;border-color:#dd823b}.admin-color-sunrise #redux-header .display_header span{color:#f0c8c6}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a{color:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#cc6c23;background:#8d2f2c}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#dd823b}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#f0c8c6;text-shadow:1px 1px #d0534d}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#b43c38;text-shadow:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#dd823b;text-shadow:1px 1px #98511a}.admin-color-sunrise .redux-container-image_select .redux-image-select-selected img{border-color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a{color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a:hover{color:#98511a}.admin-color-sunrise .select2-results .select2-highlighted{background:#dd823b}.admin-color-sunrise .select2-drop-active,.admin-color-sunrise .select2-container-multi.select2-container-active .select2-choices,.admin-color-sunrise .select2-drop.select2-drop-above.select2-drop-active,.admin-color-sunrise .select2-container-active .select2-choice,.admin-color-sunrise .select2-container-active .select2-choices,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#dd823b}.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-sunrise .noUi-connect{background-color:#df8a48 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e59e66), to(#df8a48)) !important;background-image:-moz-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-ms-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e59e66), color-stop(100%, #df8a48)) !important;background-image:-webkit-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-o-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-linear-gradient(top, #e59e66, #df8a48) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e59e66', endColorstr='#df8a48', GradientType=0) !important}@media screen and (max-width: 600px){.redux-group-tab-link-a{min-height:15px}.redux-group-tab-link-a span{padding:11px 12px;color:#555;-webkit-transition:all 0.3s;-moz-transition:all 0.3s;transition:all 0.3s;text-shadow:none !important}.redux-group-tab-link-a span:hover{background:#e5e5e5}}@media screen and (max-width: 782px){#redux-footer #redux-share{line-height:38px;font-size:18px}.sticky-save-warn .redux-save-warn{right:13px;top:46px}.redux-container .expand_options{margin-top:5px}.redux-action_bar input{margin-bottom:0 !important}}@media screen and (max-width: 600px){#redux-footer #redux-share,.redux-hint-qtip{display:none}.redux-container .redux-action_bar{float:none}}.redux-sidebar .icon-large,.redux-main .icon-large{background-image:inherit !important;width:inherit;height:inherit}.redux-main dd,.redux-main li,.redux-sidebar li{margin-bottom:0 !important}.fully-expanded .redux-sidebar{margin-left:-500px}.fully-expanded .redux-main{margin-left:0}.fully-expanded .redux-group-tab{display:block}@media screen and (max-width: 640px){#redux-defaults-section{display:none}}@media screen and (max-width: 730px){#redux-share{display:none}}@media screen and (max-width: 730px){#redux-defaults-section2{display:none}#redux-share{display:none}}@media screen and (max-width: 600px){.form-table>tbody>tr>th{padding-bottom:0 !important}.redux_field_th{padding-top:0;padding-bottom:0}.redux-main .redux-field-container{padding-top:0;padding-bottom:0}.redux-main .subsection a{min-height:15px}}@media screen and (min-width: 601px) and (max-width: 782px){.redux-container .sticky-save-warn .redux-save-warn{top:47px !important;right:13px !important}}@media screen and (max-width: 782px){.redux-main .form-table-section-indented input[type=text]{width:95% !important}.redux-main .redux-container-sortable input[type=text]{width:80%;display:initial}.redux-main .redux-typography-container .input_wrapper input.mini{font-size:16px !important;height:40px !important;padding:7px 10px !important;line-height:24px !important}.redux-main .redux-typography-container .picker-wrapper label{margin-top:16px !important}.redux-main .input-append{height:50px !important}.redux-main .input-append .add-on{font-size:16px;line-height:24px !important;padding:7px;height:32px !important;float:right;margin-top:-40px}.redux-main .redux-hint-qtip{float:left !important}.redux-main .redux-action_bar .button{margin-top:-1px}}@media screen and (max-width: 600px){.sticky-save-warn .redux-save-warn{top:0 !important;right:14px !important}}@media screen and (max-width: 570px){.redux-main .redux-container-sortable .checkbox-container{width:85%;padding-bottom:5px}.redux-main .redux-container-sortable .checkbox-container label{display:initial}}#redux-header{position:relative}.redux-main{position:relative}.redux-main #redux-sticky{min-height:32px;margin-left:-20px;margin-right:-20px;margin-top:-10px;margin-bottom:8px}.redux-main #redux-sticky #info_bar{height:32px}.redux-main #redux-sticky #info_bar .expand_options{margin-top:4px}.redux-main .redux_field_search{top:50px;right:5px}.redux-main #redux-footer-sticky{margin-left:-20px;margin-right:-20px;margin-bottom:-10px}.redux-qtip{z-index:999999 !important}.redux-main pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}
|
ReduxCore/assets/css/vendor/qtip/jquery.qtip.css
CHANGED
@@ -1,14 +1,14 @@
|
|
1 |
/*
|
2 |
-
* qTip2 - Pretty powerful tooltips - v2.2.
|
3 |
* http://qtip2.com
|
4 |
*
|
5 |
-
* Copyright (c)
|
6 |
-
* Released under the MIT
|
7 |
* http://jquery.org/license
|
8 |
*
|
9 |
-
* Date:
|
10 |
* Plugins: tips modal viewport svg imagemap ie6
|
11 |
-
* Styles: basic css3
|
12 |
*/
|
13 |
.qtip{
|
14 |
position: absolute;
|
@@ -18,7 +18,7 @@
|
|
18 |
|
19 |
max-width: 280px;
|
20 |
min-width: 50px;
|
21 |
-
|
22 |
font-size: 10.5px;
|
23 |
line-height: 12px;
|
24 |
|
@@ -28,72 +28,71 @@
|
|
28 |
padding: 0;
|
29 |
}
|
30 |
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
}
|
97 |
|
98 |
/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
|
99 |
.qtip-focus{}
|
@@ -103,30 +102,26 @@
|
|
103 |
|
104 |
/* Default tooltip style */
|
105 |
.qtip-default{
|
106 |
-
border
|
107 |
-
border-style: solid;
|
108 |
-
border-color: black;
|
109 |
-
/* #F1D031;*/
|
110 |
|
111 |
background-color: #FFFFA3;
|
112 |
color: #555;
|
113 |
}
|
114 |
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
.qtip-default .qtip-titlebar .qtip-close{
|
126 |
-
border-color: #AAA;
|
127 |
-
color: #111;
|
128 |
-
}
|
129 |
|
|
|
|
|
|
|
|
|
130 |
|
131 |
|
132 |
/*! Light tooltip style */
|
@@ -136,9 +131,9 @@
|
|
136 |
color: #454545;
|
137 |
}
|
138 |
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
|
143 |
|
144 |
/*! Dark tooltip style */
|
@@ -148,17 +143,17 @@
|
|
148 |
color: #f3f3f3;
|
149 |
}
|
150 |
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
|
163 |
|
164 |
/*! Cream tooltip style */
|
@@ -168,13 +163,13 @@
|
|
168 |
color: #A27D35;
|
169 |
}
|
170 |
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
|
179 |
|
180 |
/*! Red tooltip style */
|
@@ -184,21 +179,21 @@
|
|
184 |
color: #912323;
|
185 |
}
|
186 |
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
|
203 |
|
204 |
/*! Green tooltip style */
|
@@ -208,13 +203,13 @@
|
|
208 |
color: #3F6219;
|
209 |
}
|
210 |
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
|
219 |
|
220 |
/*! Blue tooltip style */
|
@@ -224,14 +219,13 @@
|
|
224 |
color: #5E99BD;
|
225 |
}
|
226 |
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
.qtip-blue .qtip-close .qtip-icon{
|
232 |
-
background-position: -2px 0;
|
233 |
-
}
|
234 |
|
|
|
|
|
|
|
235 |
|
236 |
|
237 |
.qtip-shadow{
|
@@ -260,13 +254,13 @@
|
|
260 |
-moz-border-radius: 2px;
|
261 |
-webkit-border-radius: 2px;
|
262 |
border-radius: 2px;
|
263 |
-
|
264 |
-webkit-box-shadow: 0 0 3px #333;
|
265 |
-moz-box-shadow: 0 0 3px #333;
|
266 |
box-shadow: 0 0 3px #333;
|
267 |
|
268 |
color: white;
|
269 |
-
border
|
270 |
|
271 |
background: #4A4A4A;
|
272 |
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));
|
@@ -276,26 +270,26 @@
|
|
276 |
background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%);
|
277 |
}
|
278 |
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
|
300 |
|
301 |
/* jQuery TOOLS Tooltip style */
|
@@ -320,31 +314,31 @@
|
|
320 |
box-shadow: 0 0 12px #333;
|
321 |
}
|
322 |
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
|
349 |
|
350 |
/* Cluetip style */
|
@@ -358,20 +352,20 @@
|
|
358 |
border: 0 dashed transparent;
|
359 |
}
|
360 |
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
|
376 |
|
377 |
/* Tipsy style */
|
@@ -389,23 +383,23 @@
|
|
389 |
text-shadow: 0 1px black;
|
390 |
}
|
391 |
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
|
410 |
|
411 |
/* Tipped style */
|
@@ -423,29 +417,29 @@
|
|
423 |
font-family: serif;
|
424 |
}
|
425 |
|
426 |
-
|
427 |
-
|
428 |
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
|
450 |
|
451 |
/**
|
@@ -476,83 +470,83 @@
|
|
476 |
background-clip: padding-box;
|
477 |
}
|
478 |
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
|
557 |
|
558 |
/* IE9 fix - removes all filters */
|
@@ -563,37 +557,37 @@
|
|
563 |
}
|
564 |
|
565 |
|
566 |
-
|
567 |
.qtip .qtip-tip{
|
568 |
margin: 0 auto;
|
569 |
overflow: hidden;
|
570 |
z-index: 10;
|
571 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
572 |
}
|
573 |
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
|
|
|
|
|
|
|
|
579 |
|
580 |
-
|
581 |
-
.qtip .qtip-tip .qtip-vml,
|
582 |
-
.qtip .qtip-tip canvas{
|
583 |
-
position: absolute;
|
584 |
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
.qtip .qtip-tip canvas{ top: 0; left: 0; }
|
591 |
|
592 |
-
.qtip .qtip-tip .qtip-vml{
|
593 |
-
behavior: url(#default#VML);
|
594 |
-
display: inline-block;
|
595 |
-
visibility: visible;
|
596 |
-
}
|
597 |
|
598 |
#qtip-overlay{
|
599 |
position: fixed;
|
@@ -601,22 +595,21 @@
|
|
601 |
width: 100%; height: 100%;
|
602 |
}
|
603 |
|
604 |
-
|
605 |
-
|
606 |
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
background-color: black;
|
614 |
|
615 |
-
|
616 |
-
filter:alpha(opacity=70);
|
617 |
-
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
|
618 |
-
}
|
619 |
|
|
|
|
|
|
|
|
|
620 |
|
621 |
|
622 |
.qtipmodal-ie6fix{
|
1 |
/*
|
2 |
+
* qTip2 - Pretty powerful tooltips - v2.2.1
|
3 |
* http://qtip2.com
|
4 |
*
|
5 |
+
* Copyright (c) 2014
|
6 |
+
* Released under the MIT licenses
|
7 |
* http://jquery.org/license
|
8 |
*
|
9 |
+
* Date: Sat Sep 6 2014 11:12 GMT+0100+0100
|
10 |
* Plugins: tips modal viewport svg imagemap ie6
|
11 |
+
* Styles: core basic css3
|
12 |
*/
|
13 |
.qtip{
|
14 |
position: absolute;
|
18 |
|
19 |
max-width: 280px;
|
20 |
min-width: 50px;
|
21 |
+
|
22 |
font-size: 10.5px;
|
23 |
line-height: 12px;
|
24 |
|
28 |
padding: 0;
|
29 |
}
|
30 |
|
31 |
+
.qtip-content{
|
32 |
+
position: relative;
|
33 |
+
padding: 5px 9px;
|
34 |
+
overflow: hidden;
|
35 |
+
|
36 |
+
text-align: left;
|
37 |
+
word-wrap: break-word;
|
38 |
+
}
|
39 |
+
|
40 |
+
.qtip-titlebar{
|
41 |
+
position: relative;
|
42 |
+
padding: 5px 35px 5px 10px;
|
43 |
+
overflow: hidden;
|
44 |
+
|
45 |
+
border-width: 0 0 1px;
|
46 |
+
font-weight: bold;
|
47 |
+
}
|
48 |
+
|
49 |
+
.qtip-titlebar + .qtip-content{ border-top-width: 0 !important; }
|
50 |
+
|
51 |
+
/* Default close button class */
|
52 |
+
.qtip-close{
|
53 |
+
position: absolute;
|
54 |
+
right: -9px; top: -9px;
|
55 |
+
z-index: 11; /* Overlap .qtip-tip */
|
56 |
+
|
57 |
+
cursor: pointer;
|
58 |
+
outline: medium none;
|
59 |
+
|
60 |
+
border: 1px solid transparent;
|
61 |
+
}
|
62 |
+
|
63 |
+
.qtip-titlebar .qtip-close{
|
64 |
+
right: 4px; top: 50%;
|
65 |
+
margin-top: -9px;
|
66 |
+
}
|
67 |
+
|
68 |
+
* html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */
|
69 |
+
|
70 |
+
.qtip-titlebar .ui-icon,
|
71 |
+
.qtip-icon .ui-icon{
|
72 |
+
display: block;
|
73 |
+
text-indent: -1000em;
|
74 |
+
direction: ltr;
|
75 |
+
}
|
76 |
+
|
77 |
+
.qtip-icon, .qtip-icon .ui-icon{
|
78 |
+
-moz-border-radius: 3px;
|
79 |
+
-webkit-border-radius: 3px;
|
80 |
+
border-radius: 3px;
|
81 |
+
text-decoration: none;
|
82 |
+
}
|
83 |
+
|
84 |
+
.qtip-icon .ui-icon{
|
85 |
+
width: 18px;
|
86 |
+
height: 14px;
|
87 |
+
|
88 |
+
line-height: 14px;
|
89 |
+
text-align: center;
|
90 |
+
text-indent: 0;
|
91 |
+
font: normal bold 10px/13px Tahoma,sans-serif;
|
92 |
+
|
93 |
+
color: inherit;
|
94 |
+
background: transparent none no-repeat -100em -100em;
|
95 |
+
}
|
|
|
96 |
|
97 |
/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
|
98 |
.qtip-focus{}
|
102 |
|
103 |
/* Default tooltip style */
|
104 |
.qtip-default{
|
105 |
+
border: 1px solid #F1D031;
|
|
|
|
|
|
|
106 |
|
107 |
background-color: #FFFFA3;
|
108 |
color: #555;
|
109 |
}
|
110 |
|
111 |
+
.qtip-default .qtip-titlebar{
|
112 |
+
background-color: #FFEF93;
|
113 |
+
}
|
114 |
|
115 |
+
.qtip-default .qtip-icon{
|
116 |
+
border-color: #CCC;
|
117 |
+
background: #F1F1F1;
|
118 |
+
color: #777;
|
119 |
+
}
|
|
|
|
|
|
|
|
|
|
|
120 |
|
121 |
+
.qtip-default .qtip-titlebar .qtip-close{
|
122 |
+
border-color: #AAA;
|
123 |
+
color: #111;
|
124 |
+
}
|
125 |
|
126 |
|
127 |
/*! Light tooltip style */
|
131 |
color: #454545;
|
132 |
}
|
133 |
|
134 |
+
.qtip-light .qtip-titlebar{
|
135 |
+
background-color: #f1f1f1;
|
136 |
+
}
|
137 |
|
138 |
|
139 |
/*! Dark tooltip style */
|
143 |
color: #f3f3f3;
|
144 |
}
|
145 |
|
146 |
+
.qtip-dark .qtip-titlebar{
|
147 |
+
background-color: #404040;
|
148 |
+
}
|
149 |
|
150 |
+
.qtip-dark .qtip-icon{
|
151 |
+
border-color: #444;
|
152 |
+
}
|
153 |
|
154 |
+
.qtip-dark .qtip-titlebar .ui-state-hover{
|
155 |
+
border-color: #303030;
|
156 |
+
}
|
157 |
|
158 |
|
159 |
/*! Cream tooltip style */
|
163 |
color: #A27D35;
|
164 |
}
|
165 |
|
166 |
+
.qtip-cream .qtip-titlebar{
|
167 |
+
background-color: #F0DE7D;
|
168 |
+
}
|
169 |
|
170 |
+
.qtip-cream .qtip-close .qtip-icon{
|
171 |
+
background-position: -82px 0;
|
172 |
+
}
|
173 |
|
174 |
|
175 |
/*! Red tooltip style */
|
179 |
color: #912323;
|
180 |
}
|
181 |
|
182 |
+
.qtip-red .qtip-titlebar{
|
183 |
+
background-color: #F06D65;
|
184 |
+
}
|
185 |
|
186 |
+
.qtip-red .qtip-close .qtip-icon{
|
187 |
+
background-position: -102px 0;
|
188 |
+
}
|
189 |
|
190 |
+
.qtip-red .qtip-icon{
|
191 |
+
border-color: #D95252;
|
192 |
+
}
|
193 |
|
194 |
+
.qtip-red .qtip-titlebar .ui-state-hover{
|
195 |
+
border-color: #D95252;
|
196 |
+
}
|
197 |
|
198 |
|
199 |
/*! Green tooltip style */
|
203 |
color: #3F6219;
|
204 |
}
|
205 |
|
206 |
+
.qtip-green .qtip-titlebar{
|
207 |
+
background-color: #B0DE78;
|
208 |
+
}
|
209 |
|
210 |
+
.qtip-green .qtip-close .qtip-icon{
|
211 |
+
background-position: -42px 0;
|
212 |
+
}
|
213 |
|
214 |
|
215 |
/*! Blue tooltip style */
|
219 |
color: #5E99BD;
|
220 |
}
|
221 |
|
222 |
+
.qtip-blue .qtip-titlebar{
|
223 |
+
background-color: #D0E9F5;
|
224 |
+
}
|
|
|
|
|
|
|
|
|
225 |
|
226 |
+
.qtip-blue .qtip-close .qtip-icon{
|
227 |
+
background-position: -2px 0;
|
228 |
+
}
|
229 |
|
230 |
|
231 |
.qtip-shadow{
|
254 |
-moz-border-radius: 2px;
|
255 |
-webkit-border-radius: 2px;
|
256 |
border-radius: 2px;
|
257 |
+
|
258 |
-webkit-box-shadow: 0 0 3px #333;
|
259 |
-moz-box-shadow: 0 0 3px #333;
|
260 |
box-shadow: 0 0 3px #333;
|
261 |
|
262 |
color: white;
|
263 |
+
border: 0 solid transparent;
|
264 |
|
265 |
background: #4A4A4A;
|
266 |
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));
|
270 |
background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%);
|
271 |
}
|
272 |
|
273 |
+
.qtip-youtube .qtip-titlebar{
|
274 |
+
background-color: #4A4A4A;
|
275 |
+
background-color: rgba(0,0,0,0);
|
276 |
+
}
|
277 |
+
|
278 |
+
.qtip-youtube .qtip-content{
|
279 |
+
padding: .75em;
|
280 |
+
font: 12px arial,sans-serif;
|
281 |
+
|
282 |
+
filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);
|
283 |
+
-ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);";
|
284 |
+
}
|
285 |
|
286 |
+
.qtip-youtube .qtip-icon{
|
287 |
+
border-color: #222;
|
288 |
+
}
|
289 |
|
290 |
+
.qtip-youtube .qtip-titlebar .ui-state-hover{
|
291 |
+
border-color: #303030;
|
292 |
+
}
|
293 |
|
294 |
|
295 |
/* jQuery TOOLS Tooltip style */
|
314 |
box-shadow: 0 0 12px #333;
|
315 |
}
|
316 |
|
317 |
+
/* IE Specific */
|
318 |
+
.qtip-jtools .qtip-titlebar{
|
319 |
+
background-color: transparent;
|
320 |
+
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);
|
321 |
+
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)";
|
322 |
+
}
|
323 |
+
.qtip-jtools .qtip-content{
|
324 |
+
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);
|
325 |
+
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)";
|
326 |
+
}
|
327 |
|
328 |
+
.qtip-jtools .qtip-titlebar,
|
329 |
+
.qtip-jtools .qtip-content{
|
330 |
+
background: transparent;
|
331 |
+
color: white;
|
332 |
+
border: 0 dashed transparent;
|
333 |
+
}
|
334 |
|
335 |
+
.qtip-jtools .qtip-icon{
|
336 |
+
border-color: #555;
|
337 |
+
}
|
338 |
|
339 |
+
.qtip-jtools .qtip-titlebar .ui-state-hover{
|
340 |
+
border-color: #333;
|
341 |
+
}
|
342 |
|
343 |
|
344 |
/* Cluetip style */
|
352 |
border: 0 dashed transparent;
|
353 |
}
|
354 |
|
355 |
+
.qtip-cluetip .qtip-titlebar{
|
356 |
+
background-color: #87876A;
|
357 |
+
color: white;
|
358 |
+
border: 0 dashed transparent;
|
359 |
+
}
|
360 |
+
|
361 |
+
.qtip-cluetip .qtip-icon{
|
362 |
+
border-color: #808064;
|
363 |
+
}
|
364 |
+
|
365 |
+
.qtip-cluetip .qtip-titlebar .ui-state-hover{
|
366 |
+
border-color: #696952;
|
367 |
+
color: #696952;
|
368 |
+
}
|
369 |
|
370 |
|
371 |
/* Tipsy style */
|
383 |
text-shadow: 0 1px black;
|
384 |
}
|
385 |
|
386 |
+
.qtip-tipsy .qtip-titlebar{
|
387 |
+
padding: 6px 35px 0 10px;
|
388 |
+
background-color: transparent;
|
389 |
+
}
|
390 |
|
391 |
+
.qtip-tipsy .qtip-content{
|
392 |
+
padding: 6px 10px;
|
393 |
+
}
|
394 |
+
|
395 |
+
.qtip-tipsy .qtip-icon{
|
396 |
+
border-color: #222;
|
397 |
+
text-shadow: none;
|
398 |
+
}
|
399 |
|
400 |
+
.qtip-tipsy .qtip-titlebar .ui-state-hover{
|
401 |
+
border-color: #303030;
|
402 |
+
}
|
403 |
|
404 |
|
405 |
/* Tipped style */
|
417 |
font-family: serif;
|
418 |
}
|
419 |
|
420 |
+
.qtip-tipped .qtip-titlebar{
|
421 |
+
border-bottom-width: 0;
|
422 |
|
423 |
+
color: white;
|
424 |
+
background: #3A79B8;
|
425 |
+
background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D));
|
426 |
+
background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D);
|
427 |
+
background-image: -moz-linear-gradient(top, #3A79B8, #2E629D);
|
428 |
+
background-image: -ms-linear-gradient(top, #3A79B8, #2E629D);
|
429 |
+
background-image: -o-linear-gradient(top, #3A79B8, #2E629D);
|
430 |
+
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);
|
431 |
+
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)";
|
432 |
+
}
|
433 |
|
434 |
+
.qtip-tipped .qtip-icon{
|
435 |
+
border: 2px solid #285589;
|
436 |
+
background: #285589;
|
437 |
+
}
|
438 |
|
439 |
+
.qtip-tipped .qtip-icon .ui-icon{
|
440 |
+
background-color: #FBFBFB;
|
441 |
+
color: #555;
|
442 |
+
}
|
443 |
|
444 |
|
445 |
/**
|
470 |
background-clip: padding-box;
|
471 |
}
|
472 |
|
473 |
+
.qtip-bootstrap .qtip-titlebar{
|
474 |
+
/** Taken from Bootstrap .popover-title */
|
475 |
+
padding: 8px 14px;
|
476 |
+
margin: 0;
|
477 |
+
font-size: 14px;
|
478 |
+
font-weight: normal;
|
479 |
+
line-height: 18px;
|
480 |
+
background-color: #f7f7f7;
|
481 |
+
border-bottom: 1px solid #ebebeb;
|
482 |
+
-webkit-border-radius: 5px 5px 0 0;
|
483 |
+
-moz-border-radius: 5px 5px 0 0;
|
484 |
+
border-radius: 5px 5px 0 0;
|
485 |
+
}
|
486 |
+
|
487 |
+
.qtip-bootstrap .qtip-titlebar .qtip-close{
|
488 |
+
/**
|
489 |
+
* Overrides qTip2:
|
490 |
+
* .qtip-titlebar .qtip-close{
|
491 |
+
* [...]
|
492 |
+
* right: 4px;
|
493 |
+
* top: 50%;
|
494 |
+
* [...]
|
495 |
+
* border-style: solid;
|
496 |
+
* }
|
497 |
+
*/
|
498 |
+
right: 11px;
|
499 |
+
top: 45%;
|
500 |
+
border-style: none;
|
501 |
+
}
|
502 |
+
|
503 |
+
.qtip-bootstrap .qtip-content{
|
504 |
+
/** Taken from Bootstrap .popover-content */
|
505 |
+
padding: 9px 14px;
|
506 |
+
}
|
507 |
+
|
508 |
+
.qtip-bootstrap .qtip-icon{
|
509 |
+
/**
|
510 |
+
* Overrides qTip2:
|
511 |
+
* .qtip-default .qtip-icon {
|
512 |
+
* border-color: #CCC;
|
513 |
+
* background: #F1F1F1;
|
514 |
+
* color: #777;
|
515 |
+
* }
|
516 |
+
*/
|
517 |
+
background: transparent;
|
518 |
+
}
|
519 |
+
|
520 |
+
.qtip-bootstrap .qtip-icon .ui-icon{
|
521 |
+
/**
|
522 |
+
* Overrides qTip2:
|
523 |
+
* .qtip-icon .ui-icon{
|
524 |
+
* width: 18px;
|
525 |
+
* height: 14px;
|
526 |
+
* }
|
527 |
+
*/
|
528 |
+
width: auto;
|
529 |
+
height: auto;
|
530 |
+
|
531 |
+
/* Taken from Bootstrap .close */
|
532 |
+
float: right;
|
533 |
+
font-size: 20px;
|
534 |
+
font-weight: bold;
|
535 |
+
line-height: 18px;
|
536 |
+
color: #000000;
|
537 |
+
text-shadow: 0 1px 0 #ffffff;
|
538 |
+
opacity: 0.2;
|
539 |
+
filter: alpha(opacity=20);
|
540 |
+
}
|
541 |
+
|
542 |
+
.qtip-bootstrap .qtip-icon .ui-icon:hover{
|
543 |
+
/* Taken from Bootstrap .close:hover */
|
544 |
+
color: #000000;
|
545 |
+
text-decoration: none;
|
546 |
+
cursor: pointer;
|
547 |
+
opacity: 0.4;
|
548 |
+
filter: alpha(opacity=40);
|
549 |
+
}
|
550 |
|
551 |
|
552 |
/* IE9 fix - removes all filters */
|
557 |
}
|
558 |
|
559 |
|
|
|
560 |
.qtip .qtip-tip{
|
561 |
margin: 0 auto;
|
562 |
overflow: hidden;
|
563 |
z-index: 10;
|
564 |
+
|
565 |
+
}
|
566 |
+
|
567 |
+
/* Opera bug #357 - Incorrect tip position
|
568 |
+
https://github.com/Craga89/qTip2/issues/367 */
|
569 |
+
x:-o-prefocus, .qtip .qtip-tip{
|
570 |
+
visibility: hidden;
|
571 |
}
|
572 |
|
573 |
+
.qtip .qtip-tip,
|
574 |
+
.qtip .qtip-tip .qtip-vml,
|
575 |
+
.qtip .qtip-tip canvas{
|
576 |
+
position: absolute;
|
577 |
+
|
578 |
+
color: #123456;
|
579 |
+
background: transparent;
|
580 |
+
border: 0 dashed transparent;
|
581 |
+
}
|
582 |
|
583 |
+
.qtip .qtip-tip canvas{ top: 0; left: 0; }
|
|
|
|
|
|
|
584 |
|
585 |
+
.qtip .qtip-tip .qtip-vml{
|
586 |
+
behavior: url(#default#VML);
|
587 |
+
display: inline-block;
|
588 |
+
visibility: visible;
|
589 |
+
}
|
|
|
590 |
|
|
|
|
|
|
|
|
|
|
|
591 |
|
592 |
#qtip-overlay{
|
593 |
position: fixed;
|
595 |
width: 100%; height: 100%;
|
596 |
}
|
597 |
|
598 |
+
/* Applied to modals with show.modal.blur set to true */
|
599 |
+
#qtip-overlay.blurs{ cursor: pointer; }
|
600 |
|
601 |
+
/* Change opacity of overlay here */
|
602 |
+
#qtip-overlay div{
|
603 |
+
position: absolute;
|
604 |
+
left: 0; top: 0;
|
605 |
+
width: 100%; height: 100%;
|
|
|
|
|
606 |
|
607 |
+
background-color: black;
|
|
|
|
|
|
|
608 |
|
609 |
+
opacity: 0.7;
|
610 |
+
filter:alpha(opacity=70);
|
611 |
+
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
|
612 |
+
}
|
613 |
|
614 |
|
615 |
.qtipmodal-ie6fix{
|
ReduxCore/assets/css/vendor/qtip/jquery.qtip.min.css
CHANGED
@@ -1,2 +1,3 @@
|
|
|
|
1 |
|
2 |
-
.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:
|
1 |
+
/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
|
2 |
|
3 |
+
.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;z-index:11;cursor:pointer;outline:0;border:1px solid transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-icon .ui-icon,.qtip-titlebar .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:400 bold 10px/13px Tahoma,sans-serif;color:inherit;background:-100em -100em no-repeat}.qtip-default{border:1px solid #F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon,.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-bootstrap,.qtip-rounded,.qtip-tipsy{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border:0 solid transparent;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:transparent}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-content,.qtip-jtools .qtip-titlebar{background:0 0;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:0 0}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,x:-o-prefocus{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:0 0;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}
|
ReduxCore/assets/js/redux.js
CHANGED
@@ -62,9 +62,11 @@
|
|
62 |
if ( redux.fields.hasOwnProperty( "editor" ) ) {
|
63 |
$.each(
|
64 |
redux.fields.editor, function( $key, $index ) {
|
65 |
-
|
66 |
-
|
67 |
-
editor
|
|
|
|
|
68 |
}
|
69 |
}
|
70 |
);
|
62 |
if ( redux.fields.hasOwnProperty( "editor" ) ) {
|
63 |
$.each(
|
64 |
redux.fields.editor, function( $key, $index ) {
|
65 |
+
if (typeof(tinyMCE) !== 'undefined') {
|
66 |
+
var editor = tinyMCE.get( $key );
|
67 |
+
if ( editor ) {
|
68 |
+
editor.save();
|
69 |
+
}
|
70 |
}
|
71 |
}
|
72 |
);
|
ReduxCore/assets/js/redux.min.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
function redux_change(a){jQuery("body").trigger("check_dependencies",a),a.hasClass("compiler")&&jQuery("#redux-compiler-hook").val(1);var b=jQuery(a).parents(".redux-container:first"),c=jQuery(a).closest(".redux-group-tab").attr("id"),d=c.split("_");d=d[0];var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".redux-group-tab-link-li:first"),f=jQuery("#"+c+"_li").parents(".hasSubSections:first");if(jQuery(a).parents("fieldset.redux-field:first").hasClass("redux-field-error")){jQuery(a).parents("fieldset.redux-field:first").removeClass("redux-field-error"),jQuery(a).parent().find(".redux-th-error").slideUp();var g=parseInt(b.find(".redux-field-errors span").text())-1;if(0>=g)jQuery("#"+c+"_li .redux-menu-error").fadeOut("fast").remove(),jQuery("#"+c+"_li .redux-group-tab-link-a").removeClass("hasError"),jQuery("#"+c+"_li").parents(".inside:first").find(".redux-field-errors").slideUp(),jQuery(a).parents(".redux-container:first").find(".redux-field-errors").slideUp(),jQuery("#redux_metaboxes_errors").slideUp();else{var h=parseInt(e.find(".redux-menu-error:first").text())-1;0>=h?e.find(".redux-menu-error:first").fadeOut().remove():e.find(".redux-menu-error:first").text(h),b.find(".redux-field-errors span").text(g)}0!==f.length&&0===f.find(".redux-menu-error").length&&f.find(".hasError").removeClass("hasError")}if(jQuery(a).parents("fieldset.redux-field:first").hasClass("redux-field-warning")){jQuery(a).parents("fieldset.redux-field:first").removeClass("redux-field-warning"),jQuery(a).parent().find(".redux-th-warning").slideUp();var i=parseInt(b.find(".redux-field-warnings span").text())-1;if(0>=i)jQuery("#"+c+"_li .redux-menu-warning").fadeOut("fast").remove(),jQuery("#"+c+"_li .redux-group-tab-link-a").removeClass("hasWarning"),jQuery("#"+c+"_li").parents(".inside:first").find(".redux-field-warnings").slideUp(),jQuery(a).parents(".redux-container:first").find(".redux-field-warnings").slideUp(),jQuery("#redux_metaboxes_warnings").slideUp();else{var j=parseInt(e.find(".redux-menu-warning:first").text())-1;0>=j?e.find(".redux-menu-warning:first").fadeOut().remove():e.find(".redux-menu-warning:first").text(j),b.find(".redux-field-warning span").text(i)}0!==f.length&&0===f.find(".redux-menu-warning").length&&f.find(".hasWarning").removeClass("hasWarning")}return b.find(".saved_notice:visible").length>0?void 0:redux.customizer?void redux.customizer.save(a,b,c):void(redux.args.disable_save_warn||(b.find(".redux-save-warn").slideDown(),window.onbeforeunload=confirmOnPageExit))}function colorValidate(a){var b=jQuery(a).val(),c=colorNameToHex(b);return c!==b.replace("#","")?c:b}function colorNameToHex(a){var b=a.replace(/^\s\s*/,"").replace(/\s\s*$/,"").replace("#",""),c={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c","indigo ":"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",redux:"#01a3e3",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return"undefined"!==c[b.toLowerCase()]?c[b.toLowerCase()]:a}!function(a){"function"==typeof define&&define.amd?jQueryCookie.define(["jquery"],a):a(jQuery)}(function(a){function b(a){return a}function c(a){return decodeURIComponent(a.replace(e," "))}function d(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return f.json?JSON.parse(a):a}catch(b){}}var e=/\+/g,f=a.cookie=function(e,g,h){if(void 0!==g){if(h=a.extend({},f.defaults,h),"number"==typeof h.expires){var i=h.expires,j=h.expires=new Date;j.setDate(j.getDate()+i)}return g=f.json?JSON.stringify(g):String(g),document.cookie=[f.raw?e:encodeURIComponent(e),"=",f.raw?g:encodeURIComponent(g),h.expires?"; expires="+h.expires.toUTCString():"",h.path?"; path="+h.path:"",h.domain?"; domain="+h.domain:"",h.secure?"; secure":""].join("")}for(var k=f.raw?b:c,l=document.cookie.split("; "),m=e?void 0:{},n=0,o=l.length;o>n;n++){var p=l[n].split("="),q=k(p.shift()),r=k(p.join("="));if(e&&e===q){m=d(r);break}e||(m[q]=d(r))}return m};f.defaults={},a.removeCookie=function(b,c){return void 0!==a.cookie(b)?(a.cookie(b,"",a.extend({},c,{expires:-1})),!0):!1}}),function(a){a.fn.typeWatch=function(b){function c(b,c){var d=a(b.el).val();(d.length>=f.captureLength&&d.toUpperCase()!=b.text||c&&d.length>=f.captureLength)&&(b.text=d.toUpperCase(),b.cb.call(b.el,d))}function d(b){var d=b.type.toUpperCase();if(a.inArray(d,f.inputTypes)>=0){var e={timer:null,text:a(b).val().toUpperCase(),cb:f.callback,el:b,wait:f.wait};f.highlight&&a(b).focus(function(){this.select()});var g=function(b){var d=e.wait,g=!1,h=this.type.toUpperCase();"undefined"!=typeof b.keyCode&&13==b.keyCode&&"TEXTAREA"!=h&&a.inArray(h,f.inputTypes)>=0&&(d=1,g=!0);var i=function(){c(e,g)};clearTimeout(e.timer),e.timer=setTimeout(i,d)};a(b).on("keydown paste cut input",g)}}var e=["TEXT","TEXTAREA","PASSWORD","TEL","SEARCH","URL","EMAIL","DATETIME","DATE","MONTH","WEEK","TIME","DATETIME-LOCAL","NUMBER","RANGE"],f=a.extend({wait:750,callback:function(){},highlight:!0,captureLength:2,inputTypes:e},b);return this.each(function(){d(this)})}}(jQuery),function(a){a.fn.serializeForm=function(){if(this.length<1)return!1;var b={},c=b,d=':input[type!="checkbox"][type!="radio"], input:checked',e=function(){if(!this.disabled){var d=this.name.replace(/\[([^\]]+)?\]/g,",$1").split(","),e=d.length-1,f=a(this);if(d[0]){for(var g=0;e>g;g++)c=c[d[g]]=c[d[g]]||(""===d[g+1]||"0"===d[g+1]?[]:{});void 0!==c.length?c.push(f.val()):c[d[e]]=f.val(),c=b}}};return this.filter(d).each(e),this.find(d).each(e),b}}(jQuery),function(a){function b(){var a="!@#$%^&*()+=[]\\';,/{}|\":<>?~`.-_";return a+=" "}function c(){var a="¬€£¦";return a}function d(b,c,d){b.each(function(){var b=a(this);b.bind("keyup change paste",function(a){var e="";a.originalEvent&&a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData&&(e=a.originalEvent.clipboardData.getData("text/plain")),setTimeout(function(){h(b,c,d,e)},0)}),b.bind("keypress",function(a){var e=a.charCode?a.charCode:a.which;if(!(g(e)||a.ctrlKey||a.metaKey)){var f=String.fromCharCode(e),h=b.selection(),i=h.start,j=h.end,k=b.val(),l=k.substring(0,i)+f+k.substring(j),m=c(l,d);m!=l&&a.preventDefault()}})})}function e(b,c){var d=parseFloat(a(b).val()),e=a(b);return isNaN(d)?void e.val(""):(f(c.min)&&d<c.min&&e.val(""),void(f(c.max)&&d>c.max&&e.val("")))}function f(a){return!isNaN(a)}function g(a){return a>=32?!1:10==a?!1:13==a?!1:!0}function h(a,b,c,d){var e=a.val();""==e&&d.length>0&&(e=d);var f=b(e,c);if(e!=f){var g=a.alphanum_caret();a.val(f),e.length==f.length+1?a.alphanum_caret(g-1):a.alphanum_caret(g)}}function i(b,c){"undefined"==typeof c&&(c=D);var d,e={};return d="string"==typeof b?F[b]:"undefined"==typeof b?{}:b,a.extend(e,c,d),"undefined"==typeof e.blacklist&&(e.blacklistSet=x(e.allow,e.disallow)),e}function j(b){var c,d={};return c="string"==typeof b?G[b]:"undefined"==typeof b?{}:b,a.extend(d,E,c),d}function k(a,b,c){return c.maxLength&&a.length>=c.maxLength?!1:c.allow.indexOf(b)>=0?!0:c.allowSpace&&" "==b?!0:c.blacklistSet.contains(b)?!1:!c.allowNumeric&&K[b]?!1:!c.allowUpper&&u(b)?!1:!c.allowLower&&v(b)?!1:!c.allowCaseless&&w(b)?!1:!c.allowLatin&&L.contains(b)?!1:c.allowOtherCharSets?!0:K[b]||L.contains(b)?!0:!1}function l(a,b,c){if(K[b])return n(a,c)?!1:p(a,c)?!1:o(a,c)?!1:q(a+b,c)?!1:r(a+b,c)?!1:!0;if(c.allowPlus&&"+"==b&&""==a)return!0;if(c.allowMinus&&"-"==b&&""==a)return!0;if(b==I&&c.allowThouSep&&A(a,b))return!0;if(b==J){if(a.indexOf(J)>=0)return!1;if(c.allowDecSep)return!0}return!1}function m(a){return a+="",a.replace(/[^0-9]/g,"").length}function n(a,b){var c=b.maxDigits;if(""==c||isNaN(c))return!1;var d=m(a);return d>=c?!0:!1}function o(a,b){var c=b.maxDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(-1==d)return!1;var e=a.substring(d),f=m(e);return f>=c?!0:!1}function p(a,b){var c=b.maxPreDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(d>=0)return!1;var e=m(a);return e>=c?!0:!1}function q(a,b){if(!b.max||b.max<0)return!1;var c=parseFloat(a);return c>b.max?!0:!1}function r(a,b){if(!b.min||b.min>0)return!1;var c=parseFloat(a);return c<b.min?!0:!1}function s(a,b){if("string"!=typeof a)return a;var c,d=a.split(""),e=[],f=0;for(f=0;f<d.length;f++){c=d[f];var g=e.join("");k(g,c,b)&&e.push(c)}return e.join("")}function t(a,b){if("string"!=typeof a)return a;var c,d=a.split(""),e=[],f=0;for(f=0;f<d.length;f++){c=d[f];var g=e.join("");l(g,c,b)&&e.push(c)}return e.join("")}function u(a){var b=a.toUpperCase(),c=a.toLowerCase();return a==b&&b!=c?!0:!1}function v(a){var b=a.toUpperCase(),c=a.toLowerCase();return a==c&&b!=c?!0:!1}function w(a){return a.toUpperCase()==a.toLowerCase()?!0:!1}function x(a,b){var c=new B(H+b),d=new B(a),e=c.subtract(d);return e}function y(){var a,b="0123456789".split(""),c={},d=0;for(d=0;d<b.length;d++)a=b[d],c[a]=!0;return c}function z(){var a="abcdefghijklmnopqrstuvwxyz",b=a.toUpperCase(),c=new B(a+b);return c}function A(a,b){if(0==a.length)return!1;var c=a.indexOf(J);if(c>=0)return!1;var d=a.indexOf(I);if(0>d)return!0;var e=a.lastIndexOf(I),f=a.length-e-1;if(3>f)return!1;var g=m(a.substring(d));return g%3>0?!1:!0}function B(a){"string"==typeof a?this.map=C(a):this.map={}}function C(a){var b,c={},d=a.split(""),e=0;for(e=0;e<d.length;e++)b=d[e],c[b]=!0;return c}a.fn.alphanum=function(a){var b=i(a),c=this;return d(c,s,b),this},a.fn.alpha=function(a){var b=i("alpha"),c=i(a,b),e=this;return d(e,s,c),this},a.fn.numeric=function(a){var b=j(a),c=this;return d(c,t,b),c.blur(function(){e(this,a)}),this};var D={allow:"",disallow:"",allowSpace:!0,allowNumeric:!0,allowUpper:!0,allowLower:!0,allowCaseless:!0,allowLatin:!0,allowOtherCharSets:!0,maxLength:NaN},E={allowPlus:!1,allowMinus:!0,allowThouSep:!0,allowDecSep:!0,allowLeadingSpaces:!1,maxDigits:NaN,maxDecimalPlaces:NaN,maxPreDecimalPlaces:NaN,max:NaN,min:NaN},F={alpha:{allowNumeric:!1},upper:{allowNumeric:!1,allowUpper:!0,allowLower:!1,allowCaseless:!0},lower:{allowNumeric:!1,allowUpper:!1,allowLower:!0,allowCaseless:!0}},G={integer:{allowPlus:!1,allowMinus:!0,allowThouSep:!1,allowDecSep:!1},positiveInteger:{allowPlus:!1,allowMinus:!1,allowThouSep:!1,allowDecSep:!1}},H=b()+c(),I=",",J=".",K=y(),L=z();B.prototype.add=function(a){var b=this.clone();for(var c in a.map)b.map[c]=!0;return b},B.prototype.subtract=function(a){var b=this.clone();for(var c in a.map)delete b.map[c];return b},B.prototype.contains=function(a){return this.map[a]?!0:!1},B.prototype.clone=function(){var a=new B;for(var b in this.map)a.map[b]=!0;return a},a.fn.alphanum.backdoorAlphaNum=function(a,b){var c=i(b);return s(a,c)},a.fn.alphanum.backdoorNumeric=function(a,b){var c=j(b);return t(a,c)},a.fn.alphanum.setNumericSeparators=function(a){1==a.thousandsSeparator.length&&1==a.decimalSeparator.length&&(I=a.thousandsSeparator,J=a.decimalSeparator)}}(jQuery),function(a){function b(a,b){if(a.createTextRange){var c=a.createTextRange();c.move("character",b),c.select()}else null!=a.selectionStart&&(a.focus(),a.setSelectionRange(b,b))}function c(a){if("selection"in document){var b=a.createTextRange();try{b.setEndPoint("EndToStart",document.selection.createRange())}catch(c){return 0}return b.text.length}return null!=a.selectionStart?a.selectionStart:void 0}a.fn.alphanum_caret=function(d,e){return"undefined"==typeof d?c(this.get(0)):this.queue(function(c){if(isNaN(d)){var f=a(this).val().indexOf(d);e===!0?f+=d.length:"undefined"!=typeof e&&(f+=e),b(this,f)}else b(this,d);c()})}}(jQuery),function(a){var b=function(a){return a?a.ownerDocument.defaultView||a.ownerDocument.parentWindow:window},c=function(b,c){var d=a.Range.current(b).clone(),e=a.Range(b).select(b);return d.overlaps(e)?(d.compare("START_TO_START",e)<1?(startPos=0,d.move("START_TO_START",e)):(fromElementToCurrent=e.clone(),fromElementToCurrent.move("END_TO_START",d),startPos=fromElementToCurrent.toString().length),d.compare("END_TO_END",e)>=0?endPos=e.toString().length:endPos=startPos+d.toString().length,{start:startPos,end:endPos}):null},d=function(d){var e=b(d);if(void 0!==d.selectionStart)return document.activeElement&&document.activeElement!=d&&d.selectionStart==d.selectionEnd&&0==d.selectionStart?{start:d.value.length,end:d.value.length}:{start:d.selectionStart,end:d.selectionEnd};if(e.getSelection)return c(d,e);try{if("input"==d.nodeName.toLowerCase()){var f=b(d).document.selection.createRange(),g=d.createTextRange();g.setEndPoint("EndToStart",f);var h=g.text.length;return{start:h,end:h+f.text.length}}var i=c(d,e);if(!i)return i;var j=a.Range.current().clone(),k=j.clone().collapse().range,l=j.clone().collapse(!1).range;return k.moveStart("character",-1),l.moveStart("character",-1),0!=i.startPos&&""==k.text&&(i.startPos+=2),0!=i.endPos&&""==l.text&&(i.endPos+=2),i}catch(m){return{start:d.value.length,end:d.value.length}}},e=function(a,c,d){var e=b(a);if(a.setSelectionRange)void 0===d?(a.focus(),a.setSelectionRange(c,c)):(a.select(),a.selectionStart=c,a.selectionEnd=d);else if(a.createTextRange){var f=a.createTextRange();f.moveStart("character",c),d=d||c,f.moveEnd("character",d-a.value.length),f.select()}else if(e.getSelection){var h=e.document,i=e.getSelection(),j=h.createRange(),k=[c,void 0!==d?d:c];g([a],k),j.setStart(k[0].el,k[0].count),j.setEnd(k[1].el,k[1].count),i.removeAllRanges(),i.addRange(j)}else if(e.document.body.createTextRange){var j=document.body.createTextRange();j.moveToElementText(a),j.collapse(),j.moveStart("character",c),j.moveEnd("character",void 0!==d?d:c),j.select()}},f=function(a,b,c,d){"number"==typeof c[0]&&c[0]<b&&(c[0]={el:d,count:c[0]-a}),"number"==typeof c[1]&&c[1]<=b&&(c[1]={el:d,count:c[1]-a})},g=function(a,b,c){var d,e;c=c||0;for(var h=0;a[h];h++)d=a[h],3===d.nodeType||4===d.nodeType?(e=c,c+=d.nodeValue.length,f(e,c,b,d)):8!==d.nodeType&&(c=g(d.childNodes,b,c));return c};jQuery.fn.selection=function(a,b){return void 0!==a?this.each(function(){e(this,a,b)}):d(this[0])},a.fn.selection.getCharElement=g}(jQuery),function(a){"use strict";a.redux=a.redux||{},a(document).ready(function(){a.fn.isOnScreen=function(){if(window){var b=a(window),c={top:b.scrollTop()};c.right=c.left+b.width(),c.bottom=c.top+b.height();var d=this.offset();return d.right=d.left+this.outerWidth(),d.bottom=d.top+this.outerHeight(),!(c.right<d.left||c.left>d.right||c.bottom<d.top||c.top>d.bottom)}},a.redux.hideFields(),a.redux.checkRequired(),a.redux.initEvents(),a.redux.initQtip(),a.redux.tabCheck(),a.redux.notices(),a.redux.tabControl()}),a.redux.ajax_save=function(b){var c=a(document.getElementById("redux_ajax_overlay"));c.fadeIn(),jQuery(".redux-action_bar .spinner").addClass("is-active"),jQuery(".redux-action_bar input").attr("disabled","disabled");var d=jQuery(document.getElementById("redux_notification_bar"));d.slideUp(),jQuery(".redux-save-warn").slideUp(),jQuery(".redux_ajax_save_error").slideUp("medium",function(){jQuery(this).remove()});var e=jQuery(document.getElementById("redux-form-wrapper"));redux.fields.hasOwnProperty("editor")&&a.each(redux.fields.editor,function(a,b){var c=tinyMCE.get(a);c&&c.save()});var f=e.serialize();e.find("input[type=checkbox]").each(function(){if("undefined"!=typeof a(this).attr("name")){var b=a(this).is(":checked")?a(this).val():"0";f+="&"+a(this).attr("name")+"="+b}}),"redux_save"!=b.attr("name")&&(f+="&"+b.attr("name")+"="+b.val());var g=e.attr("data-nonce");return jQuery.ajax({type:"post",dataType:"json",url:ajaxurl,data:{action:redux.args.opt_name+"_ajax_save",nonce:g,opt_name:redux.args.opt_name,data:f},error:function(a){window.console||(console={}),console.log=console.log||function(a,b){},console.log(redux.ajax.console),console.log(a.responseText),jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),alert(redux.ajax.alert)},success:function(b){if(b.action&&"reload"==b.action)location.reload(!0);else if("success"==b.status){jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),redux.options=b.options,redux.errors=b.errors,redux.warnings=b.warnings,d.html(b.notification_bar).slideDown("fast"),(null!==b.errors||null!==b.warnings)&&a.redux.notices();var e=a(document.getElementById("redux_notification_bar")).find(".saved_notice");e.slideDown(),e.delay(4e3).slideUp()}else jQuery(".redux-action_bar input").removeAttr("disabled"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),c.fadeOut("fast"),jQuery(".wrap h2:first").parent().append('<div class="error redux_ajax_save_error" style="display:none;"><p>'+b.status+"</p></div>"),jQuery(".redux_ajax_save_error").slideDown(),jQuery("html, body").animate({scrollTop:0},"slow")}}),!1},a.redux.initEvents=function(){a(".redux-presets-bar").on("click",function(){window.onbeforeunload=null}),a("#toplevel_page_"+redux.args.slug+" .wp-submenu a, #wp-admin-bar-"+redux.args.slug+" a.ab-item").click(function(b){if((a("#toplevel_page_"+redux.args.slug).hasClass("wp-menu-open")||a(this).hasClass("ab-item"))&&!a(this).parents("ul.ab-submenu:first").hasClass("ab-sub-secondary")&&a(this).attr("href").toLowerCase().indexOf(redux.args.slug+"&tab=")>=0){b.preventDefault();var c=a(this).attr("href").split("&tab=");return a("#"+c[1]+"_section_group_li_a").click(),a(this).parents("ul:first").find(".current").removeClass("current"),a(this).addClass("current"),a(this).parent().addClass("current"),!1}}),a(".redux-action_bar input").on("click",function(b){if(a(this).attr("name")==redux.args.opt_name+"[defaults]"){if(!confirm(redux.args.reset_confirm))return!1}else if(a(this).attr("name")==redux.args.opt_name+"[defaults-section]"&&!confirm(redux.args.reset_section_confirm))return!1;window.onbeforeunload=null,redux.args.ajax_save===!0&&(a.redux.ajax_save(a(this)),b.preventDefault())}),a(".expand_options").click(function(b){b.preventDefault();var c=a(".redux-container");if(a(c).hasClass("fully-expanded")){a(c).removeClass("fully-expanded");var d=a.cookie("redux_current_tab");a(".redux-container:first").find("#"+d+"_section_group").fadeIn(200,function(){0!==a(".redux-container:first").find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()})}return a.redux.expandOptions(a(this).parents(".redux-container:first")),!1}),a(".saved_notice").is(":visible")&&a(".saved_notice").slideDown(),a(document.body).on("change",".redux-field input, .redux-field textarea, .redux-field select",function(){a(this).hasClass("noUpdate")||redux_change(a(this))});var b=a("#redux-footer").height();a("#redux-sticky-padder").css({height:b}),a("#redux-footer-sticky").removeClass("hide"),0!==a("#redux-footer").length&&(a(window).scroll(function(){a.redux.stickyInfo()}),a(window).resize(function(){a.redux.stickyInfo()})),a(".saved_notice").delay(4e3).slideUp()},a.redux.hideFields=function(){a("label[for='redux_hide_field']").each(function(b,c){var d=a(this).parent().parent();a(d).addClass("hidden")})},a.redux.checkRequired=function(){a.redux.required(),a("body").on("change",".redux-main select, .redux-main radio, .redux-main input[type=checkbox], .redux-main input[type=hidden]",function(b){a.redux.check_dependencies(this)}),a("body").on("check_dependencies",function(b,c){a.redux.check_dependencies(c)}),a("td > fieldset:empty,td > div:empty").parent().parent().hide()},a.redux.initQtip=function(){if(a().qtip){var b="",c=redux.args.hints.tip_style.shadow;c===!0&&(b="qtip-shadow");var d="",e=redux.args.hints.tip_style.color;""!==e&&(d="qtip-"+e);var f="",g=redux.args.hints.tip_style.rounded;g===!0&&(f="qtip-rounded");var h="",i=redux.args.hints.tip_style.style;""!==i&&(h="qtip-"+i);var j=b+","+d+","+f+","+h+",redux-qtip";j=j.replace(/,/g," ");var k=redux.args.hints.tip_position.my,l=redux.args.hints.tip_position.at;k=a.redux.verifyPos(k.toLowerCase(),!0),l=a.redux.verifyPos(l.toLowerCase(),!1);var m=redux.args.hints.tip_effect.show.event,n=redux.args.hints.tip_effect.hide.event,o=redux.args.hints.tip_effect.show.effect,p=redux.args.hints.tip_effect.show.duration,q=redux.args.hints.tip_effect.hide.effect,r=redux.args.hints.tip_effect.hide.duration;a("div.redux-dev-qtip").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:{effect:function(){a(this).slideDown(500)},event:"mouseover"},hide:{effect:function(){a(this).slideUp(500)},event:"mouseleave"},style:{classes:"qtip-shadow qtip-light"},position:{my:"top center",at:"bottom center"}})}),a("div.redux-hint-qtip").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:{effect:function(){switch(o){case"slide":a(this).slideDown(p);break;case"fade":a(this).fadeIn(p);break;default:a(this).show()}},event:m},hide:{effect:function(){switch(q){case"slide":a(this).slideUp(r);break;case"fade":a(this).fadeOut(r);break;default:a(this).hide(r)}},event:n},style:{classes:j},position:{my:k,at:l}})}),a("input[qtip-content]").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:"focus",hide:"blur",style:j,position:{my:k,at:l}})})}},a.redux.tabCheck=function(){if(a(".redux-group-tab-link-a").click(function(){var b=a(this);if(b.parent().hasClass("empty_section")&&b.parent().hasClass("hasSubSections")){var c=a(this).closest("ul").find(".redux-group-tab-link-a"),d=c.index(this);b=c.slice(d+1,d+2)}var e=b.parents(".redux-container:first"),f=b.data("rel"),g=e.find(".redux-group-tab-link-li.active:first .redux-group-tab-link-a").data("rel");if(g!==f){if(a("#currentSection").val(f),b.parents(".postbox-container:first").length||a.cookie("redux_current_tab",f,{expires:7,path:"/"}),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length){var h=e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").attr("id").split("_");h=h[0]}if(e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu li.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a").each(function(){var b=a(this).attr("href").split("&tab=");(b[1]==f||b[1]==h)&&(a(this).addClass("current"),a(this).parent().addClass("current"))}),e.find("#"+g+"_section_group_li").find("#"+g+"_section_group_li").length)e.find("#"+g+"_section_group_li").addClass("activeChild"),e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild");else if(e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length||e.find("#"+g+"_section_group_li").parents("ul.subsection").find("#"+f+"_section_group_li").length)e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length?e.find("#"+g+"_section_group_li").addClass("activeChild").removeClass("active"):(e.find("#"+f+"_section_group_li").addClass("active"),e.find("#"+g+"_section_group_li").removeClass("active")),e.find("#"+f+"_section_group_li").removeClass("activeChild").addClass("active");else if(e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+g+"_section_group_li").find("ul.subsection").length){e.find("#"+g+"_section_group_li").find("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active").removeClass("activeChild")});var i=e.find("#"+f+"_section_group_li").parents(".hasSubSections:first");i.length>0&&(e.find("#"+f+"_section_group_li").removeClass("active"),f=i.find(".redux-group-tab-link-a:first").data("rel"),i.hasClass("empty_section")?(i.find(".subsection li:first").addClass("active"),e.find("#"+f+"_section_group_li").removeClass("active").addClass("activeChild").find("ul.subsection").slideDown(),i=i.find(".subsection li:first"),f=i.find(".redux-group-tab-link-a:first").data("rel")):e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown())}else e.find("#"+g+"_section_group_li").parents("ul.subsection").length?e.find("#"+g+"_section_group_li").parents("#"+f+"_section_group_li").length?e.find("#"+g+"_section_group_li").removeClass("active"):e.find("#"+g+"_section_group_li").parents("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+g+"_section_group_li").parents(".redux-group-tab-link-li").removeClass("active").removeClass("activeChild"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")}):(e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length&&(e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")));e.find("#"+g+"_section_group").hide(),e.find("#"+f+"_section_group").fadeIn(200,function(){0!==e.find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()}),a("#toplevel_page_"+redux.args.slug).find(".current").removeClass("current")}}),void 0!==redux.last_tab)return void a("#"+redux.last_tab+"_section_group_li_a").click();var b=decodeURI((new RegExp("tab=(.+?)(&|$)").exec(location.search)||[,""])[1]);""!==b?a.cookie("redux_current_tab_get")!==b&&(a.cookie("redux_current_tab",b,{expires:7,path:"/"}),a.cookie("redux_current_tab_get",b,{expires:7,path:"/"}),a("#"+b+"_section_group_li").click()):""!==a.cookie("redux_current_tab_get")&&a.removeCookie("redux_current_tab_get");var c=a("#"+a.cookie("redux_current_tab")+"_section_group_li_a");null===a.cookie("redux_current_tab")||"undefined"==typeof a.cookie("redux_current_tab")||0===c.length?a(".redux-container").find(".redux-group-tab-link-a:first").click():c.click()},a.redux.initFields=function(){a(".redux-group-tab:visible").find(".redux-field-init:visible").each(function(){var b=a(this).attr("data-type");if("undefined"!=typeof redux.field_objects&&redux.field_objects[b]&&redux.field_objects[b]&&redux.field_objects[b].init(),!redux.customizer&&a(this).hasClass("redux_remove_th")){var c=a(this).parents("tr:first"),d=c.find("th:first");d.html()&&d.html().length>0&&(a(this).prepend(d.html()),a(this).find(".redux_field_th").css("padding","0 0 10px 0")),a(this).parent().attr("colspan","2"),d.remove()}})},a.redux.notices=function(){redux.errors&&redux.errors.errors&&(a.each(redux.errors.errors,function(b,c){a.each(c.errors,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-error"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").length?a("#"+redux.args.opt_name+"-"+c.id).append('<div class="redux-th-error">'+c.msg+"</div>"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-error").remove();var c=b.find(".redux-field-error").length;c>0&&(b.find(".redux-field-errors span").text(c),b.find(".redux-field-errors").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-error").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend('<span class="redux-menu-error">'+c+"</span>"),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasError");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasError")}}))})),redux.warnings&&redux.warnings.warnings&&(a.each(redux.warnings.warnings,function(b,c){a.each(c.warnings,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-warning"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").length?a("#"+redux.args.opt_name+"-"+c.id).append('<div class="redux-th-warning">'+c.msg+"</div>"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-warning").remove();var c=b.find(".redux-field-warning").length;c>0&&(b.find(".redux-field-warnings span").text(c),b.find(".redux-field-warnings").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-warning").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend('<span class="redux-menu-warning">'+c+"</span>"),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasWarning");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasWarning")}}))}))},a.redux.tabControl=function(){a(".redux-section-tabs div").hide(),a(".redux-section-tabs div:first").show(),a(".redux-section-tabs ul li:first").addClass("active"),a(".redux-section-tabs ul li a").click(function(){a(".redux-section-tabs ul li").removeClass("active"),a(this).parent().addClass("active");var b=a(this).attr("href");return a(".redux-section-tabs div").hide(),a(b).fadeIn("medium",function(){a.redux.initFields()}),!1})},a.redux.required=function(){a.each(redux.folds,function(b,c){var d=a("#"+redux.args.opt_name+"-"+b);if(d.parents("tr:first").addClass("fold"),"hide"==c){if(d.parents("tr:first").addClass("hide"),d.hasClass("redux-container-section")){var e=a("#section-"+b);e.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).hide().addClass("hide"),
|
2 |
e.hide().addClass("hide"))}if(d.hasClass("redux-container-info")&&a("#info-"+b).hide().addClass("hide"),d.hasClass("redux-container-divide")&&a("#divide-"+b).hide().addClass("hide"),d.hasClass("redux-container-raw")){var f=d.parents().find("table#"+redux.args.opt_name+"-"+b);f.hide().addClass("hide")}}})},a.redux.get_container_value=function(b){var c=a("#"+redux.args.opt_name+"-"+b).serializeForm();return null!==c&&"object"==typeof c&&c.hasOwnProperty(redux.args.opt_name)&&(c=c[redux.args.opt_name][b]),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-media")&&(c=c.url),c},a.redux.check_dependencies=function(b){if(null!==redux.required){var c=a(b),d=c.parents(".redux-field:first").data("id");if(redux.required.hasOwnProperty(d)){var e=c.parents(".redux-field-container:first"),f=e.parents("tr:first").hasClass(".hide");a.each(redux.required[d],function(b,c){var d=a(this),e=!1,g=a("#"+redux.args.opt_name+"-"+b),h=g.parents("tr:first");if(f||(e=a.redux.check_parents_dependencies(b)),e===!0){if(g.hasClass("redux-container-section")){var i=a("#section-"+b);i.hasClass("redux-section-indent-start")&&i.hasClass("hide")&&(a("#section-table-"+b).fadeIn(300).removeClass("hide"),i.fadeIn(300).removeClass("hide"))}if(g.hasClass("redux-container-info")&&a("#info-"+b).fadeIn(300).removeClass("hide"),g.hasClass("redux-container-divide")&&a("#divide-"+b).fadeIn(300).removeClass("hide"),g.hasClass("redux-container-raw")){var j=g.parents().find("table#"+redux.args.opt_name+"-"+b);j.fadeIn(300).removeClass("hide")}h.fadeIn(300,function(){a(this).removeClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.check_dependencies(a("#"+redux.args.opt_name+"-"+b).children().first()),a.redux.initFields()}),(g.hasClass("redux-container-section")||g.hasClass("redux-container-info"))&&h.css({display:"none"})}else e===!1&&h.fadeOut(100,function(){a(this).addClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.required_recursive_hide(b)});d.find("select, radio, input[type=checkbox]").trigger("change")})}}},a.redux.required_recursive_hide=function(b){var c=a("#"+redux.args.opt_name+"-"+b).parents("tr:first");c.fadeOut(50,function(){if(a(this).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-section")){var c=a("#section-"+b);c.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).fadeOut(50).addClass("hide"),c.fadeOut(50).addClass("hide"))}if(a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-info")&&a("#info-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-divide")&&a("#divide-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-raw")){var d=a("#"+redux.args.opt_name+"-"+b).parents().find("table#"+redux.args.opt_name+"-"+b);d.fadeOut(50).addClass("hide")}redux.required.hasOwnProperty(b)&&a.each(redux.required[b],function(b){a.redux.required_recursive_hide(b)})})},a.redux.check_parents_dependencies=function(b){var c="";return redux.required_child.hasOwnProperty(b)?a.each(redux.required_child[b],function(b,d){if(a("#"+redux.args.opt_name+"-"+d.parent).parents("tr:first").hasClass(".hide"))c=!1;else if(c!==!1){var e=a.redux.get_container_value(d.parent);c=a.redux.check_dependencies_visibility(e,d)}}):c=!0,c},a.redux.check_dependencies_visibility=function(b,c){var d,e=!1,f=c.checkValue,g=c.operation;switch(g){case"=":case"equals":a.isArray(b)?a(b[0]).each(function(b,c){if(a.isArray(f))a(f).each(function(a,b){return c==b?(e=!0,!0):void 0});else if(c==f)return e=!0,!0}):a.isArray(f)?a(f).each(function(a,c){b==c&&(e=!0)}):b==f&&(e=!0);break;case"!=":case"not":a.isArray(b)?a(b).each(function(b,c){if(a.isArray(f))a(f).each(function(a,b){return c!=b?(e=!0,!0):void 0});else if(c!=f)return e=!0,!0}):a.isArray(f)?a(f).each(function(a,c){b!=c&&(e=!0)}):b!=f&&(e=!0);break;case">":case"greater":case"is_larger":parseFloat(b)>parseFloat(f)&&(e=!0);break;case">=":case"greater_equal":case"is_larger_equal":parseFloat(b)>=parseFloat(f)&&(e=!0);break;case"<":case"less":case"is_smaller":parseFloat(b)<parseFloat(f)&&(e=!0);break;case"<=":case"less_equal":case"is_smaller_equal":parseFloat(b)<=parseFloat(f)&&(e=!0);break;case"contains":a.isPlainObject(b)&&(d=Object.keys(b).map(function(a){return b[a]}),b=d),a.isPlainObject(f)&&(d=Object.keys(f).map(function(a){return f[a]}),f=d),a.isArray(f)?a(f).each(function(a,c){-1!==b.toString().indexOf(c)&&(e=!0)}):-1!==b.toString().indexOf(f)&&(e=!0);break;case"doesnt_contain":case"not_contain":a.isPlainObject(b)&&(d=Object.keys(b).map(function(a){return b[a]}),b=d),a.isPlainObject(f)&&(d=Object.keys(f).map(function(a){return f[a]}),f=d),a.isArray(f)?a(f).each(function(a,c){-1===b.toString().indexOf(c)&&(e=!0)}):-1===b.toString().indexOf(f)&&(e=!0);break;case"is_empty_or":(""===b||b==f)&&(e=!0);break;case"not_empty_and":""!==b&&b!=f&&(e=!0);break;case"is_empty":case"empty":case"!isset":b&&""!==b&&null!==b||(e=!0);break;case"not_empty":case"!empty":case"isset":b&&""!==b&&null!==b&&(e=!0)}return e},a.redux.verifyPos=function(a,b){if(a=a.replace(/^\s+|\s+$/gm,""),""===a||-1==a.search(" "))return b===!0?"top left":"bottom right";var c=a.split(" "),d=b?"top":"bottom";("top"==c[0]||"center"==c[0]||"bottom"==c[0])&&(d=c[0]);var e=b?"left":"right";return("left"==c[1]||"center"==c[1]||"right"==c[1])&&(e=c[1]),d+" "+e},a.redux.stickyInfo=function(){var b=a(".redux-main").innerWidth()-20;a("#info_bar").isOnScreen()||a("#redux-footer-sticky").isOnScreen()?(a("#redux-footer").css({background:"#eee",position:"inherit",bottom:"inherit",width:"inherit"}),a("#redux-sticky-padder").hide(),a("#redux-footer").removeClass("sticky-footer-fixed")):(a("#redux-footer").css({position:"fixed",bottom:"0",width:b,right:21}),a("#redux-footer").addClass("sticky-footer-fixed"),a(".redux-save-warn").css("left",a("#redux-sticky").offset().left),a("#redux-sticky-padder").show()),a("#info_bar").isOnScreen()?a("#redux-sticky").removeClass("sticky-save-warn"):a("#redux-sticky").addClass("sticky-save-warn")},a.redux.expandOptions=function(b){var c=b.find(".expand_options"),d=b.find(".redux-sidebar").width()-1,e=a(".redux-group-menu .active a").data("rel")+"_section_group";return c.hasClass("expanded")?(c.removeClass("expanded"),b.find(".redux-main").removeClass("expand"),b.find(".redux-sidebar").stop().animate({"margin-left":"0px"},500),b.find(".redux-main").stop().animate({"margin-left":d},500,function(){b.find(".redux-main").attr("style","")}),b.find(".redux-group-tab").each(function(){a(this).attr("id")!==e&&a(this).fadeOut("fast")})):(c.addClass("expanded"),b.find(".redux-main").addClass("expand"),b.find(".redux-sidebar").stop().animate({"margin-left":-d-113},500),b.find(".redux-main").stop().animate({"margin-left":"-1px"},500),b.find(".redux-group-tab").fadeIn("medium",function(){a.redux.initFields()})),!1},a.redux.scaleToRatio=function(b,c,d){var e=0,f=b.attr("data-width");f||(f=b.width(),b.attr("data-width",f));var g=b.attr("data-height"),h=b.height();(!g||h>g)&&(g=h,b.attr("data-height",g),b.css("width","auto"),b.attr("data-width",b.width()),f=b.width()),f>d?(e=d/f,b.css("width",d),b.css("height",g*e),g*=e,f*=e):b.css("width","auto"),g>c?(e=c/g,b.css("height",c),b.css("width",f*e),f*=e,g*=e):b.css("height","auto");var i=(a(document.getElementById("redux-header")).height()-b.height())/2;i>0?b.css("margin-top",i):b.css("margin-top",0),a("#redux-header .redux_field_search")&&a("#redux-header .redux_field_search").css("right",a(b).width()+20)},a.redux.resizeAds=function(){var b,c=a("#redux-header");c.length?b=c.width()-c.find(".display_header").width()-30:(c=a("#customize-info"),b=c.width());var d=c.height(),e=c.find(".rAds");a(e).find("video").each(function(){a.redux.scaleToRatio(a(this),d,b)}),a(e).find("img").each(function(){a.redux.scaleToRatio(a(this),d,b)}),a(e).find("div").each(function(){a.redux.scaleToRatio(a(this),d,b)}),"-99999px"==e.css("left")&&e.css("display","none").css("left","auto"),e.fadeIn("slow")},a(document).ready(function(){redux.rAds&&setTimeout(function(){var b;a("#redux-header").length>0?(a("#redux-header").append('<div class="rAds"></div>'),b=a("#redux-header")):(a("#customize-theme-controls ul").first().prepend('<li id="redux_rAds" class="accordion-section rAdsContainer" style="position: relative;"><div class="rAds"></div></li>'),b=a("#redux_rAds")),b.css("position","relative"),b.find(".rAds").attr("style","position:absolute; top: 6px; right: 6px; display:block !important;overflow:hidden;").css("left","-99999px"),b.find(".rAds").html(redux.rAds.replace(/<br\s?\/?>/,""));var c=b.find(".rAds");b.height(),b.width()-b.find(".display_header").width()-30;c.find("a").css("float","right").css("line-height",b.height()+"px").css("margin-left","5px"),a(document).ajaxComplete(function(){c.find("a").hide(),setTimeout(function(){a.redux.resizeAds(),c.find("a").fadeIn()},1400),setTimeout(function(){a.redux.resizeAds()},1500),a(document).unbind("ajaxComplete")}),a(window).resize(function(){a.redux.resizeAds()})},400)})}(jQuery),jQuery.noConflict();var confirmOnPageExit=function(a){a=a||window.event;var b=redux.args.save_pending;return a&&(a.returnValue=b),window.onbeforeunload=null,b};
|
1 |
+
function redux_change(a){jQuery("body").trigger("check_dependencies",a),a.hasClass("compiler")&&jQuery("#redux-compiler-hook").val(1);var b=jQuery(a).parents(".redux-container:first"),c=jQuery(a).closest(".redux-group-tab").attr("id"),d=c.split("_");d=d[0];var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".redux-group-tab-link-li:first"),f=jQuery("#"+c+"_li").parents(".hasSubSections:first");if(jQuery(a).parents("fieldset.redux-field:first").hasClass("redux-field-error")){jQuery(a).parents("fieldset.redux-field:first").removeClass("redux-field-error"),jQuery(a).parent().find(".redux-th-error").slideUp();var g=parseInt(b.find(".redux-field-errors span").text())-1;if(0>=g)jQuery("#"+c+"_li .redux-menu-error").fadeOut("fast").remove(),jQuery("#"+c+"_li .redux-group-tab-link-a").removeClass("hasError"),jQuery("#"+c+"_li").parents(".inside:first").find(".redux-field-errors").slideUp(),jQuery(a).parents(".redux-container:first").find(".redux-field-errors").slideUp(),jQuery("#redux_metaboxes_errors").slideUp();else{var h=parseInt(e.find(".redux-menu-error:first").text())-1;0>=h?e.find(".redux-menu-error:first").fadeOut().remove():e.find(".redux-menu-error:first").text(h),b.find(".redux-field-errors span").text(g)}0!==f.length&&0===f.find(".redux-menu-error").length&&f.find(".hasError").removeClass("hasError")}if(jQuery(a).parents("fieldset.redux-field:first").hasClass("redux-field-warning")){jQuery(a).parents("fieldset.redux-field:first").removeClass("redux-field-warning"),jQuery(a).parent().find(".redux-th-warning").slideUp();var i=parseInt(b.find(".redux-field-warnings span").text())-1;if(0>=i)jQuery("#"+c+"_li .redux-menu-warning").fadeOut("fast").remove(),jQuery("#"+c+"_li .redux-group-tab-link-a").removeClass("hasWarning"),jQuery("#"+c+"_li").parents(".inside:first").find(".redux-field-warnings").slideUp(),jQuery(a).parents(".redux-container:first").find(".redux-field-warnings").slideUp(),jQuery("#redux_metaboxes_warnings").slideUp();else{var j=parseInt(e.find(".redux-menu-warning:first").text())-1;0>=j?e.find(".redux-menu-warning:first").fadeOut().remove():e.find(".redux-menu-warning:first").text(j),b.find(".redux-field-warning span").text(i)}0!==f.length&&0===f.find(".redux-menu-warning").length&&f.find(".hasWarning").removeClass("hasWarning")}return b.find(".saved_notice:visible").length>0?void 0:redux.customizer?void redux.customizer.save(a,b,c):void(redux.args.disable_save_warn||(b.find(".redux-save-warn").slideDown(),window.onbeforeunload=confirmOnPageExit))}function colorValidate(a){var b=jQuery(a).val(),c=colorNameToHex(b);return c!==b.replace("#","")?c:b}function colorNameToHex(a){var b=a.replace(/^\s\s*/,"").replace(/\s\s*$/,"").replace("#",""),c={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c","indigo ":"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",redux:"#01a3e3",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return"undefined"!==c[b.toLowerCase()]?c[b.toLowerCase()]:a}!function(a){"function"==typeof define&&define.amd?jQueryCookie.define(["jquery"],a):a(jQuery)}(function(a){function b(a){return a}function c(a){return decodeURIComponent(a.replace(e," "))}function d(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return f.json?JSON.parse(a):a}catch(b){}}var e=/\+/g,f=a.cookie=function(e,g,h){if(void 0!==g){if(h=a.extend({},f.defaults,h),"number"==typeof h.expires){var i=h.expires,j=h.expires=new Date;j.setDate(j.getDate()+i)}return g=f.json?JSON.stringify(g):String(g),document.cookie=[f.raw?e:encodeURIComponent(e),"=",f.raw?g:encodeURIComponent(g),h.expires?"; expires="+h.expires.toUTCString():"",h.path?"; path="+h.path:"",h.domain?"; domain="+h.domain:"",h.secure?"; secure":""].join("")}for(var k=f.raw?b:c,l=document.cookie.split("; "),m=e?void 0:{},n=0,o=l.length;o>n;n++){var p=l[n].split("="),q=k(p.shift()),r=k(p.join("="));if(e&&e===q){m=d(r);break}e||(m[q]=d(r))}return m};f.defaults={},a.removeCookie=function(b,c){return void 0!==a.cookie(b)?(a.cookie(b,"",a.extend({},c,{expires:-1})),!0):!1}}),function(a){a.fn.typeWatch=function(b){function c(b,c){var d=a(b.el).val();(d.length>=f.captureLength&&d.toUpperCase()!=b.text||c&&d.length>=f.captureLength)&&(b.text=d.toUpperCase(),b.cb.call(b.el,d))}function d(b){var d=b.type.toUpperCase();if(a.inArray(d,f.inputTypes)>=0){var e={timer:null,text:a(b).val().toUpperCase(),cb:f.callback,el:b,wait:f.wait};f.highlight&&a(b).focus(function(){this.select()});var g=function(b){var d=e.wait,g=!1,h=this.type.toUpperCase();"undefined"!=typeof b.keyCode&&13==b.keyCode&&"TEXTAREA"!=h&&a.inArray(h,f.inputTypes)>=0&&(d=1,g=!0);var i=function(){c(e,g)};clearTimeout(e.timer),e.timer=setTimeout(i,d)};a(b).on("keydown paste cut input",g)}}var e=["TEXT","TEXTAREA","PASSWORD","TEL","SEARCH","URL","EMAIL","DATETIME","DATE","MONTH","WEEK","TIME","DATETIME-LOCAL","NUMBER","RANGE"],f=a.extend({wait:750,callback:function(){},highlight:!0,captureLength:2,inputTypes:e},b);return this.each(function(){d(this)})}}(jQuery),function(a){a.fn.serializeForm=function(){if(this.length<1)return!1;var b={},c=b,d=':input[type!="checkbox"][type!="radio"], input:checked',e=function(){if(!this.disabled){var d=this.name.replace(/\[([^\]]+)?\]/g,",$1").split(","),e=d.length-1,f=a(this);if(d[0]){for(var g=0;e>g;g++)c=c[d[g]]=c[d[g]]||(""===d[g+1]||"0"===d[g+1]?[]:{});void 0!==c.length?c.push(f.val()):c[d[e]]=f.val(),c=b}}};return this.filter(d).each(e),this.find(d).each(e),b}}(jQuery),function(a){function b(){var a="!@#$%^&*()+=[]\\';,/{}|\":<>?~`.-_";return a+=" "}function c(){var a="¬€£¦";return a}function d(b,c,d){b.each(function(){var b=a(this);b.bind("keyup change paste",function(a){var e="";a.originalEvent&&a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData&&(e=a.originalEvent.clipboardData.getData("text/plain")),setTimeout(function(){h(b,c,d,e)},0)}),b.bind("keypress",function(a){var e=a.charCode?a.charCode:a.which;if(!(g(e)||a.ctrlKey||a.metaKey)){var f=String.fromCharCode(e),h=b.selection(),i=h.start,j=h.end,k=b.val(),l=k.substring(0,i)+f+k.substring(j),m=c(l,d);m!=l&&a.preventDefault()}})})}function e(b,c){var d=parseFloat(a(b).val()),e=a(b);return isNaN(d)?void e.val(""):(f(c.min)&&d<c.min&&e.val(""),void(f(c.max)&&d>c.max&&e.val("")))}function f(a){return!isNaN(a)}function g(a){return a>=32?!1:10==a?!1:13==a?!1:!0}function h(a,b,c,d){var e=a.val();""==e&&d.length>0&&(e=d);var f=b(e,c);if(e!=f){var g=a.alphanum_caret();a.val(f),e.length==f.length+1?a.alphanum_caret(g-1):a.alphanum_caret(g)}}function i(b,c){"undefined"==typeof c&&(c=D);var d,e={};return d="string"==typeof b?F[b]:"undefined"==typeof b?{}:b,a.extend(e,c,d),"undefined"==typeof e.blacklist&&(e.blacklistSet=x(e.allow,e.disallow)),e}function j(b){var c,d={};return c="string"==typeof b?G[b]:"undefined"==typeof b?{}:b,a.extend(d,E,c),d}function k(a,b,c){return c.maxLength&&a.length>=c.maxLength?!1:c.allow.indexOf(b)>=0?!0:c.allowSpace&&" "==b?!0:c.blacklistSet.contains(b)?!1:!c.allowNumeric&&K[b]?!1:!c.allowUpper&&u(b)?!1:!c.allowLower&&v(b)?!1:!c.allowCaseless&&w(b)?!1:!c.allowLatin&&L.contains(b)?!1:c.allowOtherCharSets?!0:K[b]||L.contains(b)?!0:!1}function l(a,b,c){if(K[b])return n(a,c)?!1:p(a,c)?!1:o(a,c)?!1:q(a+b,c)?!1:r(a+b,c)?!1:!0;if(c.allowPlus&&"+"==b&&""==a)return!0;if(c.allowMinus&&"-"==b&&""==a)return!0;if(b==I&&c.allowThouSep&&A(a,b))return!0;if(b==J){if(a.indexOf(J)>=0)return!1;if(c.allowDecSep)return!0}return!1}function m(a){return a+="",a.replace(/[^0-9]/g,"").length}function n(a,b){var c=b.maxDigits;if(""==c||isNaN(c))return!1;var d=m(a);return d>=c?!0:!1}function o(a,b){var c=b.maxDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(-1==d)return!1;var e=a.substring(d),f=m(e);return f>=c?!0:!1}function p(a,b){var c=b.maxPreDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);if(d>=0)return!1;var e=m(a);return e>=c?!0:!1}function q(a,b){if(!b.max||b.max<0)return!1;var c=parseFloat(a);return c>b.max?!0:!1}function r(a,b){if(!b.min||b.min>0)return!1;var c=parseFloat(a);return c<b.min?!0:!1}function s(a,b){if("string"!=typeof a)return a;var c,d=a.split(""),e=[],f=0;for(f=0;f<d.length;f++){c=d[f];var g=e.join("");k(g,c,b)&&e.push(c)}return e.join("")}function t(a,b){if("string"!=typeof a)return a;var c,d=a.split(""),e=[],f=0;for(f=0;f<d.length;f++){c=d[f];var g=e.join("");l(g,c,b)&&e.push(c)}return e.join("")}function u(a){var b=a.toUpperCase(),c=a.toLowerCase();return a==b&&b!=c?!0:!1}function v(a){var b=a.toUpperCase(),c=a.toLowerCase();return a==c&&b!=c?!0:!1}function w(a){return a.toUpperCase()==a.toLowerCase()?!0:!1}function x(a,b){var c=new B(H+b),d=new B(a),e=c.subtract(d);return e}function y(){var a,b="0123456789".split(""),c={},d=0;for(d=0;d<b.length;d++)a=b[d],c[a]=!0;return c}function z(){var a="abcdefghijklmnopqrstuvwxyz",b=a.toUpperCase(),c=new B(a+b);return c}function A(a,b){if(0==a.length)return!1;var c=a.indexOf(J);if(c>=0)return!1;var d=a.indexOf(I);if(0>d)return!0;var e=a.lastIndexOf(I),f=a.length-e-1;if(3>f)return!1;var g=m(a.substring(d));return g%3>0?!1:!0}function B(a){"string"==typeof a?this.map=C(a):this.map={}}function C(a){var b,c={},d=a.split(""),e=0;for(e=0;e<d.length;e++)b=d[e],c[b]=!0;return c}a.fn.alphanum=function(a){var b=i(a),c=this;return d(c,s,b),this},a.fn.alpha=function(a){var b=i("alpha"),c=i(a,b),e=this;return d(e,s,c),this},a.fn.numeric=function(a){var b=j(a),c=this;return d(c,t,b),c.blur(function(){e(this,a)}),this};var D={allow:"",disallow:"",allowSpace:!0,allowNumeric:!0,allowUpper:!0,allowLower:!0,allowCaseless:!0,allowLatin:!0,allowOtherCharSets:!0,maxLength:NaN},E={allowPlus:!1,allowMinus:!0,allowThouSep:!0,allowDecSep:!0,allowLeadingSpaces:!1,maxDigits:NaN,maxDecimalPlaces:NaN,maxPreDecimalPlaces:NaN,max:NaN,min:NaN},F={alpha:{allowNumeric:!1},upper:{allowNumeric:!1,allowUpper:!0,allowLower:!1,allowCaseless:!0},lower:{allowNumeric:!1,allowUpper:!1,allowLower:!0,allowCaseless:!0}},G={integer:{allowPlus:!1,allowMinus:!0,allowThouSep:!1,allowDecSep:!1},positiveInteger:{allowPlus:!1,allowMinus:!1,allowThouSep:!1,allowDecSep:!1}},H=b()+c(),I=",",J=".",K=y(),L=z();B.prototype.add=function(a){var b=this.clone();for(var c in a.map)b.map[c]=!0;return b},B.prototype.subtract=function(a){var b=this.clone();for(var c in a.map)delete b.map[c];return b},B.prototype.contains=function(a){return this.map[a]?!0:!1},B.prototype.clone=function(){var a=new B;for(var b in this.map)a.map[b]=!0;return a},a.fn.alphanum.backdoorAlphaNum=function(a,b){var c=i(b);return s(a,c)},a.fn.alphanum.backdoorNumeric=function(a,b){var c=j(b);return t(a,c)},a.fn.alphanum.setNumericSeparators=function(a){1==a.thousandsSeparator.length&&1==a.decimalSeparator.length&&(I=a.thousandsSeparator,J=a.decimalSeparator)}}(jQuery),function(a){function b(a,b){if(a.createTextRange){var c=a.createTextRange();c.move("character",b),c.select()}else null!=a.selectionStart&&(a.focus(),a.setSelectionRange(b,b))}function c(a){if("selection"in document){var b=a.createTextRange();try{b.setEndPoint("EndToStart",document.selection.createRange())}catch(c){return 0}return b.text.length}return null!=a.selectionStart?a.selectionStart:void 0}a.fn.alphanum_caret=function(d,e){return"undefined"==typeof d?c(this.get(0)):this.queue(function(c){if(isNaN(d)){var f=a(this).val().indexOf(d);e===!0?f+=d.length:"undefined"!=typeof e&&(f+=e),b(this,f)}else b(this,d);c()})}}(jQuery),function(a){var b=function(a){return a?a.ownerDocument.defaultView||a.ownerDocument.parentWindow:window},c=function(b,c){var d=a.Range.current(b).clone(),e=a.Range(b).select(b);return d.overlaps(e)?(d.compare("START_TO_START",e)<1?(startPos=0,d.move("START_TO_START",e)):(fromElementToCurrent=e.clone(),fromElementToCurrent.move("END_TO_START",d),startPos=fromElementToCurrent.toString().length),d.compare("END_TO_END",e)>=0?endPos=e.toString().length:endPos=startPos+d.toString().length,{start:startPos,end:endPos}):null},d=function(d){var e=b(d);if(void 0!==d.selectionStart)return document.activeElement&&document.activeElement!=d&&d.selectionStart==d.selectionEnd&&0==d.selectionStart?{start:d.value.length,end:d.value.length}:{start:d.selectionStart,end:d.selectionEnd};if(e.getSelection)return c(d,e);try{if("input"==d.nodeName.toLowerCase()){var f=b(d).document.selection.createRange(),g=d.createTextRange();g.setEndPoint("EndToStart",f);var h=g.text.length;return{start:h,end:h+f.text.length}}var i=c(d,e);if(!i)return i;var j=a.Range.current().clone(),k=j.clone().collapse().range,l=j.clone().collapse(!1).range;return k.moveStart("character",-1),l.moveStart("character",-1),0!=i.startPos&&""==k.text&&(i.startPos+=2),0!=i.endPos&&""==l.text&&(i.endPos+=2),i}catch(m){return{start:d.value.length,end:d.value.length}}},e=function(a,c,d){var e=b(a);if(a.setSelectionRange)void 0===d?(a.focus(),a.setSelectionRange(c,c)):(a.select(),a.selectionStart=c,a.selectionEnd=d);else if(a.createTextRange){var f=a.createTextRange();f.moveStart("character",c),d=d||c,f.moveEnd("character",d-a.value.length),f.select()}else if(e.getSelection){var h=e.document,i=e.getSelection(),j=h.createRange(),k=[c,void 0!==d?d:c];g([a],k),j.setStart(k[0].el,k[0].count),j.setEnd(k[1].el,k[1].count),i.removeAllRanges(),i.addRange(j)}else if(e.document.body.createTextRange){var j=document.body.createTextRange();j.moveToElementText(a),j.collapse(),j.moveStart("character",c),j.moveEnd("character",void 0!==d?d:c),j.select()}},f=function(a,b,c,d){"number"==typeof c[0]&&c[0]<b&&(c[0]={el:d,count:c[0]-a}),"number"==typeof c[1]&&c[1]<=b&&(c[1]={el:d,count:c[1]-a})},g=function(a,b,c){var d,e;c=c||0;for(var h=0;a[h];h++)d=a[h],3===d.nodeType||4===d.nodeType?(e=c,c+=d.nodeValue.length,f(e,c,b,d)):8!==d.nodeType&&(c=g(d.childNodes,b,c));return c};jQuery.fn.selection=function(a,b){return void 0!==a?this.each(function(){e(this,a,b)}):d(this[0])},a.fn.selection.getCharElement=g}(jQuery),function(a){"use strict";a.redux=a.redux||{},a(document).ready(function(){a.fn.isOnScreen=function(){if(window){var b=a(window),c={top:b.scrollTop()};c.right=c.left+b.width(),c.bottom=c.top+b.height();var d=this.offset();return d.right=d.left+this.outerWidth(),d.bottom=d.top+this.outerHeight(),!(c.right<d.left||c.left>d.right||c.bottom<d.top||c.top>d.bottom)}},a.redux.hideFields(),a.redux.checkRequired(),a.redux.initEvents(),a.redux.initQtip(),a.redux.tabCheck(),a.redux.notices(),a.redux.tabControl()}),a.redux.ajax_save=function(b){var c=a(document.getElementById("redux_ajax_overlay"));c.fadeIn(),jQuery(".redux-action_bar .spinner").addClass("is-active"),jQuery(".redux-action_bar input").attr("disabled","disabled");var d=jQuery(document.getElementById("redux_notification_bar"));d.slideUp(),jQuery(".redux-save-warn").slideUp(),jQuery(".redux_ajax_save_error").slideUp("medium",function(){jQuery(this).remove()});var e=jQuery(document.getElementById("redux-form-wrapper"));redux.fields.hasOwnProperty("editor")&&a.each(redux.fields.editor,function(a,b){if("undefined"!=typeof tinyMCE){var c=tinyMCE.get(a);c&&c.save()}});var f=e.serialize();e.find("input[type=checkbox]").each(function(){if("undefined"!=typeof a(this).attr("name")){var b=a(this).is(":checked")?a(this).val():"0";f+="&"+a(this).attr("name")+"="+b}}),"redux_save"!=b.attr("name")&&(f+="&"+b.attr("name")+"="+b.val());var g=e.attr("data-nonce");return jQuery.ajax({type:"post",dataType:"json",url:ajaxurl,data:{action:redux.args.opt_name+"_ajax_save",nonce:g,opt_name:redux.args.opt_name,data:f},error:function(a){window.console||(console={}),console.log=console.log||function(a,b){},console.log(redux.ajax.console),console.log(a.responseText),jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),alert(redux.ajax.alert)},success:function(b){if(b.action&&"reload"==b.action)location.reload(!0);else if("success"==b.status){jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),redux.options=b.options,redux.errors=b.errors,redux.warnings=b.warnings,d.html(b.notification_bar).slideDown("fast"),(null!==b.errors||null!==b.warnings)&&a.redux.notices();var e=a(document.getElementById("redux_notification_bar")).find(".saved_notice");e.slideDown(),e.delay(4e3).slideUp()}else jQuery(".redux-action_bar input").removeAttr("disabled"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),c.fadeOut("fast"),jQuery(".wrap h2:first").parent().append('<div class="error redux_ajax_save_error" style="display:none;"><p>'+b.status+"</p></div>"),jQuery(".redux_ajax_save_error").slideDown(),jQuery("html, body").animate({scrollTop:0},"slow")}}),!1},a.redux.initEvents=function(){a(".redux-presets-bar").on("click",function(){window.onbeforeunload=null}),a("#toplevel_page_"+redux.args.slug+" .wp-submenu a, #wp-admin-bar-"+redux.args.slug+" a.ab-item").click(function(b){if((a("#toplevel_page_"+redux.args.slug).hasClass("wp-menu-open")||a(this).hasClass("ab-item"))&&!a(this).parents("ul.ab-submenu:first").hasClass("ab-sub-secondary")&&a(this).attr("href").toLowerCase().indexOf(redux.args.slug+"&tab=")>=0){b.preventDefault();var c=a(this).attr("href").split("&tab=");return a("#"+c[1]+"_section_group_li_a").click(),a(this).parents("ul:first").find(".current").removeClass("current"),a(this).addClass("current"),a(this).parent().addClass("current"),!1}}),a(".redux-action_bar input").on("click",function(b){if(a(this).attr("name")==redux.args.opt_name+"[defaults]"){if(!confirm(redux.args.reset_confirm))return!1}else if(a(this).attr("name")==redux.args.opt_name+"[defaults-section]"&&!confirm(redux.args.reset_section_confirm))return!1;window.onbeforeunload=null,redux.args.ajax_save===!0&&(a.redux.ajax_save(a(this)),b.preventDefault())}),a(".expand_options").click(function(b){b.preventDefault();var c=a(".redux-container");if(a(c).hasClass("fully-expanded")){a(c).removeClass("fully-expanded");var d=a.cookie("redux_current_tab");a(".redux-container:first").find("#"+d+"_section_group").fadeIn(200,function(){0!==a(".redux-container:first").find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()})}return a.redux.expandOptions(a(this).parents(".redux-container:first")),!1}),a(".saved_notice").is(":visible")&&a(".saved_notice").slideDown(),a(document.body).on("change",".redux-field input, .redux-field textarea, .redux-field select",function(){a(this).hasClass("noUpdate")||redux_change(a(this))});var b=a("#redux-footer").height();a("#redux-sticky-padder").css({height:b}),a("#redux-footer-sticky").removeClass("hide"),0!==a("#redux-footer").length&&(a(window).scroll(function(){a.redux.stickyInfo()}),a(window).resize(function(){a.redux.stickyInfo()})),a(".saved_notice").delay(4e3).slideUp()},a.redux.hideFields=function(){a("label[for='redux_hide_field']").each(function(b,c){var d=a(this).parent().parent();a(d).addClass("hidden")})},a.redux.checkRequired=function(){a.redux.required(),a("body").on("change",".redux-main select, .redux-main radio, .redux-main input[type=checkbox], .redux-main input[type=hidden]",function(b){a.redux.check_dependencies(this)}),a("body").on("check_dependencies",function(b,c){a.redux.check_dependencies(c)}),a("td > fieldset:empty,td > div:empty").parent().parent().hide()},a.redux.initQtip=function(){if(a().qtip){var b="",c=redux.args.hints.tip_style.shadow;c===!0&&(b="qtip-shadow");var d="",e=redux.args.hints.tip_style.color;""!==e&&(d="qtip-"+e);var f="",g=redux.args.hints.tip_style.rounded;g===!0&&(f="qtip-rounded");var h="",i=redux.args.hints.tip_style.style;""!==i&&(h="qtip-"+i);var j=b+","+d+","+f+","+h+",redux-qtip";j=j.replace(/,/g," ");var k=redux.args.hints.tip_position.my,l=redux.args.hints.tip_position.at;k=a.redux.verifyPos(k.toLowerCase(),!0),l=a.redux.verifyPos(l.toLowerCase(),!1);var m=redux.args.hints.tip_effect.show.event,n=redux.args.hints.tip_effect.hide.event,o=redux.args.hints.tip_effect.show.effect,p=redux.args.hints.tip_effect.show.duration,q=redux.args.hints.tip_effect.hide.effect,r=redux.args.hints.tip_effect.hide.duration;a("div.redux-dev-qtip").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:{effect:function(){a(this).slideDown(500)},event:"mouseover"},hide:{effect:function(){a(this).slideUp(500)},event:"mouseleave"},style:{classes:"qtip-shadow qtip-light"},position:{my:"top center",at:"bottom center"}})}),a("div.redux-hint-qtip").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:{effect:function(){switch(o){case"slide":a(this).slideDown(p);break;case"fade":a(this).fadeIn(p);break;default:a(this).show()}},event:m},hide:{effect:function(){switch(q){case"slide":a(this).slideUp(r);break;case"fade":a(this).fadeOut(r);break;default:a(this).hide(r)}},event:n},style:{classes:j},position:{my:k,at:l}})}),a("input[qtip-content]").each(function(){a(this).qtip({content:{text:a(this).attr("qtip-content"),title:a(this).attr("qtip-title")},show:"focus",hide:"blur",style:j,position:{my:k,at:l}})})}},a.redux.tabCheck=function(){if(a(".redux-group-tab-link-a").click(function(){var b=a(this);if(b.parent().hasClass("empty_section")&&b.parent().hasClass("hasSubSections")){var c=a(this).closest("ul").find(".redux-group-tab-link-a"),d=c.index(this);b=c.slice(d+1,d+2)}var e=b.parents(".redux-container:first"),f=b.data("rel"),g=e.find(".redux-group-tab-link-li.active:first .redux-group-tab-link-a").data("rel");if(g!==f){if(a("#currentSection").val(f),b.parents(".postbox-container:first").length||a.cookie("redux_current_tab",f,{expires:7,path:"/"}),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length){var h=e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").attr("id").split("_");h=h[0]}if(e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu li.current").removeClass("current"),e.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a").each(function(){var b=a(this).attr("href").split("&tab=");(b[1]==f||b[1]==h)&&(a(this).addClass("current"),a(this).parent().addClass("current"))}),e.find("#"+g+"_section_group_li").find("#"+g+"_section_group_li").length)e.find("#"+g+"_section_group_li").addClass("activeChild"),e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild");else if(e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length||e.find("#"+g+"_section_group_li").parents("ul.subsection").find("#"+f+"_section_group_li").length)e.find("#"+f+"_section_group_li").parents("#"+g+"_section_group_li").length?e.find("#"+g+"_section_group_li").addClass("activeChild").removeClass("active"):(e.find("#"+f+"_section_group_li").addClass("active"),e.find("#"+g+"_section_group_li").removeClass("active")),e.find("#"+f+"_section_group_li").removeClass("activeChild").addClass("active");else if(e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+g+"_section_group_li").find("ul.subsection").length){e.find("#"+g+"_section_group_li").find("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active").removeClass("activeChild")});var i=e.find("#"+f+"_section_group_li").parents(".hasSubSections:first");i.length>0&&(e.find("#"+f+"_section_group_li").removeClass("active"),f=i.find(".redux-group-tab-link-a:first").data("rel"),i.hasClass("empty_section")?(i.find(".subsection li:first").addClass("active"),e.find("#"+f+"_section_group_li").removeClass("active").addClass("activeChild").find("ul.subsection").slideDown(),i=i.find(".subsection li:first"),f=i.find(".redux-group-tab-link-a:first").data("rel")):e.find("#"+f+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown())}else e.find("#"+g+"_section_group_li").parents("ul.subsection").length?e.find("#"+g+"_section_group_li").parents("#"+f+"_section_group_li").length?e.find("#"+g+"_section_group_li").removeClass("active"):e.find("#"+g+"_section_group_li").parents("ul.subsection").slideUp("fast",function(){e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+g+"_section_group_li").parents(".redux-group-tab-link-li").removeClass("active").removeClass("activeChild"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")}):(e.find("#"+g+"_section_group_li").removeClass("active"),e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").length&&(e.find("#"+f+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),e.find("#"+f+"_section_group_li").addClass("active")));e.find("#"+g+"_section_group").hide(),e.find("#"+f+"_section_group").fadeIn(200,function(){0!==e.find("#redux-footer").length&&a.redux.stickyInfo(),a.redux.initFields()}),a("#toplevel_page_"+redux.args.slug).find(".current").removeClass("current")}}),void 0!==redux.last_tab)return void a("#"+redux.last_tab+"_section_group_li_a").click();var b=decodeURI((new RegExp("tab=(.+?)(&|$)").exec(location.search)||[,""])[1]);""!==b?a.cookie("redux_current_tab_get")!==b&&(a.cookie("redux_current_tab",b,{expires:7,path:"/"}),a.cookie("redux_current_tab_get",b,{expires:7,path:"/"}),a("#"+b+"_section_group_li").click()):""!==a.cookie("redux_current_tab_get")&&a.removeCookie("redux_current_tab_get");var c=a("#"+a.cookie("redux_current_tab")+"_section_group_li_a");null===a.cookie("redux_current_tab")||"undefined"==typeof a.cookie("redux_current_tab")||0===c.length?a(".redux-container").find(".redux-group-tab-link-a:first").click():c.click()},a.redux.initFields=function(){a(".redux-group-tab:visible").find(".redux-field-init:visible").each(function(){var b=a(this).attr("data-type");if("undefined"!=typeof redux.field_objects&&redux.field_objects[b]&&redux.field_objects[b]&&redux.field_objects[b].init(),!redux.customizer&&a(this).hasClass("redux_remove_th")){var c=a(this).parents("tr:first"),d=c.find("th:first");d.html()&&d.html().length>0&&(a(this).prepend(d.html()),a(this).find(".redux_field_th").css("padding","0 0 10px 0")),a(this).parent().attr("colspan","2"),d.remove()}})},a.redux.notices=function(){redux.errors&&redux.errors.errors&&(a.each(redux.errors.errors,function(b,c){a.each(c.errors,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-error"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").length?a("#"+redux.args.opt_name+"-"+c.id).append('<div class="redux-th-error">'+c.msg+"</div>"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-error").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-error").remove();var c=b.find(".redux-field-error").length;c>0&&(b.find(".redux-field-errors span").text(c),b.find(".redux-field-errors").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-error").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend('<span class="redux-menu-error">'+c+"</span>"),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasError");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasError")}}))})),redux.warnings&&redux.warnings.warnings&&(a.each(redux.warnings.warnings,function(b,c){a.each(c.warnings,function(b,c){a("#"+redux.args.opt_name+"-"+c.id).addClass("redux-field-warning"),0===a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").length?a("#"+redux.args.opt_name+"-"+c.id).append('<div class="redux-th-warning">'+c.msg+"</div>"):a("#"+redux.args.opt_name+"-"+c.id).parent().find(".redux-th-warning").html(c.msg).css("display","block")})}),a(".redux-container").each(function(){var b=a(this);b.find(".redux-menu-warning").remove();var c=b.find(".redux-field-warning").length;c>0&&(b.find(".redux-field-warnings span").text(c),b.find(".redux-field-warnings").slideDown(),b.find(".redux-group-tab").each(function(){var c=a(this).find(".redux-field-warning").length;if(c>0){var d=a(this).attr("id").split("_");d=d[0],b.find('.redux-group-tab-link-a[data-key="'+d+'"]').prepend('<span class="redux-menu-warning">'+c+"</span>"),b.find('.redux-group-tab-link-a[data-key="'+d+'"]').addClass("hasWarning");var e=b.find('.redux-group-tab-link-a[data-key="'+d+'"]').parents(".hasSubSections:first");e&&e.find(".redux-group-tab-link-a:first").addClass("hasWarning")}}))}))},a.redux.tabControl=function(){a(".redux-section-tabs div").hide(),a(".redux-section-tabs div:first").show(),a(".redux-section-tabs ul li:first").addClass("active"),a(".redux-section-tabs ul li a").click(function(){a(".redux-section-tabs ul li").removeClass("active"),a(this).parent().addClass("active");var b=a(this).attr("href");return a(".redux-section-tabs div").hide(),a(b).fadeIn("medium",function(){a.redux.initFields()}),!1})},a.redux.required=function(){a.each(redux.folds,function(b,c){var d=a("#"+redux.args.opt_name+"-"+b);if(d.parents("tr:first").addClass("fold"),"hide"==c){if(d.parents("tr:first").addClass("hide"),d.hasClass("redux-container-section")){var e=a("#section-"+b);e.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).hide().addClass("hide"),
|
2 |
e.hide().addClass("hide"))}if(d.hasClass("redux-container-info")&&a("#info-"+b).hide().addClass("hide"),d.hasClass("redux-container-divide")&&a("#divide-"+b).hide().addClass("hide"),d.hasClass("redux-container-raw")){var f=d.parents().find("table#"+redux.args.opt_name+"-"+b);f.hide().addClass("hide")}}})},a.redux.get_container_value=function(b){var c=a("#"+redux.args.opt_name+"-"+b).serializeForm();return null!==c&&"object"==typeof c&&c.hasOwnProperty(redux.args.opt_name)&&(c=c[redux.args.opt_name][b]),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-media")&&(c=c.url),c},a.redux.check_dependencies=function(b){if(null!==redux.required){var c=a(b),d=c.parents(".redux-field:first").data("id");if(redux.required.hasOwnProperty(d)){var e=c.parents(".redux-field-container:first"),f=e.parents("tr:first").hasClass(".hide");a.each(redux.required[d],function(b,c){var d=a(this),e=!1,g=a("#"+redux.args.opt_name+"-"+b),h=g.parents("tr:first");if(f||(e=a.redux.check_parents_dependencies(b)),e===!0){if(g.hasClass("redux-container-section")){var i=a("#section-"+b);i.hasClass("redux-section-indent-start")&&i.hasClass("hide")&&(a("#section-table-"+b).fadeIn(300).removeClass("hide"),i.fadeIn(300).removeClass("hide"))}if(g.hasClass("redux-container-info")&&a("#info-"+b).fadeIn(300).removeClass("hide"),g.hasClass("redux-container-divide")&&a("#divide-"+b).fadeIn(300).removeClass("hide"),g.hasClass("redux-container-raw")){var j=g.parents().find("table#"+redux.args.opt_name+"-"+b);j.fadeIn(300).removeClass("hide")}h.fadeIn(300,function(){a(this).removeClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.check_dependencies(a("#"+redux.args.opt_name+"-"+b).children().first()),a.redux.initFields()}),(g.hasClass("redux-container-section")||g.hasClass("redux-container-info"))&&h.css({display:"none"})}else e===!1&&h.fadeOut(100,function(){a(this).addClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.required_recursive_hide(b)});d.find("select, radio, input[type=checkbox]").trigger("change")})}}},a.redux.required_recursive_hide=function(b){var c=a("#"+redux.args.opt_name+"-"+b).parents("tr:first");c.fadeOut(50,function(){if(a(this).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-section")){var c=a("#section-"+b);c.hasClass("redux-section-indent-start")&&(a("#section-table-"+b).fadeOut(50).addClass("hide"),c.fadeOut(50).addClass("hide"))}if(a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-info")&&a("#info-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-divide")&&a("#divide-"+b).fadeOut(50).addClass("hide"),a("#"+redux.args.opt_name+"-"+b).hasClass("redux-container-raw")){var d=a("#"+redux.args.opt_name+"-"+b).parents().find("table#"+redux.args.opt_name+"-"+b);d.fadeOut(50).addClass("hide")}redux.required.hasOwnProperty(b)&&a.each(redux.required[b],function(b){a.redux.required_recursive_hide(b)})})},a.redux.check_parents_dependencies=function(b){var c="";return redux.required_child.hasOwnProperty(b)?a.each(redux.required_child[b],function(b,d){if(a("#"+redux.args.opt_name+"-"+d.parent).parents("tr:first").hasClass(".hide"))c=!1;else if(c!==!1){var e=a.redux.get_container_value(d.parent);c=a.redux.check_dependencies_visibility(e,d)}}):c=!0,c},a.redux.check_dependencies_visibility=function(b,c){var d,e=!1,f=c.checkValue,g=c.operation;switch(g){case"=":case"equals":a.isArray(b)?a(b[0]).each(function(b,c){if(a.isArray(f))a(f).each(function(a,b){return c==b?(e=!0,!0):void 0});else if(c==f)return e=!0,!0}):a.isArray(f)?a(f).each(function(a,c){b==c&&(e=!0)}):b==f&&(e=!0);break;case"!=":case"not":a.isArray(b)?a(b).each(function(b,c){if(a.isArray(f))a(f).each(function(a,b){return c!=b?(e=!0,!0):void 0});else if(c!=f)return e=!0,!0}):a.isArray(f)?a(f).each(function(a,c){b!=c&&(e=!0)}):b!=f&&(e=!0);break;case">":case"greater":case"is_larger":parseFloat(b)>parseFloat(f)&&(e=!0);break;case">=":case"greater_equal":case"is_larger_equal":parseFloat(b)>=parseFloat(f)&&(e=!0);break;case"<":case"less":case"is_smaller":parseFloat(b)<parseFloat(f)&&(e=!0);break;case"<=":case"less_equal":case"is_smaller_equal":parseFloat(b)<=parseFloat(f)&&(e=!0);break;case"contains":a.isPlainObject(b)&&(d=Object.keys(b).map(function(a){return b[a]}),b=d),a.isPlainObject(f)&&(d=Object.keys(f).map(function(a){return f[a]}),f=d),a.isArray(f)?a(f).each(function(a,c){-1!==b.toString().indexOf(c)&&(e=!0)}):-1!==b.toString().indexOf(f)&&(e=!0);break;case"doesnt_contain":case"not_contain":a.isPlainObject(b)&&(d=Object.keys(b).map(function(a){return b[a]}),b=d),a.isPlainObject(f)&&(d=Object.keys(f).map(function(a){return f[a]}),f=d),a.isArray(f)?a(f).each(function(a,c){-1===b.toString().indexOf(c)&&(e=!0)}):-1===b.toString().indexOf(f)&&(e=!0);break;case"is_empty_or":(""===b||b==f)&&(e=!0);break;case"not_empty_and":""!==b&&b!=f&&(e=!0);break;case"is_empty":case"empty":case"!isset":b&&""!==b&&null!==b||(e=!0);break;case"not_empty":case"!empty":case"isset":b&&""!==b&&null!==b&&(e=!0)}return e},a.redux.verifyPos=function(a,b){if(a=a.replace(/^\s+|\s+$/gm,""),""===a||-1==a.search(" "))return b===!0?"top left":"bottom right";var c=a.split(" "),d=b?"top":"bottom";("top"==c[0]||"center"==c[0]||"bottom"==c[0])&&(d=c[0]);var e=b?"left":"right";return("left"==c[1]||"center"==c[1]||"right"==c[1])&&(e=c[1]),d+" "+e},a.redux.stickyInfo=function(){var b=a(".redux-main").innerWidth()-20;a("#info_bar").isOnScreen()||a("#redux-footer-sticky").isOnScreen()?(a("#redux-footer").css({background:"#eee",position:"inherit",bottom:"inherit",width:"inherit"}),a("#redux-sticky-padder").hide(),a("#redux-footer").removeClass("sticky-footer-fixed")):(a("#redux-footer").css({position:"fixed",bottom:"0",width:b,right:21}),a("#redux-footer").addClass("sticky-footer-fixed"),a(".redux-save-warn").css("left",a("#redux-sticky").offset().left),a("#redux-sticky-padder").show()),a("#info_bar").isOnScreen()?a("#redux-sticky").removeClass("sticky-save-warn"):a("#redux-sticky").addClass("sticky-save-warn")},a.redux.expandOptions=function(b){var c=b.find(".expand_options"),d=b.find(".redux-sidebar").width()-1,e=a(".redux-group-menu .active a").data("rel")+"_section_group";return c.hasClass("expanded")?(c.removeClass("expanded"),b.find(".redux-main").removeClass("expand"),b.find(".redux-sidebar").stop().animate({"margin-left":"0px"},500),b.find(".redux-main").stop().animate({"margin-left":d},500,function(){b.find(".redux-main").attr("style","")}),b.find(".redux-group-tab").each(function(){a(this).attr("id")!==e&&a(this).fadeOut("fast")})):(c.addClass("expanded"),b.find(".redux-main").addClass("expand"),b.find(".redux-sidebar").stop().animate({"margin-left":-d-113},500),b.find(".redux-main").stop().animate({"margin-left":"-1px"},500),b.find(".redux-group-tab").fadeIn("medium",function(){a.redux.initFields()})),!1},a.redux.scaleToRatio=function(b,c,d){var e=0,f=b.attr("data-width");f||(f=b.width(),b.attr("data-width",f));var g=b.attr("data-height"),h=b.height();(!g||h>g)&&(g=h,b.attr("data-height",g),b.css("width","auto"),b.attr("data-width",b.width()),f=b.width()),f>d?(e=d/f,b.css("width",d),b.css("height",g*e),g*=e,f*=e):b.css("width","auto"),g>c?(e=c/g,b.css("height",c),b.css("width",f*e),f*=e,g*=e):b.css("height","auto");var i=(a(document.getElementById("redux-header")).height()-b.height())/2;i>0?b.css("margin-top",i):b.css("margin-top",0),a("#redux-header .redux_field_search")&&a("#redux-header .redux_field_search").css("right",a(b).width()+20)},a.redux.resizeAds=function(){var b,c=a("#redux-header");c.length?b=c.width()-c.find(".display_header").width()-30:(c=a("#customize-info"),b=c.width());var d=c.height(),e=c.find(".rAds");a(e).find("video").each(function(){a.redux.scaleToRatio(a(this),d,b)}),a(e).find("img").each(function(){a.redux.scaleToRatio(a(this),d,b)}),a(e).find("div").each(function(){a.redux.scaleToRatio(a(this),d,b)}),"-99999px"==e.css("left")&&e.css("display","none").css("left","auto"),e.fadeIn("slow")},a(document).ready(function(){redux.rAds&&setTimeout(function(){var b;a("#redux-header").length>0?(a("#redux-header").append('<div class="rAds"></div>'),b=a("#redux-header")):(a("#customize-theme-controls ul").first().prepend('<li id="redux_rAds" class="accordion-section rAdsContainer" style="position: relative;"><div class="rAds"></div></li>'),b=a("#redux_rAds")),b.css("position","relative"),b.find(".rAds").attr("style","position:absolute; top: 6px; right: 6px; display:block !important;overflow:hidden;").css("left","-99999px"),b.find(".rAds").html(redux.rAds.replace(/<br\s?\/?>/,""));var c=b.find(".rAds");b.height(),b.width()-b.find(".display_header").width()-30;c.find("a").css("float","right").css("line-height",b.height()+"px").css("margin-left","5px"),a(document).ajaxComplete(function(){c.find("a").hide(),setTimeout(function(){a.redux.resizeAds(),c.find("a").fadeIn()},1400),setTimeout(function(){a.redux.resizeAds()},1500),a(document).unbind("ajaxComplete")}),a(window).resize(function(){a.redux.resizeAds()})},400)})}(jQuery),jQuery.noConflict();var confirmOnPageExit=function(a){a=a||window.event;var b=redux.args.save_pending;return a&&(a.returnValue=b),window.onbeforeunload=null,b};
|
ReduxCore/assets/js/vendor/qtip/jquery.qtip.js
CHANGED
@@ -1,3951 +1,3451 @@
|
|
1 |
/*
|
2 |
-
* qTip2 - Pretty powerful tooltips - v2.2.
|
3 |
* http://qtip2.com
|
4 |
*
|
5 |
-
* Copyright (c)
|
6 |
-
* Released under the MIT
|
7 |
* http://jquery.org/license
|
8 |
*
|
9 |
-
* Date:
|
10 |
* Plugins: tips modal viewport svg imagemap ie6
|
11 |
-
* Styles: basic css3
|
12 |
*/
|
13 |
/*global window: false, jQuery: false, console: false, define: false */
|
14 |
|
15 |
-
|
16 |
-
|
17 |
-
(function( window, document, undefined ) {
|
18 |
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
}
|
25 |
-
else if ( jQuery && !jQuery.fn.qtip ) {
|
26 |
-
factory( jQuery );
|
27 |
-
}
|
28 |
}
|
29 |
-
(
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
/*
|
94 |
-
* iOS version detection
|
95 |
-
*/
|
96 |
-
iOS: parseFloat(
|
97 |
-
('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec( navigator.userAgent ) || [0, ''])[1])
|
98 |
-
.replace( 'undefined', '3_2' ).replace( '_', '.' ).replace( '_', '' )
|
99 |
-
) || FALSE
|
100 |
-
};
|
101 |
-
|
102 |
-
;
|
103 |
-
function QTip( target, options, id, attr ) {
|
104 |
-
// Elements and ID
|
105 |
-
this.id = id;
|
106 |
-
this.target = target;
|
107 |
-
this.tooltip = NULL;
|
108 |
-
this.elements = {target: target};
|
109 |
-
|
110 |
-
// Internal constructs
|
111 |
-
this._id = NAMESPACE + '-' + id;
|
112 |
-
this.timers = {img: {}};
|
113 |
-
this.options = options;
|
114 |
-
this.plugins = {};
|
115 |
-
|
116 |
-
// Cache object
|
117 |
-
this.cache = {
|
118 |
-
event: {},
|
119 |
-
target: $(),
|
120 |
-
disabled: FALSE,
|
121 |
-
attr: attr,
|
122 |
-
onTooltip: FALSE,
|
123 |
-
lastClass: ''
|
124 |
-
};
|
125 |
|
126 |
-
|
127 |
-
|
128 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
}
|
|
|
130 |
|
131 |
-
|
|
|
132 |
|
133 |
-
|
134 |
-
|
135 |
-
|
|
|
|
|
136 |
|
137 |
-
|
138 |
-
|
139 |
-
return this;
|
140 |
-
} // If tooltip has already been rendered, exit
|
141 |
-
|
142 |
-
var self = this,
|
143 |
-
options = this.options,
|
144 |
-
cache = this.cache,
|
145 |
-
elements = this.elements,
|
146 |
-
text = options.content.text,
|
147 |
-
title = options.content.title,
|
148 |
-
button = options.content.button,
|
149 |
-
posOptions = options.position,
|
150 |
-
namespace = '.' + this._id + ' ',
|
151 |
-
deferreds = [],
|
152 |
-
tooltip;
|
153 |
-
|
154 |
-
// Add ARIA attributes to target
|
155 |
-
$.attr( this.target[0], 'aria-describedby', this._id );
|
156 |
-
|
157 |
-
// Create tooltip element
|
158 |
-
this.tooltip = elements.tooltip = tooltip = $(
|
159 |
-
'<div/>', {
|
160 |
-
'id': this._id,
|
161 |
-
'class': [NAMESPACE, CLASS_DEFAULT, options.style.classes, NAMESPACE + '-pos-' + options.position.my.abbrev()].join( ' ' ),
|
162 |
-
'width': options.style.width || '',
|
163 |
-
'height': options.style.height || '',
|
164 |
-
'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse,
|
165 |
-
|
166 |
-
/* ARIA specific attributes */
|
167 |
-
'role': 'alert',
|
168 |
-
'aria-live': 'polite',
|
169 |
-
'aria-atomic': FALSE,
|
170 |
-
'aria-describedby': this._id + '-content',
|
171 |
-
'aria-hidden': TRUE
|
172 |
-
}
|
173 |
-
)
|
174 |
-
.toggleClass( CLASS_DISABLED, this.disabled )
|
175 |
-
.attr( ATTR_ID, this.id )
|
176 |
-
.data( NAMESPACE, this )
|
177 |
-
.appendTo( posOptions.container )
|
178 |
-
.append(
|
179 |
-
// Create content element
|
180 |
-
elements.content = $(
|
181 |
-
'<div />', {
|
182 |
-
'class': NAMESPACE + '-content',
|
183 |
-
'id': this._id + '-content',
|
184 |
-
'aria-atomic': TRUE
|
185 |
-
}
|
186 |
-
)
|
187 |
-
);
|
188 |
|
189 |
-
|
190 |
-
|
191 |
-
|
|
|
|
|
|
|
|
|
192 |
|
193 |
-
|
194 |
-
|
|
|
195 |
|
196 |
-
|
|
|
|
|
|
|
197 |
|
198 |
-
|
199 |
-
|
200 |
-
deferreds.push( this._updateTitle( title, FALSE ) );
|
201 |
-
}
|
202 |
-
}
|
203 |
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
|
|
|
|
208 |
|
209 |
-
|
210 |
-
|
211 |
-
deferreds.push( this._updateContent( text, FALSE ) );
|
212 |
-
}
|
213 |
-
this.rendered = TRUE;
|
214 |
|
215 |
-
|
216 |
-
|
217 |
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
if ( this.initialize === 'render' && (instance = this( self )) ) {
|
223 |
-
self.plugins[name] = instance;
|
224 |
-
}
|
225 |
-
}
|
226 |
-
);
|
227 |
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
// tooltiprender event
|
236 |
-
self._trigger( 'render' );
|
237 |
|
238 |
-
|
239 |
-
|
|
|
|
|
240 |
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
self.hiddenDuringWait = FALSE;
|
246 |
-
}
|
247 |
-
);
|
248 |
|
249 |
-
|
250 |
-
|
|
|
|
|
251 |
|
252 |
-
|
253 |
-
|
|
|
|
|
|
|
254 |
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
return this.target;
|
260 |
-
}
|
261 |
|
262 |
-
|
263 |
-
|
264 |
-
return;
|
265 |
-
}
|
266 |
-
this.destroyed = TRUE;
|
267 |
|
268 |
-
|
269 |
-
|
|
|
|
|
270 |
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
}
|
275 |
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
);
|
282 |
-
|
283 |
-
// Clear timers and remove bound events
|
284 |
-
clearTimeout( this.timers.show );
|
285 |
-
clearTimeout( this.timers.hide );
|
286 |
-
this._unassignEvents();
|
287 |
-
|
288 |
-
// Remove api object and ARIA attributes
|
289 |
-
target.removeData( NAMESPACE )
|
290 |
-
.removeAttr( ATTR_ID )
|
291 |
-
.removeAttr( ATTR_HAS )
|
292 |
-
.removeAttr( 'aria-describedby' );
|
293 |
-
|
294 |
-
// Reset old title attribute if removed
|
295 |
-
if ( this.options.suppress && title ) {
|
296 |
-
target.attr( 'title', title ).removeAttr( oldtitle );
|
297 |
-
}
|
298 |
|
299 |
-
|
300 |
-
|
301 |
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
|
|
306 |
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
!this.triggering && this.hide();
|
315 |
-
}
|
316 |
|
317 |
-
|
318 |
-
else {
|
319 |
-
process.call( this );
|
320 |
-
}
|
321 |
|
322 |
-
|
323 |
-
};
|
|
|
324 |
|
325 |
-
|
326 |
-
|
327 |
-
return a === NULL || $.type( a ) !== 'object';
|
328 |
-
}
|
329 |
|
330 |
-
|
331 |
-
|
|
|
|
|
332 |
}
|
|
|
333 |
|
334 |
-
//
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
}
|
341 |
-
|
342 |
-
if ( invalidOpt( opts.metadata ) ) {
|
343 |
-
opts.metadata = {type: opts.metadata};
|
344 |
-
}
|
345 |
-
|
346 |
-
if ( 'content' in opts ) {
|
347 |
-
content = opts.content;
|
348 |
-
|
349 |
-
if ( invalidOpt( content ) || content.jquery || content.done ) {
|
350 |
-
content = opts.content = {
|
351 |
-
text: (text = invalidContent( content ) ? FALSE : content)
|
352 |
-
};
|
353 |
-
}
|
354 |
-
else {
|
355 |
-
text = content.text;
|
356 |
-
}
|
357 |
-
|
358 |
-
// DEPRECATED - Old content.ajax plugin functionality
|
359 |
-
// Converts it into the proper Deferred syntax
|
360 |
-
if ( 'ajax' in content ) {
|
361 |
-
ajax = content.ajax;
|
362 |
-
once = ajax && ajax.once !== FALSE;
|
363 |
-
delete content.ajax;
|
364 |
-
|
365 |
-
content.text = function( event, api ) {
|
366 |
-
var loading = text || $( this ).attr( api.options.content.attr ) || 'Loading...',
|
367 |
-
|
368 |
-
deferred = $.ajax(
|
369 |
-
$.extend( {}, ajax, {context: api} )
|
370 |
-
)
|
371 |
-
.then( ajax.success, NULL, ajax.error )
|
372 |
-
.then(
|
373 |
-
function( content ) {
|
374 |
-
if ( content && once ) {
|
375 |
-
api.set( 'content.text', content );
|
376 |
-
}
|
377 |
-
return content;
|
378 |
-
},
|
379 |
-
function( xhr, status, error ) {
|
380 |
-
if ( api.destroyed || xhr.status === 0 ) {
|
381 |
-
return;
|
382 |
-
}
|
383 |
-
api.set( 'content.text', status + ': ' + error );
|
384 |
-
}
|
385 |
-
);
|
386 |
-
|
387 |
-
return !once ? (api.set( 'content.text', loading ), deferred) : loading;
|
388 |
-
};
|
389 |
-
}
|
390 |
-
|
391 |
-
if ( 'title' in content ) {
|
392 |
-
if ( !invalidOpt( content.title ) ) {
|
393 |
-
content.button = content.title.button;
|
394 |
-
content.title = content.title.text;
|
395 |
-
}
|
396 |
|
397 |
-
|
398 |
-
|
399 |
-
}
|
400 |
-
}
|
401 |
-
}
|
402 |
|
403 |
-
|
404 |
-
|
405 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
406 |
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
}
|
411 |
|
412 |
-
|
413 |
-
|
|
|
|
|
414 |
}
|
415 |
|
416 |
-
if
|
417 |
-
|
418 |
}
|
419 |
-
|
420 |
-
// Sanitize plugin options
|
421 |
-
$.each(
|
422 |
-
PLUGINS, function() {
|
423 |
-
this.sanitize && this.sanitize( opts );
|
424 |
-
}
|
425 |
-
);
|
426 |
-
|
427 |
-
return opts;
|
428 |
}
|
|
|
429 |
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
// Core checks
|
434 |
-
'^id$': function( obj, o, v, prev ) {
|
435 |
-
var id = v === TRUE ? QTIP.nextid : v,
|
436 |
-
new_id = NAMESPACE + '-' + id;
|
437 |
|
438 |
-
|
439 |
-
|
|
|
|
|
440 |
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
this.elements.title[0].id = this._id + '-title';
|
445 |
-
}
|
446 |
-
}
|
447 |
-
else {
|
448 |
-
obj[o] = prev;
|
449 |
-
}
|
450 |
-
},
|
451 |
-
'^prerender': function( obj, o, v ) {
|
452 |
-
v && !this.rendered && this.render( this.options.show.ready );
|
453 |
-
},
|
454 |
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
},
|
459 |
-
'^content.attr$': function( obj, o, v, prev ) {
|
460 |
-
if ( this.options.content.text === this.target.attr( prev ) ) {
|
461 |
-
this._updateContent( this.target.attr( v ) );
|
462 |
-
}
|
463 |
-
},
|
464 |
-
'^content.title$': function( obj, o, v ) {
|
465 |
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
|
471 |
-
|
472 |
-
|
473 |
-
this._updateTitle( v );
|
474 |
-
},
|
475 |
-
'^content.button$': function( obj, o, v ) {
|
476 |
-
this._updateButton( v );
|
477 |
-
},
|
478 |
-
'^content.title.(text|button)$': function( obj, o, v ) {
|
479 |
-
this.set( 'content.' + o, v ); // Backwards title.text/button compat
|
480 |
-
},
|
481 |
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
489 |
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
},
|
494 |
|
495 |
-
|
496 |
-
|
497 |
-
this.rendered && this.tooltip.removeClass( p ).addClass( v );
|
498 |
-
},
|
499 |
-
'^style.(width|height)': function( obj, o, v ) {
|
500 |
-
this.rendered && this.tooltip.css( o, v );
|
501 |
-
},
|
502 |
-
'^style.widget|content.title': function() {
|
503 |
-
this.rendered && this._setWidget();
|
504 |
-
},
|
505 |
-
'^style.def': function( obj, o, v ) {
|
506 |
-
this.rendered && this.tooltip.toggleClass( CLASS_DEFAULT, !!v );
|
507 |
-
},
|
508 |
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
|
514 |
-
|
515 |
-
|
516 |
-
if ( !this.rendered ) {
|
517 |
-
return;
|
518 |
-
}
|
519 |
|
520 |
-
|
521 |
-
|
522 |
-
this.tooltip.attr( 'tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse );
|
523 |
|
524 |
-
|
525 |
-
|
526 |
-
this._assignEvents();
|
527 |
-
}
|
528 |
-
}
|
529 |
-
};
|
530 |
|
531 |
-
|
532 |
-
|
533 |
-
var i = 0, obj, option = options,
|
534 |
|
535 |
-
|
536 |
-
|
537 |
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
|
|
|
|
|
|
|
|
|
|
542 |
}
|
543 |
}
|
544 |
-
|
545 |
-
return [obj || options, levels.pop()];
|
546 |
}
|
|
|
|
|
547 |
|
548 |
-
|
549 |
-
|
550 |
-
return this;
|
551 |
-
}
|
552 |
-
|
553 |
-
var o = convertNotation( this.options, notation.toLowerCase() ),
|
554 |
-
result = o[0][o[1]];
|
555 |
|
556 |
-
|
557 |
-
|
558 |
|
559 |
-
|
560 |
-
|
|
|
|
|
|
|
561 |
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
|
|
566 |
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
}
|
572 |
-
}
|
573 |
-
}
|
574 |
-
}
|
575 |
}
|
576 |
|
577 |
-
|
578 |
-
|
|
|
|
|
579 |
|
580 |
-
|
581 |
-
|
582 |
-
return this;
|
583 |
-
}
|
584 |
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
checks = this.checks,
|
589 |
-
name;
|
590 |
-
|
591 |
-
// Convert singular option/value pair into object form
|
592 |
-
if ( 'string' === typeof option ) {
|
593 |
-
name = option;
|
594 |
-
option = {};
|
595 |
-
option[name] = value;
|
596 |
-
}
|
597 |
-
else {
|
598 |
-
option = $.extend( {}, option );
|
599 |
-
}
|
600 |
|
601 |
-
|
602 |
-
|
603 |
-
option, function( notation, value ) {
|
604 |
-
if ( rendered && rrender.test( notation ) ) {
|
605 |
-
delete option[notation];
|
606 |
-
return;
|
607 |
-
}
|
608 |
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
|
|
|
|
|
|
613 |
|
614 |
-
|
615 |
-
|
|
|
|
|
616 |
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
|
|
621 |
|
622 |
-
|
623 |
-
|
624 |
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
this.positioning = TRUE;
|
630 |
-
$.each( option, $.proxy( setCallback, this ) );
|
631 |
-
this.positioning = FALSE;
|
632 |
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
637 |
|
638 |
-
|
639 |
-
|
640 |
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
|
|
|
|
645 |
|
646 |
-
|
647 |
-
|
648 |
-
return FALSE;
|
649 |
-
}
|
650 |
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
|
|
|
|
|
|
655 |
|
656 |
-
|
657 |
-
|
658 |
-
cache.waiting = TRUE;
|
659 |
-
return content.then(
|
660 |
-
function( c ) {
|
661 |
-
cache.waiting = FALSE;
|
662 |
-
return self._update( c, element );
|
663 |
-
}, NULL, function( e ) {
|
664 |
-
return self._update( e, element );
|
665 |
-
}
|
666 |
-
);
|
667 |
-
}
|
668 |
|
669 |
-
|
670 |
-
|
671 |
-
return FALSE;
|
672 |
-
}
|
673 |
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
}
|
680 |
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
}
|
685 |
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
695 |
|
696 |
-
|
697 |
-
|
|
|
|
|
698 |
|
699 |
-
|
700 |
-
|
|
|
|
|
701 |
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
cache.waiting = FALSE;
|
707 |
-
}
|
708 |
-
)
|
709 |
-
.promise();
|
710 |
-
};
|
711 |
|
712 |
-
|
713 |
-
|
714 |
-
|
|
|
|
|
715 |
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
};
|
721 |
|
722 |
-
|
723 |
-
|
724 |
-
|
|
|
|
|
|
|
725 |
|
726 |
-
|
727 |
-
|
728 |
-
|
|
|
|
|
|
|
729 |
}
|
730 |
-
|
731 |
-
|
732 |
-
elements.titlebar = $(
|
733 |
-
'<div />', {
|
734 |
-
'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass( 'header' ) : '')
|
735 |
-
}
|
736 |
-
)
|
737 |
-
.append(
|
738 |
-
elements.title = $(
|
739 |
-
'<div />', {
|
740 |
-
'id': id,
|
741 |
-
'class': NAMESPACE + '-title',
|
742 |
-
'aria-atomic': TRUE
|
743 |
-
}
|
744 |
-
)
|
745 |
-
)
|
746 |
-
.insertBefore( elements.content )
|
747 |
-
|
748 |
-
// Button-specific events
|
749 |
-
.delegate(
|
750 |
-
'.qtip-close', 'mousedown keydown mouseup keyup mouseout', function( event ) {
|
751 |
-
$( this ).toggleClass(
|
752 |
-
'ui-state-active ui-state-focus', event.type.substr( -4 ) === 'down'
|
753 |
-
);
|
754 |
-
}
|
755 |
-
)
|
756 |
-
.delegate(
|
757 |
-
'.qtip-close', 'mouseover mouseout', function( event ) {
|
758 |
-
$( this ).toggleClass( 'ui-state-hover', event.type === 'mouseover' );
|
759 |
-
}
|
760 |
-
);
|
761 |
-
|
762 |
-
// Create button if enabled
|
763 |
-
if ( this.options.content.button ) {
|
764 |
-
this._createButton();
|
765 |
}
|
766 |
-
}
|
|
|
|
|
|
|
|
|
767 |
|
768 |
-
|
769 |
-
|
|
|
770 |
|
771 |
-
|
772 |
-
|
773 |
-
|
|
|
774 |
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
|
|
779 |
}
|
780 |
-
}
|
781 |
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
}
|
787 |
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
tooltip = this.tooltip,
|
793 |
-
posOptions = this.options.position,
|
794 |
-
target = posOptions.target,
|
795 |
-
my = posOptions.my,
|
796 |
-
at = posOptions.at,
|
797 |
-
viewport = posOptions.viewport,
|
798 |
-
container = posOptions.container,
|
799 |
-
adjust = posOptions.adjust,
|
800 |
-
method = adjust.method.split( ' ' ),
|
801 |
-
tooltipWidth = tooltip.outerWidth( FALSE ),
|
802 |
-
tooltipHeight = tooltip.outerHeight( FALSE ),
|
803 |
-
targetWidth = 0,
|
804 |
-
targetHeight = 0,
|
805 |
-
type = tooltip.css( 'position' ),
|
806 |
-
position = {left: 0, top: 0},
|
807 |
-
visible = tooltip[0].offsetWidth > 0,
|
808 |
-
isScroll = event && event.type === 'scroll',
|
809 |
-
win = $( window ),
|
810 |
-
doc = container[0].ownerDocument,
|
811 |
-
mouse = this.mouse,
|
812 |
-
pluginCalculations, offset;
|
813 |
-
|
814 |
-
// Check if absolute position was passed
|
815 |
-
if ( $.isArray( target ) && target.length === 2 ) {
|
816 |
-
// Force left top and set position
|
817 |
-
at = {x: LEFT, y: TOP};
|
818 |
-
position = {left: target[0], top: target[1]};
|
819 |
-
}
|
820 |
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
|
|
|
|
825 |
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
|
|
|
|
|
|
830 |
|
831 |
-
|
832 |
-
|
833 |
-
// Use the mouse origin that caused the show event, if distance hiding is enabled
|
834 |
-
if ( (!adjust.mouse || this.options.show.distance) && cache.origin && cache.origin.pageX ) {
|
835 |
-
event = cache.origin;
|
836 |
-
}
|
837 |
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
|
|
|
|
|
|
843 |
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
}
|
851 |
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
top: event.pageY - position.top + (offset && offset.top || 0)
|
856 |
-
};
|
857 |
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
}
|
864 |
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
if ( target === 'event' ) {
|
869 |
-
if ( event && event.target && event.type !== 'scroll' && event.type !== 'resize' ) {
|
870 |
-
cache.target = $( event.target );
|
871 |
-
}
|
872 |
-
else if ( !event.target ) {
|
873 |
-
cache.target = this.elements.target;
|
874 |
-
}
|
875 |
-
}
|
876 |
-
else if ( target !== 'event' ) {
|
877 |
-
cache.target = $( target.jquery ? target : this.elements.target );
|
878 |
-
}
|
879 |
-
target = cache.target;
|
880 |
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
return this;
|
885 |
-
}
|
886 |
|
887 |
-
|
888 |
-
|
889 |
-
targetWidth = BROWSER.iOS ? window.innerWidth : target.width();
|
890 |
-
targetHeight = BROWSER.iOS ? window.innerHeight : target.height();
|
891 |
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
};
|
897 |
-
}
|
898 |
-
}
|
899 |
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
this, target, at, PLUGINS.viewport ? method : FALSE
|
904 |
-
);
|
905 |
-
}
|
906 |
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
|
|
918 |
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
targetHeight = pluginCalculations.height;
|
923 |
-
offset = pluginCalculations.offset;
|
924 |
-
position = pluginCalculations.position;
|
925 |
-
}
|
926 |
|
927 |
-
|
928 |
-
|
929 |
|
930 |
-
|
931 |
-
|
932 |
-
(BROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33) ||
|
933 |
-
(!BROWSER.iOS && type === 'fixed')
|
934 |
-
) {
|
935 |
-
position.left -= win.scrollLeft();
|
936 |
-
position.top -= win.scrollTop();
|
937 |
-
}
|
938 |
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0;
|
943 |
-
}
|
944 |
-
}
|
945 |
|
946 |
-
|
947 |
-
|
948 |
-
|
|
|
949 |
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
);
|
955 |
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
}
|
963 |
}
|
964 |
-
|
965 |
-
// Viewport adjustment is disabled, set values to zero
|
966 |
else {
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
// tooltipmove event
|
971 |
-
if ( !this._trigger( 'move', [position, viewport.elem || viewport], event ) ) {
|
972 |
-
return this;
|
973 |
}
|
974 |
-
delete position.adjusted;
|
975 |
|
976 |
-
|
977 |
-
|
978 |
-
tooltip.css( position );
|
979 |
-
}
|
980 |
|
981 |
-
//
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
// Reset attributes to avoid cross-browser rendering bugs
|
987 |
-
$( this ).css( {opacity: '', height: ''} );
|
988 |
-
if ( BROWSER.ie ) {
|
989 |
-
this.style.removeAttribute( 'filter' );
|
990 |
-
}
|
991 |
-
|
992 |
-
next();
|
993 |
-
}
|
994 |
-
);
|
995 |
-
}
|
996 |
|
997 |
-
|
998 |
-
|
|
|
|
|
999 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1000 |
return this;
|
1001 |
-
}
|
1002 |
|
1003 |
-
//
|
1004 |
-
|
1005 |
-
|
1006 |
-
return pos;
|
1007 |
-
}
|
1008 |
|
1009 |
-
|
1010 |
-
|
1011 |
-
parent = container[0],
|
1012 |
-
scrolled, position, parentOffset, overflow;
|
1013 |
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
}
|
1018 |
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
parentOffset.top += (parseFloat( $.css( parent, 'borderTopWidth' ) ) || 0);
|
1030 |
-
}
|
1031 |
|
1032 |
-
|
1033 |
-
|
1034 |
|
1035 |
-
|
1036 |
-
|
1037 |
-
parent, 'overflow'
|
1038 |
-
)) !== 'hidden' && overflow !== 'visible' ) {
|
1039 |
-
scrolled = $( parent );
|
1040 |
-
}
|
1041 |
-
}
|
1042 |
-
}
|
1043 |
-
while ( (parent = parent.offsetParent) );
|
1044 |
|
1045 |
-
|
1046 |
-
|
1047 |
-
scroll( scrolled, 1 );
|
1048 |
-
}
|
1049 |
|
1050 |
-
|
1051 |
-
|
1052 |
|
1053 |
-
|
1054 |
-
|
1055 |
-
corner = ('' + corner).replace( /([A-Z])/, ' $1' ).replace( /middle/gi, CENTER ).toLowerCase();
|
1056 |
-
this.x = (corner.match( /left|right/i ) || corner.match( /center/ ) || ['inherit'])[0].toLowerCase();
|
1057 |
-
this.y = (corner.match( /top|bottom|center/i ) || ['inherit'])[0].toLowerCase();
|
1058 |
-
this.forceY = !!forceY;
|
1059 |
|
1060 |
-
|
1061 |
-
|
1062 |
-
}).prototype;
|
1063 |
|
1064 |
-
|
1065 |
-
|
1066 |
-
};
|
1067 |
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
};
|
1077 |
-
|
1078 |
-
C.clone = function() {
|
1079 |
-
return new CORNER( this.string(), this.forceY );
|
1080 |
-
};
|
1081 |
-
;
|
1082 |
-
PROTOTYPE.toggle = function( state, event ) {
|
1083 |
-
var cache = this.cache,
|
1084 |
-
options = this.options,
|
1085 |
-
tooltip = this.tooltip;
|
1086 |
-
|
1087 |
-
// Try to prevent flickering when tooltip overlaps show element
|
1088 |
-
if ( event ) {
|
1089 |
-
if ( (/over|enter/).test( event.type ) && (/out|leave/).test( cache.event.type ) &&
|
1090 |
-
options.show.target.add( event.target ).length === options.show.target.length &&
|
1091 |
-
tooltip.has( event.relatedTarget ).length ) {
|
1092 |
-
return this;
|
1093 |
-
}
|
1094 |
-
|
1095 |
-
// Cache event
|
1096 |
-
cache.event = cloneEvent( event );
|
1097 |
-
}
|
1098 |
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
return state ? this.render( 1 ) : this;
|
1105 |
-
}
|
1106 |
-
else if ( this.destroyed || this.disabled ) {
|
1107 |
-
return this;
|
1108 |
-
}
|
1109 |
-
|
1110 |
-
var type = state ? 'show' : 'hide',
|
1111 |
-
opts = this.options[type],
|
1112 |
-
otherOpts = this.options[!state ? 'show' : 'hide'],
|
1113 |
-
posOptions = this.options.position,
|
1114 |
-
contentOptions = this.options.content,
|
1115 |
-
width = this.tooltip.css( 'width' ),
|
1116 |
-
visible = this.tooltip.is( ':visible' ),
|
1117 |
-
animate = state || opts.target.length === 1,
|
1118 |
-
sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target,
|
1119 |
-
identicalState, allow, showEvent, delay, after;
|
1120 |
-
|
1121 |
-
// Detect state if valid one isn't provided
|
1122 |
-
if ( (typeof state).search( 'boolean|number' ) ) {
|
1123 |
-
state = !visible;
|
1124 |
-
}
|
1125 |
-
|
1126 |
-
// Check if the tooltip is in an identical state to the new would-be state
|
1127 |
-
identicalState = !tooltip.is( ':animated' ) && visible === state && sameTarget;
|
1128 |
-
|
1129 |
-
// Fire tooltip(show/hide) event and check if destroyed
|
1130 |
-
allow = !identicalState ? !!this._trigger( type, [90] ) : NULL;
|
1131 |
-
|
1132 |
-
// Check to make sure the tooltip wasn't destroyed in the callback
|
1133 |
-
if ( this.destroyed ) {
|
1134 |
-
return this;
|
1135 |
-
}
|
1136 |
-
|
1137 |
-
// If the user didn't stop the method prematurely and we're showing the tooltip, focus it
|
1138 |
-
if ( allow !== FALSE && state ) {
|
1139 |
-
this.focus( event );
|
1140 |
-
}
|
1141 |
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
|
1147 |
-
|
1148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1149 |
|
1150 |
-
|
1151 |
-
|
1152 |
-
// Store show origin coordinates
|
1153 |
-
cache.origin = cloneEvent( this.mouse );
|
1154 |
|
1155 |
-
|
1156 |
-
|
1157 |
-
|
1158 |
-
|
1159 |
-
|
1160 |
-
this._updateTitle( contentOptions.title, FALSE );
|
1161 |
-
}
|
1162 |
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
trackingBound = TRUE;
|
1167 |
-
}
|
1168 |
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
if ( !width ) {
|
1175 |
-
tooltip.css( 'width', '' );
|
1176 |
-
}
|
1177 |
|
1178 |
-
|
1179 |
-
|
1180 |
-
(typeof opts.solo === 'string' ? $( opts.solo ) : $( SELECTOR, opts.solo ))
|
1181 |
-
.not( tooltip ).not( opts.target ).qtip( 'hide', $.Event( 'tooltipsolo' ) );
|
1182 |
-
}
|
1183 |
-
}
|
1184 |
-
else {
|
1185 |
-
// Clear show timer if we're hiding
|
1186 |
-
clearTimeout( this.timers.show );
|
1187 |
-
|
1188 |
-
// Remove cached origin on hide
|
1189 |
-
delete cache.origin;
|
1190 |
-
|
1191 |
-
// Remove mouse tracking event if not needed (all tracking qTips are hidden)
|
1192 |
-
if ( trackingBound && !$(
|
1193 |
-
SELECTOR + '[tracking="true"]:visible', opts.solo
|
1194 |
-
).not( tooltip ).length ) {
|
1195 |
-
$( document ).unbind( 'mousemove.' + NAMESPACE );
|
1196 |
-
trackingBound = FALSE;
|
1197 |
-
}
|
1198 |
|
1199 |
-
|
1200 |
-
|
|
|
1201 |
}
|
1202 |
|
1203 |
-
//
|
1204 |
-
|
1205 |
-
|
1206 |
-
|
1207 |
-
|
1208 |
-
|
1209 |
-
|
1210 |
-
|
1211 |
-
|
1212 |
-
|
1213 |
-
|
1214 |
-
|
1215 |
-
|
1216 |
-
if ( 'string' === typeof opts.autofocus ) {
|
1217 |
-
$( this.options.show.autofocus, tooltip ).focus();
|
1218 |
-
}
|
1219 |
-
|
1220 |
-
// If set, hide tooltip when inactive for delay period
|
1221 |
-
this.options.show.target.trigger( 'qtip-' + this.id + '-inactive' );
|
1222 |
-
}
|
1223 |
-
else {
|
1224 |
-
// Reset CSS states
|
1225 |
-
tooltip.css(
|
1226 |
-
{
|
1227 |
-
display: '',
|
1228 |
-
visibility: '',
|
1229 |
-
opacity: '',
|
1230 |
-
left: '',
|
1231 |
-
top: ''
|
1232 |
-
}
|
1233 |
-
);
|
1234 |
-
}
|
1235 |
|
1236 |
-
|
1237 |
-
|
1238 |
-
|
1239 |
-
);
|
1240 |
|
1241 |
-
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
|
1247 |
-
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
|
1254 |
-
|
1255 |
-
}
|
1256 |
-
);
|
1257 |
-
}
|
1258 |
|
1259 |
-
|
1260 |
-
|
1261 |
-
tooltip.fadeTo( 90, state ? 1 : 0, after );
|
1262 |
-
}
|
1263 |
|
1264 |
-
|
1265 |
-
|
1266 |
-
opts.target.trigger( 'qtip-' + this.id + '-inactive' );
|
1267 |
-
}
|
1268 |
|
1269 |
-
|
1270 |
-
|
1271 |
|
1272 |
-
|
1273 |
-
return this.toggle( TRUE, event );
|
1274 |
-
};
|
1275 |
|
1276 |
-
|
1277 |
-
|
1278 |
-
|
1279 |
|
1280 |
-
|
1281 |
-
|
1282 |
-
|
1283 |
-
|
1284 |
-
|
1285 |
|
1286 |
-
|
1287 |
-
|
1288 |
-
|
1289 |
-
|
1290 |
-
|
1291 |
-
|
1292 |
-
|
1293 |
-
|
1294 |
-
|
1295 |
-
|
1296 |
-
// Only update z-index's if they've changed
|
1297 |
-
if ( curIndex !== newIndex ) {
|
1298 |
-
// Reduce our z-index's and keep them properly ordered
|
1299 |
-
qtips.each(
|
1300 |
-
function() {
|
1301 |
-
if ( this.style.zIndex > curIndex ) {
|
1302 |
-
this.style.zIndex = this.style.zIndex - 1;
|
1303 |
-
}
|
1304 |
-
}
|
1305 |
-
);
|
1306 |
-
|
1307 |
-
// Fire blur event for focused tooltip
|
1308 |
-
qtips.filter( '.' + CLASS_FOCUS ).qtip( 'blur', event );
|
1309 |
}
|
|
|
1310 |
|
1311 |
-
|
1312 |
-
|
1313 |
-
}
|
1314 |
-
}
|
1315 |
-
|
1316 |
-
return this;
|
1317 |
-
};
|
1318 |
-
|
1319 |
-
PROTOTYPE.blur = function( event ) {
|
1320 |
-
if ( !this.rendered || this.destroyed ) {
|
1321 |
-
return this;
|
1322 |
}
|
1323 |
|
1324 |
-
// Set
|
1325 |
-
|
1326 |
-
|
1327 |
-
|
1328 |
-
this._trigger( 'blur', [this.tooltip.css( 'zIndex' )], event );
|
1329 |
-
|
1330 |
-
return this;
|
1331 |
-
};
|
1332 |
|
1333 |
-
|
1334 |
-
|
1335 |
-
if ( this.destroyed ) {
|
1336 |
-
return this;
|
1337 |
-
}
|
1338 |
|
1339 |
-
|
1340 |
-
|
1341 |
-
state = !(this.rendered ? this.tooltip.hasClass( CLASS_DISABLED ) : this.disabled);
|
1342 |
-
}
|
1343 |
|
1344 |
-
|
1345 |
-
|
1346 |
-
state = TRUE;
|
1347 |
-
}
|
1348 |
|
1349 |
-
|
1350 |
-
|
1351 |
-
.attr( 'aria-disabled', state );
|
1352 |
-
}
|
1353 |
|
1354 |
-
|
|
|
|
|
|
|
1355 |
|
1356 |
-
|
1357 |
-
|
|
|
|
|
1358 |
|
1359 |
-
|
1360 |
-
|
1361 |
-
|
|
|
1362 |
|
1363 |
-
|
1364 |
-
|
1365 |
-
|
1366 |
-
|
1367 |
-
tooltip = elements.tooltip,
|
1368 |
-
button = this.options.content.button,
|
1369 |
-
isString = typeof button === 'string',
|
1370 |
-
close = isString ? button : 'Close tooltip';
|
1371 |
-
|
1372 |
-
if ( elements.button ) {
|
1373 |
-
elements.button.remove();
|
1374 |
-
}
|
1375 |
|
1376 |
-
|
1377 |
-
if ( button.jquery ) {
|
1378 |
-
elements.button = button;
|
1379 |
-
}
|
1380 |
-
else {
|
1381 |
-
elements.button = $(
|
1382 |
-
'<a />', {
|
1383 |
-
'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE + '-icon'),
|
1384 |
-
'title': close,
|
1385 |
-
'aria-label': close
|
1386 |
-
}
|
1387 |
-
)
|
1388 |
-
.prepend(
|
1389 |
-
$(
|
1390 |
-
'<span />', {
|
1391 |
-
'class': 'ui-icon ui-icon-close',
|
1392 |
-
'html': '×'
|
1393 |
-
}
|
1394 |
-
)
|
1395 |
-
);
|
1396 |
-
}
|
1397 |
|
1398 |
-
|
1399 |
-
|
1400 |
-
.attr( 'role', 'button' )
|
1401 |
-
.click(
|
1402 |
-
function( event ) {
|
1403 |
-
if ( !tooltip.hasClass( CLASS_DISABLED ) ) {
|
1404 |
-
self.hide( event );
|
1405 |
-
}
|
1406 |
-
return FALSE;
|
1407 |
-
}
|
1408 |
-
);
|
1409 |
-
};
|
1410 |
|
1411 |
-
|
1412 |
-
|
1413 |
-
|
1414 |
-
|
1415 |
-
|
|
|
|
|
|
|
|
|
1416 |
|
1417 |
-
|
1418 |
-
if ( button ) {
|
1419 |
-
this._createButton();
|
1420 |
-
}
|
1421 |
-
else {
|
1422 |
-
elem.remove();
|
1423 |
-
}
|
1424 |
-
};
|
1425 |
|
1426 |
-
|
1427 |
-
|
1428 |
-
|
1429 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1430 |
|
1431 |
-
|
1432 |
-
|
1433 |
-
|
1434 |
-
|
1435 |
-
|
1436 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1437 |
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
|
|
|
|
|
|
|
|
1441 |
|
1442 |
-
|
1443 |
-
|
1444 |
-
|
1445 |
|
1446 |
-
|
1447 |
-
elements.content.toggleClass( createWidgetClass( 'content' ), on );
|
1448 |
-
}
|
1449 |
-
if ( elements.titlebar ) {
|
1450 |
-
elements.titlebar.toggleClass( createWidgetClass( 'header' ), on );
|
1451 |
-
}
|
1452 |
-
if ( elements.button ) {
|
1453 |
-
elements.button.toggleClass( NAMESPACE + '-icon', !on );
|
1454 |
-
}
|
1455 |
-
};
|
1456 |
-
;
|
1457 |
-
function cloneEvent( event ) {
|
1458 |
-
return event && {
|
1459 |
-
type: event.type,
|
1460 |
-
pageX: event.pageX,
|
1461 |
-
pageY: event.pageY,
|
1462 |
-
target: event.target,
|
1463 |
-
relatedTarget: event.relatedTarget,
|
1464 |
-
scrollX: event.scrollX || window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft,
|
1465 |
-
scrollY: event.scrollY || window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop
|
1466 |
-
} || {};
|
1467 |
-
}
|
1468 |
-
|
1469 |
-
function delay( callback, duration ) {
|
1470 |
-
// If tooltip has displayed, start hide timer
|
1471 |
-
if ( duration > 0 ) {
|
1472 |
-
return setTimeout(
|
1473 |
-
$.proxy( callback, this ), duration
|
1474 |
-
);
|
1475 |
-
}
|
1476 |
-
else {
|
1477 |
-
callback.call( this );
|
1478 |
-
}
|
1479 |
-
}
|
1480 |
|
1481 |
-
|
1482 |
-
|
1483 |
-
|
1484 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1485 |
|
1486 |
-
|
1487 |
-
|
1488 |
-
clearTimeout( this.timers.hide );
|
1489 |
|
1490 |
-
|
1491 |
-
|
1492 |
-
|
1493 |
-
function() {
|
1494 |
-
this.toggle( TRUE, event );
|
1495 |
-
},
|
1496 |
-
this.options.show.delay
|
1497 |
-
);
|
1498 |
-
}
|
1499 |
|
1500 |
-
|
1501 |
-
|
1502 |
-
|
1503 |
-
|
|
|
|
|
1504 |
|
1505 |
-
|
1506 |
-
|
1507 |
-
|
1508 |
-
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
1512 |
-
|
1513 |
-
|
1514 |
-
|
1515 |
-
|
1516 |
-
|
1517 |
-
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1526 |
|
1527 |
-
|
1528 |
-
|
|
|
|
|
|
|
|
|
|
|
1529 |
|
1530 |
-
|
1531 |
-
|
1532 |
-
this,
|
1533 |
-
function() {
|
1534 |
-
this.toggle( FALSE, event );
|
1535 |
-
},
|
1536 |
-
this.options.hide.delay,
|
1537 |
-
this
|
1538 |
-
);
|
1539 |
-
}
|
1540 |
|
1541 |
-
|
1542 |
-
|
1543 |
-
return FALSE;
|
1544 |
-
}
|
1545 |
|
1546 |
-
|
1547 |
-
|
|
|
|
|
|
|
1548 |
|
1549 |
-
|
1550 |
-
|
1551 |
-
|
1552 |
-
this.hide( event );
|
1553 |
-
},
|
1554 |
-
this.options.hide.inactive
|
1555 |
-
);
|
1556 |
-
}
|
1557 |
|
1558 |
-
|
1559 |
-
|
1560 |
-
|
1561 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1562 |
}
|
1563 |
-
|
1564 |
-
|
1565 |
-
|
1566 |
-
|
1567 |
-
|
1568 |
-
|
1569 |
-
|
1570 |
-
|
1571 |
-
|
1572 |
-
|
1573 |
-
|
1574 |
-
|
1575 |
-
|
1576 |
-
|
1577 |
-
|
1578 |
-
|
1579 |
-
|
1580 |
-
|
1581 |
-
|
1582 |
-
|
1583 |
-
|
1584 |
-
|
1585 |
-
|
1586 |
-
|
1587 |
-
|
1588 |
-
|
1589 |
-
|
1590 |
-
|
1591 |
-
|
1592 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1593 |
}
|
|
|
1594 |
|
1595 |
-
|
1596 |
-
|
1597 |
-
|
1598 |
-
|
1599 |
-
|
1600 |
-
|
1601 |
-
|
1602 |
-
|
1603 |
-
|
1604 |
-
|
1605 |
-
|
1606 |
-
|
1607 |
-
|
1608 |
-
|
1609 |
-
|
1610 |
-
|
1611 |
-
|
1612 |
-
|
1613 |
-
|
1614 |
-
|
1615 |
-
|
1616 |
-
|
1617 |
-
|
1618 |
-
|
1619 |
-
}
|
1620 |
-
}
|
1621 |
-
|
1622 |
-
// Add hover class
|
1623 |
-
tooltip.toggleClass( CLASS_HOVER, state );
|
1624 |
-
}
|
1625 |
-
);
|
1626 |
|
1627 |
-
|
1628 |
-
|
1629 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1630 |
);
|
|
|
1631 |
|
1632 |
-
|
1633 |
-
|
1634 |
-
|
1635 |
-
|
1636 |
-
|
1637 |
-
|
1638 |
-
|
1639 |
-
|
1640 |
-
|
1641 |
-
|
1642 |
-
|
1643 |
-
|
1644 |
-
|
1645 |
-
|
1646 |
-
|
1647 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1648 |
|
1649 |
-
|
1650 |
-
|
1651 |
-
|
1652 |
-
|
1653 |
|
1654 |
-
|
1655 |
-
|
1656 |
-
|
1657 |
-
|
1658 |
-
|
1659 |
-
|
|
|
|
|
|
|
1660 |
|
1661 |
-
|
1662 |
-
|
1663 |
-
|
|
|
|
|
|
|
1664 |
|
1665 |
-
|
1666 |
-
|
1667 |
-
|
1668 |
-
|
1669 |
-
(state ? hideMethod : showMethod).call( this, event );
|
1670 |
-
}
|
1671 |
-
);
|
1672 |
}
|
|
|
|
|
1673 |
|
1674 |
-
|
1675 |
-
|
1676 |
-
|
1677 |
-
|
1678 |
|
1679 |
-
|
1680 |
-
|
1681 |
-
|
1682 |
-
hideTarget = options.hide.target,
|
1683 |
-
showEvents = options.show.event ? $.trim( '' + options.show.event ).split( ' ' ) : [],
|
1684 |
-
hideEvents = options.hide.event ? $.trim( '' + options.hide.event ).split( ' ' ) : [];
|
1685 |
-
|
1686 |
-
/*
|
1687 |
-
* Make sure hoverIntent functions properly by using mouseleave as a hide event if
|
1688 |
-
* mouseenter/mouseout is used for show.event, even if it isn't in the users options.
|
1689 |
-
*/
|
1690 |
-
if ( /mouse(over|enter)/i.test( options.show.event ) && !/mouse(out|leave)/i.test( options.hide.event ) ) {
|
1691 |
-
hideEvents.push( 'mouseleave' );
|
1692 |
-
}
|
1693 |
|
1694 |
-
|
1695 |
-
|
1696 |
-
* on show targets before the tooltip has rendered. Also set onTarget when triggered to
|
1697 |
-
* keep mouse tracking working.
|
1698 |
-
*/
|
1699 |
-
this._bind(
|
1700 |
-
showTarget, 'mousemove', function( event ) {
|
1701 |
-
this._storeMouse( event );
|
1702 |
-
this.cache.onTarget = TRUE;
|
1703 |
-
}
|
1704 |
-
);
|
1705 |
|
1706 |
-
|
1707 |
-
|
1708 |
-
|
1709 |
-
|
1710 |
-
|
1711 |
-
|
|
|
1712 |
|
1713 |
-
|
1714 |
-
|
1715 |
-
this.
|
1716 |
-
|
1717 |
-
// Start the event sequence
|
1718 |
-
clearTimeout( this.timers.show );
|
1719 |
-
this.timers.show = delay.call(
|
1720 |
-
this,
|
1721 |
-
function() {
|
1722 |
-
this.render( typeof event === 'object' || options.show.ready );
|
1723 |
-
},
|
1724 |
-
options.show.delay
|
1725 |
-
);
|
1726 |
}
|
|
|
1727 |
|
1728 |
-
|
1729 |
-
|
1730 |
-
|
1731 |
-
|
1732 |
-
|
1733 |
-
|
1734 |
-
|
1735 |
-
|
1736 |
-
|
1737 |
-
|
1738 |
-
|
1739 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1740 |
|
1741 |
-
|
1742 |
-
|
1743 |
-
|
1744 |
-
|
1745 |
-
posOptions = options.position,
|
1746 |
-
|
1747 |
-
tooltip = this.tooltip,
|
1748 |
-
showTarget = options.show.target,
|
1749 |
-
hideTarget = options.hide.target,
|
1750 |
-
containerTarget = posOptions.container,
|
1751 |
-
viewportTarget = posOptions.viewport,
|
1752 |
-
documentTarget = $( document ),
|
1753 |
-
bodyTarget = $( document.body ),
|
1754 |
-
windowTarget = $( window ),
|
1755 |
-
|
1756 |
-
showEvents = options.show.event ? $.trim( '' + options.show.event ).split( ' ' ) : [],
|
1757 |
-
hideEvents = options.hide.event ? $.trim( '' + options.hide.event ).split( ' ' ) : [];
|
1758 |
-
|
1759 |
-
|
1760 |
-
// Assign passed event callbacks
|
1761 |
-
$.each(
|
1762 |
-
options.events, function( name, callback ) {
|
1763 |
-
self._bind(
|
1764 |
-
tooltip, name === 'toggle' ? ['tooltipshow', 'tooltiphide'] : ['tooltip' + name],
|
1765 |
-
callback, null, tooltip
|
1766 |
-
);
|
1767 |
-
}
|
1768 |
-
);
|
1769 |
|
1770 |
-
|
1771 |
-
|
1772 |
-
|
1773 |
-
|
1774 |
-
|
1775 |
-
|
1776 |
-
|
1777 |
-
|
1778 |
-
|
1779 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1780 |
|
1781 |
-
|
1782 |
-
|
1783 |
-
|
1784 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1785 |
|
1786 |
-
|
1787 |
-
|
1788 |
-
|
1789 |
-
|
1790 |
-
|
1791 |
-
this.
|
1792 |
-
hideTarget, 'mouseleave', function() {
|
1793 |
-
clearTimeout( this.timers.show );
|
1794 |
-
}
|
1795 |
-
);
|
1796 |
}
|
|
|
1797 |
|
1798 |
-
|
1799 |
-
|
1800 |
-
|
1801 |
-
containerTarget.closest( 'html' ), ['mousedown', 'touchstart'], function( event ) {
|
1802 |
-
var elem = $( event.target ),
|
1803 |
-
enabled = this.rendered && !this.tooltip.hasClass( CLASS_DISABLED ) && this.tooltip[0].offsetWidth > 0,
|
1804 |
-
isAncestor = elem.parents( SELECTOR ).filter( this.tooltip[0] ).length > 0;
|
1805 |
-
|
1806 |
-
if ( elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor && !this.target.has( elem[0] ).length && enabled
|
1807 |
-
) {
|
1808 |
-
this.hide( event );
|
1809 |
-
}
|
1810 |
-
}
|
1811 |
-
);
|
1812 |
-
}
|
1813 |
|
1814 |
-
|
1815 |
-
|
1816 |
-
|
1817 |
-
|
|
|
|
|
1818 |
|
1819 |
-
|
1820 |
-
|
1821 |
-
}
|
1822 |
|
1823 |
-
|
1824 |
-
|
1825 |
-
|
1826 |
-
// Mouse movement bindings
|
1827 |
-
this._bind(
|
1828 |
-
showTarget.add( tooltip ), 'mousemove', function( event ) {
|
1829 |
-
// Check if the tooltip hides when mouse is moved a certain distance
|
1830 |
-
if ( 'number' === typeof options.hide.distance ) {
|
1831 |
-
var origin = this.cache.origin || {},
|
1832 |
-
limit = this.options.hide.distance,
|
1833 |
-
abs = Math.abs;
|
1834 |
-
|
1835 |
-
// Check if the movement has gone beyond the limit, and hide it if so
|
1836 |
-
if ( abs( event.pageX - origin.pageX ) >= limit || abs( event.pageY - origin.pageY ) >= limit ) {
|
1837 |
-
this.hide( event );
|
1838 |
-
}
|
1839 |
-
}
|
1840 |
|
1841 |
-
|
1842 |
-
|
1843 |
-
}
|
1844 |
-
);
|
1845 |
|
1846 |
-
|
1847 |
-
|
1848 |
-
// If mouse adjustment is on...
|
1849 |
-
if ( posOptions.adjust.mouse ) {
|
1850 |
-
// Apply a mouseleave event so we don't get problems with overlapping
|
1851 |
-
if ( options.hide.event ) {
|
1852 |
-
// Track if we're on the target or not
|
1853 |
-
this._bind(
|
1854 |
-
showTarget, ['mouseenter', 'mouseleave'], function( event ) {
|
1855 |
-
this.cache.onTarget = event.type === 'mouseenter';
|
1856 |
-
}
|
1857 |
-
);
|
1858 |
-
}
|
1859 |
|
1860 |
-
|
1861 |
-
|
1862 |
-
documentTarget, 'mousemove', function( event ) {
|
1863 |
-
// Update the tooltip position only if the tooltip is visible and adjustment is enabled
|
1864 |
-
if ( this.rendered && this.cache.onTarget && !this.tooltip.hasClass( CLASS_DISABLED ) && this.tooltip[0].offsetWidth > 0 ) {
|
1865 |
-
this.reposition( event );
|
1866 |
-
}
|
1867 |
-
}
|
1868 |
-
);
|
1869 |
-
}
|
1870 |
-
}
|
1871 |
|
1872 |
-
|
1873 |
-
|
1874 |
-
this._bind(
|
1875 |
-
$.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod
|
1876 |
-
);
|
1877 |
-
}
|
1878 |
|
1879 |
-
|
1880 |
-
|
1881 |
-
|
1882 |
-
|
1883 |
-
};
|
1884 |
|
1885 |
-
|
1886 |
-
|
1887 |
-
|
1888 |
-
this.options.show.target[0],
|
1889 |
-
this.options.hide.target[0],
|
1890 |
-
this.rendered && this.tooltip[0],
|
1891 |
-
this.options.position.container[0],
|
1892 |
-
this.options.position.viewport[0],
|
1893 |
-
this.options.position.container.closest( 'html' )[0], // unfocus
|
1894 |
-
window,
|
1895 |
-
document
|
1896 |
-
];
|
1897 |
|
1898 |
-
|
1899 |
-
|
1900 |
-
|
1901 |
-
targets, function( i ) {
|
1902 |
-
return typeof i === 'object';
|
1903 |
-
}
|
1904 |
-
)
|
1905 |
-
)
|
1906 |
-
);
|
1907 |
-
};
|
1908 |
|
1909 |
-
|
1910 |
-
|
1911 |
-
var obj, posOptions, attr, config, title,
|
1912 |
|
1913 |
-
|
1914 |
-
|
|
|
1915 |
|
1916 |
-
|
1917 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1918 |
|
1919 |
-
|
1920 |
-
|
1921 |
|
1922 |
-
|
1923 |
-
|
|
|
|
|
|
|
1924 |
|
1925 |
-
|
1926 |
-
|
|
|
1927 |
|
1928 |
-
|
1929 |
-
|
1930 |
-
html5 = typeof html5 === 'string' ? $.parseJSON( html5 ) : html5;
|
1931 |
-
} catch ( e ) {
|
1932 |
-
}
|
1933 |
|
1934 |
-
|
1935 |
-
|
1936 |
-
|
1937 |
-
|
1938 |
-
|
1939 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1940 |
|
1941 |
-
|
1942 |
-
|
1943 |
-
|
|
|
|
|
1944 |
|
1945 |
-
//
|
1946 |
-
if
|
1947 |
-
attr = elem.attr( config.content.attr );
|
1948 |
|
1949 |
-
|
1950 |
-
|
1951 |
-
|
|
|
1952 |
}
|
1953 |
-
|
1954 |
-
// No valid content was found, abort render
|
1955 |
else {
|
|
|
1956 |
return FALSE;
|
1957 |
}
|
1958 |
}
|
1959 |
|
1960 |
-
//
|
1961 |
-
if
|
1962 |
-
|
1963 |
-
}
|
1964 |
-
if ( posOptions.target === FALSE ) {
|
1965 |
-
posOptions.target = newTarget;
|
1966 |
}
|
1967 |
-
|
1968 |
-
config.show.target = newTarget;
|
1969 |
-
}
|
1970 |
-
if ( config.show.solo === TRUE ) {
|
1971 |
-
config.show.solo = posOptions.container.closest( 'body' );
|
1972 |
-
}
|
1973 |
-
if ( config.hide.target === FALSE ) {
|
1974 |
-
config.hide.target = newTarget;
|
1975 |
-
}
|
1976 |
-
if ( config.position.viewport === TRUE ) {
|
1977 |
-
config.position.viewport = posOptions.container;
|
1978 |
-
}
|
1979 |
-
|
1980 |
-
// Ensure we only use a single container
|
1981 |
-
posOptions.container = posOptions.container.eq( 0 );
|
1982 |
|
1983 |
-
|
1984 |
-
|
1985 |
-
posOptions.my = new CORNER( posOptions.my );
|
1986 |
-
|
1987 |
-
// Destroy previous tooltip if overwrite is enabled, or skip element if not
|
1988 |
-
if ( elem.data( NAMESPACE ) ) {
|
1989 |
-
if ( config.overwrite ) {
|
1990 |
-
elem.qtip( 'destroy', true );
|
1991 |
-
}
|
1992 |
-
else if ( config.overwrite === FALSE ) {
|
1993 |
-
return FALSE;
|
1994 |
-
}
|
1995 |
-
}
|
1996 |
-
|
1997 |
-
// Add has-qtip attribute
|
1998 |
-
elem.attr( ATTR_HAS, id );
|
1999 |
-
|
2000 |
-
// Remove title attribute and store it if present
|
2001 |
-
if ( config.suppress && (title = elem.attr( 'title' )) ) {
|
2002 |
-
// Final attr call fixes event delegatiom and IE default tooltip showing problem
|
2003 |
-
elem.removeAttr( 'title' ).attr( oldtitle, title ).attr( 'title', '' );
|
2004 |
-
}
|
2005 |
-
|
2006 |
-
// Initialize the tooltip and add API reference
|
2007 |
-
obj = new QTip( elem, config, id, !!attr );
|
2008 |
-
elem.data( NAMESPACE, obj );
|
2009 |
-
|
2010 |
-
// Catch remove/removeqtip events on target element to destroy redundant tooltip
|
2011 |
-
elem.one(
|
2012 |
-
'remove.qtip-' + id + ' removeqtip.qtip-' + id, function() {
|
2013 |
-
var api;
|
2014 |
-
if ( (api = $( this ).data( NAMESPACE )) ) {
|
2015 |
-
api.destroy( true );
|
2016 |
-
}
|
2017 |
-
}
|
2018 |
-
);
|
2019 |
-
|
2020 |
-
return obj;
|
2021 |
-
}
|
2022 |
|
2023 |
-
|
2024 |
-
|
2025 |
-
|
2026 |
-
|
2027 |
-
args = $.makeArray( arguments ).slice( 1 ),
|
2028 |
-
event = args[args.length - 1],
|
2029 |
-
opts = this[0] ? $.data( this[0], NAMESPACE ) : NULL;
|
2030 |
|
2031 |
-
|
2032 |
-
|
2033 |
-
return opts;
|
2034 |
-
}
|
2035 |
|
2036 |
-
//
|
2037 |
-
|
2038 |
-
|
2039 |
-
function() {
|
2040 |
-
var api = $.data( this, NAMESPACE );
|
2041 |
-
if ( !api ) {
|
2042 |
-
return TRUE;
|
2043 |
-
}
|
2044 |
-
|
2045 |
-
// Cache the event if possible
|
2046 |
-
if ( event && event.timeStamp ) {
|
2047 |
-
api.cache.event = event;
|
2048 |
-
}
|
2049 |
-
|
2050 |
-
// Check for specific API commands
|
2051 |
-
if ( notation && (command === 'option' || command === 'options') ) {
|
2052 |
-
if ( newValue !== undefined || $.isPlainObject( notation ) ) {
|
2053 |
-
api.set( notation, newValue );
|
2054 |
-
}
|
2055 |
-
else {
|
2056 |
-
returned = api.get( notation );
|
2057 |
-
return FALSE;
|
2058 |
-
}
|
2059 |
-
}
|
2060 |
-
|
2061 |
-
// Execute API command
|
2062 |
-
else if ( api[command] ) {
|
2063 |
-
api[command].apply( api, args );
|
2064 |
-
}
|
2065 |
-
}
|
2066 |
-
);
|
2067 |
-
|
2068 |
-
return returned !== NULL ? returned : this;
|
2069 |
-
}
|
2070 |
|
2071 |
-
//
|
2072 |
-
|
2073 |
-
|
2074 |
-
|
2075 |
-
|
2076 |
-
return this.each(
|
2077 |
-
function( i ) {
|
2078 |
-
var api, id;
|
2079 |
-
|
2080 |
-
// Find next available ID, or use custom ID if provided
|
2081 |
-
id = $.isArray( opts.id ) ? opts.id[i] : opts.id;
|
2082 |
-
id = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id;
|
2083 |
-
|
2084 |
-
// Initialize the qTip and re-grab newly sanitized options
|
2085 |
-
api = init( $( this ), id, opts );
|
2086 |
-
if ( api === FALSE ) {
|
2087 |
-
return TRUE;
|
2088 |
-
}
|
2089 |
-
else {
|
2090 |
-
QTIP.api[id] = api;
|
2091 |
-
}
|
2092 |
-
|
2093 |
-
// Initialize plugins
|
2094 |
-
$.each(
|
2095 |
-
PLUGINS, function() {
|
2096 |
-
if ( this.initialize === 'initialize' ) {
|
2097 |
-
this( api );
|
2098 |
-
}
|
2099 |
-
}
|
2100 |
-
);
|
2101 |
-
|
2102 |
-
// Assign initial pre-render events
|
2103 |
-
api._assignInitialEvents( event );
|
2104 |
-
}
|
2105 |
-
);
|
2106 |
-
}
|
2107 |
-
};
|
2108 |
|
2109 |
-
|
2110 |
-
|
|
|
|
|
2111 |
|
2112 |
-
|
2113 |
-
|
2114 |
-
;
|
2115 |
-
|
2116 |
-
|
2117 |
-
/* Allow other plugins to successfully retrieve the title of an element with a qTip applied */
|
2118 |
-
attr: function( attr, val ) {
|
2119 |
-
if ( this.length ) {
|
2120 |
-
var self = this[0],
|
2121 |
-
title = 'title',
|
2122 |
-
api = $.data( self, 'qtip' );
|
2123 |
-
|
2124 |
-
if ( attr === title && api && 'object' === typeof api && api.options.suppress ) {
|
2125 |
-
if ( arguments.length < 2 ) {
|
2126 |
-
return $.attr( self, oldtitle );
|
2127 |
-
}
|
2128 |
-
|
2129 |
-
// If qTip is rendered and title was originally used as content, update it
|
2130 |
-
if ( api && api.options.content.attr === title && api.cache.attr ) {
|
2131 |
-
api.set( 'content.text', val );
|
2132 |
-
}
|
2133 |
-
|
2134 |
-
// Use the regular attr method to set, then cache the result
|
2135 |
-
return this.attr( oldtitle, val );
|
2136 |
-
}
|
2137 |
-
}
|
2138 |
|
2139 |
-
|
2140 |
-
|
2141 |
|
2142 |
-
|
2143 |
-
|
2144 |
-
|
2145 |
-
|
2146 |
-
|
2147 |
-
|
2148 |
-
|
2149 |
-
|
2150 |
-
|
2151 |
-
elems.filter( '[' + oldtitle + ']' ).attr(
|
2152 |
-
'title', function() {
|
2153 |
-
return $.attr( this, oldtitle );
|
2154 |
-
}
|
2155 |
-
)
|
2156 |
-
.removeAttr( oldtitle );
|
2157 |
-
}
|
2158 |
|
2159 |
-
|
2160 |
-
|
2161 |
-
|
2162 |
-
if ( !func || $.fn[name + replaceSuffix] ) {
|
2163 |
-
return TRUE;
|
2164 |
}
|
2165 |
|
2166 |
-
|
2167 |
-
|
2168 |
-
|
2169 |
-
};
|
2170 |
-
}
|
2171 |
-
);
|
2172 |
-
|
2173 |
-
/* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar).
|
2174 |
-
* This snippet is taken directly from jQuery UI source code found here:
|
2175 |
-
* http://code.jquery.com/ui/jquery-ui-git.js
|
2176 |
-
*/
|
2177 |
-
if ( !$.ui ) {
|
2178 |
-
$['cleanData' + replaceSuffix] = $.cleanData;
|
2179 |
-
$.cleanData = function( elems ) {
|
2180 |
-
for ( var i = 0, elem; (elem = $( elems[i] )).length; i++ ) {
|
2181 |
-
if ( elem.attr( ATTR_HAS ) ) {
|
2182 |
-
try {
|
2183 |
-
elem.triggerHandler( 'removeqtip' );
|
2184 |
-
}
|
2185 |
-
catch ( e ) {
|
2186 |
-
}
|
2187 |
-
}
|
2188 |
}
|
2189 |
-
$['cleanData' + replaceSuffix].apply( this, arguments );
|
2190 |
-
};
|
2191 |
-
}
|
2192 |
-
|
2193 |
-
;// qTip version
|
2194 |
-
QTIP.version = '2.2.0';
|
2195 |
-
|
2196 |
-
// Base ID for all qTips
|
2197 |
-
QTIP.nextid = 0;
|
2198 |
-
|
2199 |
-
// Inactive events array
|
2200 |
-
QTIP.inactiveEvents = INACTIVE_EVENTS;
|
2201 |
-
|
2202 |
-
// Base z-index for all qTips
|
2203 |
-
QTIP.zindex = 15000;
|
2204 |
|
2205 |
-
|
2206 |
-
|
2207 |
-
prerender: FALSE,
|
2208 |
-
id: FALSE,
|
2209 |
-
overwrite: TRUE,
|
2210 |
-
suppress: TRUE,
|
2211 |
-
content: {
|
2212 |
-
text: TRUE,
|
2213 |
-
attr: 'title',
|
2214 |
-
title: FALSE,
|
2215 |
-
button: FALSE
|
2216 |
-
},
|
2217 |
-
position: {
|
2218 |
-
my: 'top left',
|
2219 |
-
at: 'bottom right',
|
2220 |
-
target: FALSE,
|
2221 |
-
container: FALSE,
|
2222 |
-
viewport: FALSE,
|
2223 |
-
adjust: {
|
2224 |
-
x: 0, y: 0,
|
2225 |
-
mouse: TRUE,
|
2226 |
-
scroll: TRUE,
|
2227 |
-
resize: TRUE,
|
2228 |
-
method: 'flipinvert flipinvert'
|
2229 |
-
},
|
2230 |
-
effect: function( api, pos, viewport ) {
|
2231 |
-
$( this ).animate(
|
2232 |
-
pos, {
|
2233 |
-
duration: 200,
|
2234 |
-
queue: FALSE
|
2235 |
-
}
|
2236 |
-
);
|
2237 |
-
}
|
2238 |
-
},
|
2239 |
-
show: {
|
2240 |
-
target: FALSE,
|
2241 |
-
event: 'mouseenter',
|
2242 |
-
effect: TRUE,
|
2243 |
-
delay: 90,
|
2244 |
-
solo: FALSE,
|
2245 |
-
ready: FALSE,
|
2246 |
-
autofocus: FALSE
|
2247 |
-
},
|
2248 |
-
hide: {
|
2249 |
-
target: FALSE,
|
2250 |
-
event: 'mouseleave',
|
2251 |
-
effect: TRUE,
|
2252 |
-
delay: 0,
|
2253 |
-
fixed: FALSE,
|
2254 |
-
inactive: FALSE,
|
2255 |
-
leave: 'window',
|
2256 |
-
distance: FALSE
|
2257 |
-
},
|
2258 |
-
style: {
|
2259 |
-
classes: '',
|
2260 |
-
widget: FALSE,
|
2261 |
-
width: FALSE,
|
2262 |
-
height: FALSE,
|
2263 |
-
def: TRUE
|
2264 |
-
},
|
2265 |
-
events: {
|
2266 |
-
render: NULL,
|
2267 |
-
move: NULL,
|
2268 |
-
show: NULL,
|
2269 |
-
hide: NULL,
|
2270 |
-
toggle: NULL,
|
2271 |
-
visible: NULL,
|
2272 |
-
hidden: NULL,
|
2273 |
-
focus: NULL,
|
2274 |
-
blur: NULL
|
2275 |
}
|
2276 |
-
};
|
2277 |
-
|
2278 |
-
;
|
2279 |
-
var TIP,
|
2280 |
-
|
2281 |
-
// .bind()/.on() namespace
|
2282 |
-
TIPNS = '.qtip-tip',
|
2283 |
-
|
2284 |
-
// Common CSS strings
|
2285 |
-
MARGIN = 'margin',
|
2286 |
-
BORDER = 'border',
|
2287 |
-
COLOR = 'color',
|
2288 |
-
BG_COLOR = 'background-color',
|
2289 |
-
TRANSPARENT = 'transparent',
|
2290 |
-
IMPORTANT = ' !important',
|
2291 |
-
|
2292 |
-
// Check if the browser supports <canvas/> elements
|
2293 |
-
HASCANVAS = !!document.createElement( 'canvas' ).getContext,
|
2294 |
-
|
2295 |
-
// Invalid colour values used in parseColours()
|
2296 |
-
INVALID = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i;
|
2297 |
-
|
2298 |
-
// Camel-case method, taken from jQuery source
|
2299 |
-
// http://code.jquery.com/jquery-1.8.0.js
|
2300 |
-
function camel( s ) {
|
2301 |
-
return s.charAt( 0 ).toUpperCase() + s.slice( 1 );
|
2302 |
}
|
2303 |
|
2304 |
-
|
2305 |
-
|
2306 |
-
* http://modernizr.com/downloads/modernizr-latest.js
|
2307 |
-
*/
|
2308 |
-
var cssProps = {}, cssPrefixes = ["Webkit", "O", "Moz", "ms"];
|
2309 |
|
2310 |
-
|
2311 |
-
|
2312 |
-
|
2313 |
-
cur, val, i = 0;
|
2314 |
-
|
2315 |
-
// If the property has already been mapped...
|
2316 |
-
if ( cssProps[prop] ) {
|
2317 |
-
return elem.css( cssProps[prop] );
|
2318 |
-
}
|
2319 |
|
2320 |
-
|
2321 |
-
|
2322 |
-
return cssProps[prop] = cur, val;
|
2323 |
-
}
|
2324 |
-
}
|
2325 |
-
}
|
2326 |
|
2327 |
-
//
|
2328 |
-
|
2329 |
-
|
|
|
|
|
|
|
2330 |
}
|
2331 |
|
2332 |
-
|
2333 |
-
|
2334 |
-
|
2335 |
-
|
2336 |
-
|
2337 |
-
|
2338 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2339 |
}
|
2340 |
-
|
2341 |
-
|
2342 |
-
|
2343 |
-
|
2344 |
-
|
2345 |
-
|
2346 |
-
|
2347 |
-
|
2348 |
-
|
2349 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2350 |
}
|
2351 |
-
|
2352 |
-
|
2353 |
-
|
2354 |
-
|
2355 |
-
|
2356 |
-
|
2357 |
-
|
2358 |
-
|
2359 |
-
|
2360 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2361 |
}
|
|
|
|
|
2362 |
|
2363 |
-
|
2364 |
-
|
2365 |
-
|
2366 |
-
|
2367 |
-
|
2368 |
-
// Create tip element and prepend to the tooltip
|
2369 |
-
tip = this.element = qtip.elements.tip = $(
|
2370 |
-
'<div />', {'class': NAMESPACE + '-tip'}
|
2371 |
-
).prependTo( qtip.tooltip );
|
2372 |
-
|
2373 |
-
// Create tip drawing element(s)
|
2374 |
-
if ( HASCANVAS ) {
|
2375 |
-
// save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()!
|
2376 |
-
context = $( '<canvas />' ).appendTo( this.element )[0].getContext( '2d' );
|
2377 |
-
|
2378 |
-
// Setup constant parameters
|
2379 |
-
context.lineJoin = 'miter';
|
2380 |
-
context.miterLimit = 100000;
|
2381 |
-
context.save();
|
2382 |
-
}
|
2383 |
-
else {
|
2384 |
-
context = createVML( 'shape', 'coordorigin="0,0"', 'position:absolute;' );
|
2385 |
-
this.element.html( context + context );
|
2386 |
-
|
2387 |
-
// Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML
|
2388 |
-
qtip._bind(
|
2389 |
-
$( '*', tip ).add( tip ), ['click', 'mousedown'], function( event ) {
|
2390 |
-
event.stopPropagation();
|
2391 |
-
}, this._ns
|
2392 |
-
);
|
2393 |
-
}
|
2394 |
-
|
2395 |
-
// Bind update events
|
2396 |
-
qtip._bind( qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this );
|
2397 |
|
2398 |
-
// Create it
|
2399 |
-
this.create();
|
2400 |
-
},
|
2401 |
|
2402 |
-
|
2403 |
-
|
2404 |
-
|
2405 |
-
|
2406 |
-
|
2407 |
-
|
2408 |
-
|
2409 |
-
},
|
2410 |
|
2411 |
-
|
2412 |
-
|
2413 |
-
|
2414 |
-
|
2415 |
-
|
2416 |
-
|
|
|
|
|
|
|
|
|
2417 |
|
2418 |
-
_parseCorner: function( corner ) {
|
2419 |
-
var my = this.qtip.options.position.my;
|
2420 |
|
2421 |
-
|
2422 |
-
|
2423 |
-
|
2424 |
-
|
2425 |
-
|
2426 |
-
corner = new CORNER( my.string() );
|
2427 |
-
}
|
2428 |
-
else if ( !corner.string ) {
|
2429 |
-
corner = new CORNER( corner );
|
2430 |
-
corner.fixed = TRUE;
|
2431 |
-
}
|
2432 |
|
2433 |
-
|
2434 |
-
|
|
|
2435 |
|
2436 |
-
|
2437 |
-
|
2438 |
-
|
2439 |
|
2440 |
-
|
2441 |
-
|
2442 |
-
intCss( this._useTitle( corner ) && elements.titlebar || elements.content, prop ) ||
|
2443 |
-
intCss( elements.tooltip, prop )
|
2444 |
-
)) || 0;
|
2445 |
-
},
|
2446 |
|
2447 |
-
|
2448 |
-
|
2449 |
-
|
|
|
2450 |
|
2451 |
-
|
2452 |
-
|
2453 |
-
|
2454 |
-
|
|
|
|
|
|
|
|
|
2455 |
|
2456 |
-
|
2457 |
-
|
2458 |
-
|
2459 |
-
},
|
2460 |
|
2461 |
-
|
2462 |
-
|
2463 |
-
|
2464 |
-
|
2465 |
-
|
2466 |
-
|
2467 |
-
|
2468 |
-
|
2469 |
-
|
2470 |
-
|
2471 |
-
|
2472 |
-
|
2473 |
-
|
2474 |
-
|
2475 |
-
|
2476 |
-
|
2477 |
-
|
2478 |
-
|
2479 |
-
|
2480 |
-
|
2481 |
-
|
2482 |
-
|
2483 |
-
BG_COLOR + ':' + TRANSPARENT + IMPORTANT + ';' + BORDER + ':0' + IMPORTANT + ';'
|
2484 |
-
);
|
2485 |
|
2486 |
-
|
2487 |
-
|
2488 |
|
2489 |
-
|
2490 |
-
|
2491 |
-
|
2492 |
-
|
2493 |
-
|
2494 |
-
|
2495 |
-
|
2496 |
-
|
2497 |
-
|
|
|
|
|
2498 |
|
2499 |
-
|
2500 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2501 |
|
2502 |
-
|
2503 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2504 |
|
2505 |
-
|
2506 |
-
|
2507 |
|
2508 |
-
|
2509 |
-
|
2510 |
-
},
|
2511 |
|
2512 |
-
|
2513 |
-
|
2514 |
-
scale = scale || 1;
|
2515 |
-
size = size || this.size;
|
2516 |
-
|
2517 |
-
var width = size[0] * scale,
|
2518 |
-
height = size[1] * scale,
|
2519 |
-
width2 = Math.ceil( width / 2 ), height2 = Math.ceil( height / 2 ),
|
2520 |
-
|
2521 |
-
// Define tip coordinates in terms of height and width values
|
2522 |
-
tips = {
|
2523 |
-
br: [0, 0, width, height, width, 0],
|
2524 |
-
bl: [0, 0, width, 0, 0, height],
|
2525 |
-
tr: [0, height, width, 0, width, height],
|
2526 |
-
tl: [0, 0, 0, height, width, height],
|
2527 |
-
tc: [0, height, width2, 0, width, height],
|
2528 |
-
bc: [0, 0, width, 0, width2, height],
|
2529 |
-
rc: [0, 0, width, height2, 0, height],
|
2530 |
-
lc: [width, 0, width, height, 0, height2]
|
2531 |
-
};
|
2532 |
-
|
2533 |
-
// Set common side shapes
|
2534 |
-
tips.lt = tips.br;
|
2535 |
-
tips.rt = tips.bl;
|
2536 |
-
tips.lb = tips.tr;
|
2537 |
-
tips.rb = tips.tl;
|
2538 |
-
|
2539 |
-
return tips[corner.abbrev()];
|
2540 |
-
},
|
2541 |
|
2542 |
-
|
2543 |
-
|
2544 |
-
|
2545 |
-
|
2546 |
-
|
2547 |
-
|
2548 |
-
|
2549 |
-
|
|
|
2550 |
|
2551 |
-
|
2552 |
-
|
2553 |
-
var c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner( this.options.corner );
|
2554 |
|
2555 |
-
|
2556 |
-
|
2557 |
-
// Cache it
|
2558 |
-
this.qtip.cache.corner = c.clone();
|
2559 |
|
2560 |
-
|
2561 |
-
|
2562 |
-
|
|
|
2563 |
|
2564 |
-
|
2565 |
-
|
|
|
|
|
|
|
|
|
|
|
2566 |
|
2567 |
-
|
2568 |
-
|
|
|
2569 |
|
2570 |
-
|
2571 |
-
|
2572 |
-
return this;
|
2573 |
-
}
|
2574 |
|
2575 |
-
|
2576 |
-
|
2577 |
-
|
2578 |
-
|
2579 |
-
curSize = this.size,
|
2580 |
-
mimic = options.mimic,
|
2581 |
-
round = Math.round,
|
2582 |
-
color, precedance, context,
|
2583 |
-
coords, bigCoords, translate, newSize, border, BACKING_STORE_RATIO;
|
2584 |
-
|
2585 |
-
// Re-determine tip if not already set
|
2586 |
-
if ( !corner ) {
|
2587 |
-
corner = this.qtip.cache.corner || this.corner;
|
2588 |
-
}
|
2589 |
|
2590 |
-
|
2591 |
-
|
2592 |
-
mimic = corner;
|
2593 |
-
}
|
2594 |
|
2595 |
-
|
2596 |
-
|
2597 |
-
|
2598 |
-
mimic.precedance = corner.precedance;
|
2599 |
-
|
2600 |
-
if ( mimic.x === 'inherit' ) {
|
2601 |
-
mimic.x = corner.x;
|
2602 |
-
}
|
2603 |
-
else if ( mimic.y === 'inherit' ) {
|
2604 |
-
mimic.y = corner.y;
|
2605 |
-
}
|
2606 |
-
else if ( mimic.x === mimic.y ) {
|
2607 |
-
mimic[corner.precedance] = corner[corner.precedance];
|
2608 |
-
}
|
2609 |
-
}
|
2610 |
-
precedance = mimic.precedance;
|
2611 |
|
2612 |
-
|
2613 |
-
|
2614 |
-
|
2615 |
-
|
2616 |
-
|
2617 |
-
|
2618 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2619 |
|
2620 |
-
|
2621 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2622 |
|
2623 |
-
|
2624 |
-
|
2625 |
-
|
2626 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2627 |
|
2628 |
-
|
2629 |
-
|
2630 |
-
|
2631 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2632 |
|
2633 |
-
|
2634 |
-
|
2635 |
-
|
2636 |
|
2637 |
-
|
2638 |
-
|
2639 |
-
this.border = border = 0;
|
2640 |
-
}
|
2641 |
|
2642 |
-
|
2643 |
-
|
2644 |
-
|
2645 |
-
|
2646 |
-
width: newSize[0],
|
2647 |
-
height: newSize[1],
|
2648 |
-
lineHeight: newSize[1] + 'px'
|
2649 |
-
}
|
2650 |
-
);
|
2651 |
|
2652 |
-
|
2653 |
-
|
2654 |
-
translate = [
|
2655 |
-
round( mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2 ),
|
2656 |
-
round( mimic.y === TOP ? newSize[1] - curSize[1] : 0 )
|
2657 |
-
];
|
2658 |
-
}
|
2659 |
-
else {
|
2660 |
-
translate = [
|
2661 |
-
round( mimic.x === LEFT ? newSize[0] - curSize[0] : 0 ),
|
2662 |
-
round( mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2 )
|
2663 |
-
];
|
2664 |
-
}
|
2665 |
|
2666 |
-
|
2667 |
-
|
2668 |
-
|
2669 |
-
|
2670 |
-
|
2671 |
-
|
2672 |
-
|
2673 |
-
|
2674 |
-
// Calculate coordinates
|
2675 |
-
coords = this._calculateTip( mimic, curSize, SCALE );
|
2676 |
-
bigCoords = this._calculateTip( mimic, this.size, SCALE );
|
2677 |
-
|
2678 |
-
// Set the canvas size using calculated size
|
2679 |
-
inner.attr( WIDTH, newSize[0] * SCALE ).attr( HEIGHT, newSize[1] * SCALE );
|
2680 |
-
inner.css( WIDTH, newSize[0] ).css( HEIGHT, newSize[1] );
|
2681 |
-
|
2682 |
-
// Draw the outer-stroke tip
|
2683 |
-
this._drawCoords( context, bigCoords );
|
2684 |
-
context.fillStyle = color[1];
|
2685 |
-
context.fill();
|
2686 |
-
|
2687 |
-
// Draw the actual tip
|
2688 |
-
context.translate( translate[0] * SCALE, translate[1] * SCALE );
|
2689 |
-
this._drawCoords( context, coords );
|
2690 |
-
context.fillStyle = color[0];
|
2691 |
-
context.fill();
|
2692 |
-
}
|
2693 |
|
2694 |
-
|
2695 |
-
|
2696 |
-
|
2697 |
-
|
2698 |
-
|
2699 |
-
|
2700 |
-
|
2701 |
-
|
2702 |
-
|
2703 |
-
|
2704 |
-
translate[2] = border && /^(r|b)/i.test( corner.string() ) ?
|
2705 |
-
BROWSER.ie === 8 ? 2 : 1 : 0;
|
2706 |
-
|
2707 |
-
// Set initial CSS
|
2708 |
-
inner.css(
|
2709 |
-
{
|
2710 |
-
coordsize: (newSize[0] + border) + ' ' + (newSize[1] + border),
|
2711 |
-
antialias: '' + (mimic.string().indexOf( CENTER ) > -1),
|
2712 |
-
left: translate[0] - (translate[2] * Number( precedance === X )),
|
2713 |
-
top: translate[1] - (translate[2] * Number( precedance === Y )),
|
2714 |
-
width: newSize[0] + border,
|
2715 |
-
height: newSize[1] + border
|
2716 |
-
}
|
2717 |
-
)
|
2718 |
-
.each(
|
2719 |
-
function( i ) {
|
2720 |
-
var $this = $( this );
|
2721 |
-
|
2722 |
-
// Set shape specific attributes
|
2723 |
-
$this[$this.prop ? 'prop' : 'attr'](
|
2724 |
-
{
|
2725 |
-
coordsize: (newSize[0] + border) + ' ' + (newSize[1] + border),
|
2726 |
-
path: coords,
|
2727 |
-
fillcolor: color[0],
|
2728 |
-
filled: !!i,
|
2729 |
-
stroked: !i
|
2730 |
-
}
|
2731 |
-
)
|
2732 |
-
.toggle( !!(border || i) );
|
2733 |
-
|
2734 |
-
// Check if border is enabled and add stroke element
|
2735 |
-
!i && $this.html(
|
2736 |
-
createVML(
|
2737 |
-
'stroke',
|
2738 |
-
'weight="' + (border * 2) + 'px" color="' + color[1] + '" miterlimit="1000" joinstyle="miter"'
|
2739 |
-
)
|
2740 |
-
);
|
2741 |
-
}
|
2742 |
-
);
|
2743 |
-
}
|
2744 |
|
2745 |
-
|
2746 |
-
|
2747 |
-
|
2748 |
-
|
2749 |
-
|
2750 |
-
|
2751 |
-
|
2752 |
-
visibility: 'visible'
|
2753 |
-
}
|
2754 |
-
);
|
2755 |
-
}, 1
|
2756 |
-
);
|
2757 |
|
2758 |
-
|
2759 |
-
|
2760 |
-
|
2761 |
-
|
2762 |
-
},
|
2763 |
|
2764 |
-
|
2765 |
-
|
2766 |
-
|
2767 |
-
}
|
2768 |
|
2769 |
-
|
2770 |
-
|
2771 |
-
|
2772 |
-
|
2773 |
-
|
2774 |
-
position = {},
|
2775 |
-
precedance, corners;
|
2776 |
-
|
2777 |
-
// Inherit corner if not provided
|
2778 |
-
corner = corner || this.corner;
|
2779 |
-
precedance = corner.precedance;
|
2780 |
-
|
2781 |
-
// Determine which tip dimension to use for adjustment
|
2782 |
-
size = size || this._calculateSize( corner );
|
2783 |
-
|
2784 |
-
// Setup corners and offset array
|
2785 |
-
corners = [corner.x, corner.y];
|
2786 |
-
if ( precedance === X ) {
|
2787 |
-
corners.reverse();
|
2788 |
-
}
|
2789 |
|
2790 |
-
|
2791 |
-
|
2792 |
-
|
2793 |
-
|
2794 |
-
|
2795 |
-
if ( side === CENTER ) {
|
2796 |
-
b = precedance === Y ? LEFT : TOP;
|
2797 |
-
position[b] = '50%';
|
2798 |
-
position[MARGIN + '-' + b] = -Math.round( size[precedance === Y ? 0 : 1] / 2 ) + userOffset;
|
2799 |
-
}
|
2800 |
-
else {
|
2801 |
-
b = self._parseWidth( corner, side, elements.tooltip );
|
2802 |
-
bc = self._parseWidth( corner, side, elements.content );
|
2803 |
-
br = self._parseRadius( corner );
|
2804 |
-
|
2805 |
-
position[side] = Math.max(
|
2806 |
-
-self.border, i ? bc : (userOffset + (br > b ? br : -b))
|
2807 |
-
);
|
2808 |
-
}
|
2809 |
-
}
|
2810 |
-
);
|
2811 |
|
2812 |
-
|
2813 |
-
|
2814 |
|
2815 |
-
|
2816 |
-
|
2817 |
-
|
2818 |
-
|
2819 |
|
2820 |
-
|
2821 |
-
|
2822 |
-
|
2823 |
-
}
|
2824 |
|
2825 |
-
|
2826 |
-
|
2827 |
-
|
2828 |
-
|
2829 |
-
|
2830 |
-
|
2831 |
-
|
2832 |
-
|
2833 |
-
|
2834 |
-
function shiftflip( direction, precedance, popposite, side, opposite ) {
|
2835 |
-
// Horizontal - Shift or flip method
|
2836 |
-
if ( direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER ) {
|
2837 |
-
newCorner.precedance = newCorner.precedance === X ? Y : X;
|
2838 |
-
}
|
2839 |
-
else if ( direction !== SHIFT && adjust[side] ) {
|
2840 |
-
newCorner[precedance] = newCorner[precedance] === CENTER ?
|
2841 |
-
(adjust[side] > 0 ? side : opposite) : (newCorner[precedance] === side ? opposite : side);
|
2842 |
-
}
|
2843 |
-
}
|
2844 |
|
2845 |
-
|
2846 |
-
|
2847 |
-
|
2848 |
-
|
2849 |
-
|
2850 |
-
|
2851 |
-
|
2852 |
-
|
2853 |
-
|
2854 |
-
|
2855 |
-
|
2856 |
-
|
2857 |
-
|
2858 |
-
|
2859 |
-
|
2860 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2861 |
|
2862 |
-
|
2863 |
-
|
2864 |
-
|
2865 |
-
shiftflip( horizontal, X, Y, LEFT, RIGHT );
|
2866 |
-
shiftflip( vertical, Y, X, TOP, BOTTOM );
|
2867 |
|
2868 |
-
|
2869 |
-
|
2870 |
-
this.update( newCorner, FALSE );
|
2871 |
-
}
|
2872 |
-
}
|
2873 |
|
2874 |
-
|
2875 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2876 |
|
2877 |
-
|
2878 |
-
|
2879 |
-
|
2880 |
-
|
2881 |
-
if ( offset.bottom !== undefined ) {
|
2882 |
-
offset.top = -offset.bottom;
|
2883 |
-
}
|
2884 |
-
offset.user = this.offset;
|
2885 |
|
2886 |
-
|
2887 |
-
|
2888 |
-
|
2889 |
-
}
|
2890 |
-
if ( shift.top = (vertical === SHIFT && !!adjust.top) ) {
|
2891 |
-
shiftonly( Y, TOP, BOTTOM );
|
2892 |
-
}
|
2893 |
|
2894 |
-
|
2895 |
-
|
2896 |
-
|
2897 |
-
* outer border, hide it!
|
2898 |
-
*/
|
2899 |
-
this.element.css( css ).toggle(
|
2900 |
-
!((shift.x && shift.y) || (newCorner.x === CENTER && shift.y) || (newCorner.y === CENTER && shift.x))
|
2901 |
-
);
|
2902 |
|
2903 |
-
|
2904 |
-
|
2905 |
-
|
2906 |
-
|
2907 |
-
vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0;
|
2908 |
|
2909 |
-
|
2910 |
-
|
2911 |
-
|
2912 |
-
cache.corner = newCorner.clone();
|
2913 |
-
},
|
2914 |
|
2915 |
-
|
2916 |
-
|
2917 |
-
|
|
|
|
|
|
|
2918 |
|
2919 |
-
|
2920 |
-
|
2921 |
-
|
2922 |
-
.remove().end().remove();
|
2923 |
-
}
|
2924 |
-
}
|
2925 |
-
}
|
2926 |
-
);
|
2927 |
|
2928 |
-
|
2929 |
-
|
2930 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2931 |
|
2932 |
-
|
2933 |
-
|
2934 |
|
2935 |
-
|
2936 |
-
|
2937 |
-
|
2938 |
-
|
2939 |
-
if ( typeof opts !== 'object' ) {
|
2940 |
-
opts = options.style.tip = {corner: opts};
|
2941 |
}
|
2942 |
-
|
2943 |
-
opts.corner = TRUE;
|
2944 |
-
}
|
2945 |
-
}
|
2946 |
-
};
|
2947 |
|
2948 |
-
|
2949 |
-
|
2950 |
-
|
2951 |
-
|
2952 |
-
|
|
|
2953 |
|
2954 |
-
|
2955 |
-
|
2956 |
-
},
|
2957 |
-
'^style.tip.(height|width)$': function( obj ) {
|
2958 |
-
// Re-set dimensions and redraw the tip
|
2959 |
-
this.size = [obj.width, obj.height];
|
2960 |
-
this.update();
|
2961 |
|
2962 |
-
|
2963 |
-
|
2964 |
-
|
2965 |
-
'^content.title|style.(classes|widget)$': function() {
|
2966 |
-
this.update();
|
2967 |
-
}
|
2968 |
-
};
|
2969 |
|
2970 |
-
|
2971 |
-
|
2972 |
-
|
2973 |
-
|
2974 |
-
|
2975 |
-
corner: TRUE,
|
2976 |
-
mimic: FALSE,
|
2977 |
-
width: 6,
|
2978 |
-
height: 6,
|
2979 |
-
border: TRUE,
|
2980 |
-
offset: 0
|
2981 |
-
}
|
2982 |
-
}
|
2983 |
}
|
2984 |
-
|
|
|
2985 |
|
2986 |
-
|
2987 |
-
|
2988 |
-
|
2989 |
-
|
2990 |
-
|
2991 |
-
|
2992 |
-
|
2993 |
-
|
2994 |
-
|
2995 |
-
prevState, elem;
|
2996 |
-
|
2997 |
-
// Modified code from jQuery UI 1.10.0 source
|
2998 |
-
// http://code.jquery.com/ui/1.10.0/jquery-ui.js
|
2999 |
-
function focusable( element ) {
|
3000 |
-
// Use the defined focusable checker when possible
|
3001 |
-
if ( $.expr[':'].focusable ) {
|
3002 |
-
return $.expr[':'].focusable;
|
3003 |
-
}
|
3004 |
|
3005 |
-
|
3006 |
-
|
3007 |
-
map, mapName, img;
|
3008 |
|
3009 |
-
|
3010 |
-
|
3011 |
-
|
3012 |
-
|
3013 |
-
return false;
|
3014 |
-
}
|
3015 |
-
img = $( 'img[usemap=#' + mapName + ']' )[0];
|
3016 |
-
return !!img && img.is( ':visible' );
|
3017 |
-
}
|
3018 |
-
return (/input|select|textarea|button|object/.test( nodeName ) ?
|
3019 |
-
!element.disabled :
|
3020 |
-
'a' === nodeName ?
|
3021 |
-
element.href || isTabIndexNotNaN :
|
3022 |
-
isTabIndexNotNaN
|
3023 |
-
);
|
3024 |
}
|
3025 |
|
3026 |
-
//
|
3027 |
-
|
3028 |
-
// Blurring body element in IE causes window.open windows to unfocus!
|
3029 |
-
if ( focusableElems.length < 1 && blurElems.length ) {
|
3030 |
-
blurElems.not( 'body' ).blur();
|
3031 |
-
}
|
3032 |
|
3033 |
-
|
3034 |
-
|
3035 |
-
|
3036 |
-
}
|
3037 |
}
|
3038 |
|
3039 |
-
//
|
3040 |
-
|
3041 |
-
|
3042 |
-
|
3043 |
-
}
|
3044 |
|
3045 |
-
|
3046 |
-
|
3047 |
-
container = target.closest( SELECTOR ),
|
3048 |
-
targetOnTop;
|
3049 |
|
3050 |
-
|
3051 |
-
|
3052 |
-
|
|
|
3053 |
|
3054 |
-
|
3055 |
-
|
3056 |
-
|
3057 |
-
|
3058 |
-
focusInputs( target );
|
3059 |
-
}
|
3060 |
|
3061 |
-
|
3062 |
-
|
|
|
|
|
|
|
3063 |
}
|
3064 |
|
3065 |
-
|
3066 |
-
|
3067 |
-
|
3068 |
-
|
3069 |
-
|
3070 |
-
|
3071 |
-
|
3072 |
-
|
3073 |
-
mousedown: function() {
|
3074 |
-
return FALSE;
|
3075 |
-
}
|
3076 |
-
}
|
3077 |
-
)
|
3078 |
-
.hide();
|
3079 |
-
|
3080 |
-
// Make sure we can't focus anything outside the tooltip
|
3081 |
-
$( document.body ).bind( 'focusin' + MODALSELECTOR, stealFocus );
|
3082 |
-
|
3083 |
-
// Apply keyboard "Escape key" close handler
|
3084 |
-
$( document ).bind(
|
3085 |
-
'keydown' + MODALSELECTOR, function( event ) {
|
3086 |
-
if ( current && current.options.show.modal.escape && event.keyCode === 27 ) {
|
3087 |
-
current.hide( event );
|
3088 |
-
}
|
3089 |
-
}
|
3090 |
-
);
|
3091 |
-
|
3092 |
-
// Apply click handler for blur option
|
3093 |
-
elem.bind(
|
3094 |
-
'click' + MODALSELECTOR, function( event ) {
|
3095 |
-
if ( current && current.options.show.modal.blur ) {
|
3096 |
-
current.hide( event );
|
3097 |
-
}
|
3098 |
-
}
|
3099 |
-
);
|
3100 |
-
|
3101 |
-
return self;
|
3102 |
-
},
|
3103 |
-
|
3104 |
-
update: function( api ) {
|
3105 |
-
// Update current API reference
|
3106 |
-
current = api;
|
3107 |
-
|
3108 |
-
// Update focusable elements if enabled
|
3109 |
-
if ( api.options.show.modal.stealfocus !== FALSE ) {
|
3110 |
-
focusableElems = api.tooltip.find( '*' ).filter(
|
3111 |
-
function() {
|
3112 |
-
return focusable( this );
|
3113 |
-
}
|
3114 |
-
);
|
3115 |
-
}
|
3116 |
-
else {
|
3117 |
-
focusableElems = [];
|
3118 |
-
}
|
3119 |
-
},
|
3120 |
-
|
3121 |
-
toggle: function( api, state, duration ) {
|
3122 |
-
var docBody = $( document.body ),
|
3123 |
-
tooltip = api.tooltip,
|
3124 |
-
options = api.options.show.modal,
|
3125 |
-
effect = options.effect,
|
3126 |
-
type = state ? 'show' : 'hide',
|
3127 |
-
visible = elem.is( ':visible' ),
|
3128 |
-
visibleModals = $( MODALSELECTOR ).filter( ':visible:not(:animated)' ).not( tooltip ),
|
3129 |
-
zindex;
|
3130 |
-
|
3131 |
-
// Set active tooltip API reference
|
3132 |
-
self.update( api );
|
3133 |
-
|
3134 |
-
// If the modal can steal the focus...
|
3135 |
-
// Blur the current item and focus anything in the modal we an
|
3136 |
-
if ( state && options.stealfocus !== FALSE ) {
|
3137 |
-
focusInputs( $( ':focus' ) );
|
3138 |
-
}
|
3139 |
-
|
3140 |
-
// Toggle backdrop cursor style on show
|
3141 |
-
elem.toggleClass( 'blurs', options.blur );
|
3142 |
-
|
3143 |
-
// Append to body on show
|
3144 |
-
if ( state ) {
|
3145 |
-
elem.appendTo( document.body );
|
3146 |
-
}
|
3147 |
-
|
3148 |
-
// Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible
|
3149 |
-
if ( (elem.is( ':animated' ) && visible === state && prevState !== FALSE) || (!state && visibleModals.length) ) {
|
3150 |
-
return self;
|
3151 |
-
}
|
3152 |
-
|
3153 |
-
// Stop all animations
|
3154 |
-
elem.stop( TRUE, FALSE );
|
3155 |
-
|
3156 |
-
// Use custom function if provided
|
3157 |
-
if ( $.isFunction( effect ) ) {
|
3158 |
-
effect.call( elem, state );
|
3159 |
-
}
|
3160 |
-
|
3161 |
-
// If no effect type is supplied, use a simple toggle
|
3162 |
-
else if ( effect === FALSE ) {
|
3163 |
-
elem[type]();
|
3164 |
-
}
|
3165 |
-
|
3166 |
-
// Use basic fade function
|
3167 |
-
else {
|
3168 |
-
elem.fadeTo(
|
3169 |
-
parseInt( duration, 10 ) || 90, state ? 1 : 0, function() {
|
3170 |
-
if ( !state ) {
|
3171 |
-
elem.hide();
|
3172 |
-
}
|
3173 |
-
}
|
3174 |
-
);
|
3175 |
-
}
|
3176 |
-
|
3177 |
-
// Reset position and detach from body on hide
|
3178 |
-
if ( !state ) {
|
3179 |
-
elem.queue(
|
3180 |
-
function( next ) {
|
3181 |
-
elem.css( {left: '', top: ''} );
|
3182 |
-
if ( !$( MODALSELECTOR ).length ) {
|
3183 |
-
elem.detach();
|
3184 |
-
}
|
3185 |
-
next();
|
3186 |
-
}
|
3187 |
-
);
|
3188 |
-
}
|
3189 |
-
|
3190 |
-
// Cache the state
|
3191 |
-
prevState = state;
|
3192 |
-
|
3193 |
-
// If the tooltip is destroyed, set reference to null
|
3194 |
-
if ( current.destroyed ) {
|
3195 |
-
current = NULL;
|
3196 |
-
}
|
3197 |
-
|
3198 |
-
return self;
|
3199 |
-
}
|
3200 |
-
}
|
3201 |
-
);
|
3202 |
|
3203 |
-
|
3204 |
-
|
3205 |
-
OVERLAY = new OVERLAY();
|
3206 |
|
3207 |
-
|
3208 |
-
|
3209 |
-
this._ns = '-modal';
|
3210 |
|
3211 |
-
|
3212 |
}
|
|
|
3213 |
|
3214 |
-
|
3215 |
-
|
3216 |
-
|
3217 |
-
var tooltip = qtip.tooltip;
|
3218 |
-
|
3219 |
-
// If modal is disabled... return
|
3220 |
-
if ( !this.options.on ) {
|
3221 |
-
return this;
|
3222 |
-
}
|
3223 |
-
|
3224 |
-
// Set overlay reference
|
3225 |
-
qtip.elements.overlay = OVERLAY.elem;
|
3226 |
-
|
3227 |
-
// Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index
|
3228 |
-
tooltip.addClass( MODALCLASS ).css(
|
3229 |
-
'z-index', QTIP.modal_zindex + $( MODALSELECTOR ).length
|
3230 |
-
);
|
3231 |
|
3232 |
-
|
3233 |
-
|
3234 |
-
|
3235 |
-
var oEvent = event.originalEvent;
|
3236 |
-
|
3237 |
-
// Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop
|
3238 |
-
if ( event.target === tooltip[0] ) {
|
3239 |
-
if ( oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test( oEvent.type ) && $( oEvent.relatedTarget ).closest( OVERLAY.elem[0] ).length ) {
|
3240 |
-
try {
|
3241 |
-
event.preventDefault();
|
3242 |
-
} catch ( e ) {
|
3243 |
-
}
|
3244 |
-
}
|
3245 |
-
else if ( !oEvent || (oEvent && oEvent.type !== 'tooltipsolo') ) {
|
3246 |
-
this.toggle( event, event.type === 'tooltipshow', duration );
|
3247 |
-
}
|
3248 |
-
}
|
3249 |
-
}, this._ns, this
|
3250 |
-
);
|
3251 |
|
3252 |
-
|
3253 |
-
|
3254 |
-
tooltip, 'tooltipfocus', function( event, api ) {
|
3255 |
-
// If focus was cancelled before it reached us, don't do anything
|
3256 |
-
if ( event.isDefaultPrevented() || event.target !== tooltip[0] ) {
|
3257 |
-
return;
|
3258 |
-
}
|
3259 |
-
|
3260 |
-
var qtips = $( MODALSELECTOR ),
|
3261 |
-
|
3262 |
-
// Keep the modal's lower than other, regular qtips
|
3263 |
-
newIndex = QTIP.modal_zindex + qtips.length,
|
3264 |
-
curIndex = parseInt( tooltip[0].style.zIndex, 10 );
|
3265 |
-
|
3266 |
-
// Set overlay z-index
|
3267 |
-
OVERLAY.elem[0].style.zIndex = newIndex - 1;
|
3268 |
-
|
3269 |
-
// Reduce modal z-index's and keep them properly ordered
|
3270 |
-
qtips.each(
|
3271 |
-
function() {
|
3272 |
-
if ( this.style.zIndex > curIndex ) {
|
3273 |
-
this.style.zIndex -= 1;
|
3274 |
-
}
|
3275 |
-
}
|
3276 |
-
);
|
3277 |
-
|
3278 |
-
// Fire blur event for focused tooltip
|
3279 |
-
qtips.filter( '.' + CLASS_FOCUS ).qtip( 'blur', event.originalEvent );
|
3280 |
-
|
3281 |
-
// Set the new z-index
|
3282 |
-
tooltip.addClass( CLASS_FOCUS )[0].style.zIndex = newIndex;
|
3283 |
-
|
3284 |
-
// Set current
|
3285 |
-
OVERLAY.update( api );
|
3286 |
-
|
3287 |
-
// Prevent default handling
|
3288 |
-
try {
|
3289 |
-
event.preventDefault();
|
3290 |
-
} catch ( e ) {
|
3291 |
-
}
|
3292 |
-
}, this._ns, this
|
3293 |
-
);
|
3294 |
|
3295 |
-
|
3296 |
-
|
3297 |
-
|
3298 |
-
if ( event.target === tooltip[0] ) {
|
3299 |
-
$( MODALSELECTOR ).filter( ':visible' ).not( tooltip ).last().qtip(
|
3300 |
-
'focus', event
|
3301 |
-
);
|
3302 |
-
}
|
3303 |
-
}, this._ns, this
|
3304 |
-
);
|
3305 |
-
},
|
3306 |
|
3307 |
-
|
3308 |
-
|
3309 |
-
if ( event && event.isDefaultPrevented() ) {
|
3310 |
-
return this;
|
3311 |
-
}
|
3312 |
|
3313 |
-
|
3314 |
-
|
3315 |
-
},
|
3316 |
|
3317 |
-
|
3318 |
-
|
3319 |
-
this.qtip.tooltip.removeClass( MODALCLASS );
|
3320 |
|
3321 |
-
|
3322 |
-
|
|
|
3323 |
|
3324 |
-
|
3325 |
-
|
3326 |
-
|
|
|
|
|
|
|
|
|
3327 |
}
|
3328 |
}
|
3329 |
-
);
|
3330 |
|
|
|
|
|
|
|
|
|
3331 |
|
3332 |
-
|
3333 |
-
return new Modal( api, api.options.show.modal );
|
3334 |
-
};
|
3335 |
|
3336 |
-
|
3337 |
-
|
3338 |
-
|
3339 |
-
|
3340 |
-
|
3341 |
-
|
3342 |
-
|
3343 |
-
|
|
|
|
|
|
|
3344 |
}
|
3345 |
-
}
|
3346 |
-
};
|
3347 |
|
3348 |
-
|
3349 |
-
|
3350 |
|
3351 |
-
|
3352 |
-
|
3353 |
|
3354 |
-
|
3355 |
-
|
3356 |
-
'^show.modal.(on|blur)$': function() {
|
3357 |
-
// Initialise
|
3358 |
-
this.destroy();
|
3359 |
-
this.init();
|
3360 |
|
3361 |
-
|
3362 |
-
|
3363 |
-
|
3364 |
-
);
|
3365 |
-
}
|
3366 |
-
};
|
3367 |
|
3368 |
-
//
|
3369 |
-
|
3370 |
-
|
3371 |
-
|
3372 |
-
modal: {
|
3373 |
-
on: FALSE,
|
3374 |
-
effect: TRUE,
|
3375 |
-
blur: TRUE,
|
3376 |
-
stealfocus: TRUE,
|
3377 |
-
escape: TRUE
|
3378 |
-
}
|
3379 |
-
}
|
3380 |
-
}
|
3381 |
-
);
|
3382 |
-
;
|
3383 |
-
PLUGINS.viewport = function( api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight ) {
|
3384 |
-
var target = posOptions.target,
|
3385 |
-
tooltip = api.elements.tooltip,
|
3386 |
-
my = posOptions.my,
|
3387 |
-
at = posOptions.at,
|
3388 |
-
adjust = posOptions.adjust,
|
3389 |
-
method = adjust.method.split( ' ' ),
|
3390 |
-
methodX = method[0],
|
3391 |
-
methodY = method[1] || method[0],
|
3392 |
-
viewport = posOptions.viewport,
|
3393 |
-
container = posOptions.container,
|
3394 |
-
cache = api.cache,
|
3395 |
-
adjusted = {left: 0, top: 0},
|
3396 |
-
fixed, newMy, newClass, containerOffset, containerStatic,
|
3397 |
-
viewportWidth, viewportHeight, viewportScroll, viewportOffset;
|
3398 |
-
|
3399 |
-
// If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return
|
3400 |
-
if ( !viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none' ) {
|
3401 |
-
return adjusted;
|
3402 |
}
|
|
|
|
|
3403 |
|
3404 |
-
|
3405 |
-
|
3406 |
-
|
3407 |
-
|
3408 |
-
// Cache our viewport details
|
3409 |
-
fixed = tooltip.css( 'position' ) === 'fixed';
|
3410 |
-
viewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth( FALSE );
|
3411 |
-
viewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight( FALSE );
|
3412 |
-
viewportScroll = {left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop()};
|
3413 |
-
viewportOffset = viewport.offset() || adjusted;
|
3414 |
-
|
3415 |
-
// Generic calculation method
|
3416 |
-
function calculate( side, otherSide, type, adjust, side1, side2, lengthName, targetLength, elemLength ) {
|
3417 |
-
var initialPos = position[side1],
|
3418 |
-
mySide = my[side],
|
3419 |
-
atSide = at[side],
|
3420 |
-
isShift = type === SHIFT,
|
3421 |
-
myLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2,
|
3422 |
-
atLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2,
|
3423 |
-
sideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]),
|
3424 |
-
overflow1 = sideOffset - initialPos,
|
3425 |
-
overflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset,
|
3426 |
-
offset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0);
|
3427 |
-
|
3428 |
-
// shift
|
3429 |
-
if ( isShift ) {
|
3430 |
-
offset = (mySide === side1 ? 1 : -1) * myLength;
|
3431 |
-
|
3432 |
-
// Adjust position but keep it within viewport dimensions
|
3433 |
-
position[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0;
|
3434 |
-
position[side1] = Math.max(
|
3435 |
-
-containerOffset[side1] + viewportOffset[side1],
|
3436 |
-
initialPos - offset,
|
3437 |
-
Math.min(
|
3438 |
-
Math.max(
|
3439 |
-
-containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight),
|
3440 |
-
initialPos + offset
|
3441 |
-
),
|
3442 |
-
position[side1],
|
3443 |
-
|
3444 |
-
// Make sure we don't adjust complete off the element when using 'center'
|
3445 |
-
mySide === 'center' ? initialPos - myLength : 1E9
|
3446 |
-
)
|
3447 |
-
);
|
3448 |
-
|
3449 |
-
}
|
3450 |
|
3451 |
-
|
3452 |
-
|
3453 |
-
|
3454 |
-
adjust *= (type === FLIPINVERT ? 2 : 0);
|
3455 |
|
3456 |
-
|
3457 |
-
|
3458 |
-
|
3459 |
-
newMy.invert( side, side1 );
|
3460 |
-
}
|
3461 |
|
3462 |
-
|
3463 |
-
|
3464 |
-
position[side1] -= (mySide === CENTER ? -offset : offset) + adjust;
|
3465 |
-
newMy.invert( side, side2 );
|
3466 |
-
}
|
3467 |
|
3468 |
-
|
3469 |
-
|
3470 |
-
|
3471 |
-
|
3472 |
-
|
3473 |
-
}
|
3474 |
|
3475 |
-
return position[side1] - initialPos;
|
3476 |
-
}
|
3477 |
|
3478 |
-
|
3479 |
-
|
3480 |
-
|
3481 |
-
}
|
3482 |
|
3483 |
-
|
3484 |
-
|
3485 |
-
|
3486 |
-
|
3487 |
-
|
3488 |
-
|
3489 |
-
|
3490 |
-
) : 0
|
3491 |
-
};
|
3492 |
|
3493 |
-
|
3494 |
-
|
3495 |
-
tooltip.removeClass( api.cache.lastClass ).addClass( (api.cache.lastClass = newClass) );
|
3496 |
-
}
|
3497 |
|
3498 |
-
|
3499 |
-
|
3500 |
-
;
|
3501 |
-
PLUGINS.polys = {
|
3502 |
-
// POLY area coordinate calculator
|
3503 |
-
// Special thanks to Ed Cradock for helping out with this.
|
3504 |
-
// Uses a binary search algorithm to find suitable coordinates.
|
3505 |
-
polygon: function( baseCoords, corner ) {
|
3506 |
-
var result = {
|
3507 |
-
width: 0, height: 0,
|
3508 |
-
position: {
|
3509 |
-
top: 1e10, right: 0,
|
3510 |
-
bottom: 0, left: 1e10
|
3511 |
-
},
|
3512 |
-
adjustable: FALSE
|
3513 |
-
},
|
3514 |
-
i = 0, next,
|
3515 |
-
coords = [],
|
3516 |
-
compareX = 1, compareY = 1,
|
3517 |
-
realX = 0, realY = 0,
|
3518 |
-
newWidth, newHeight;
|
3519 |
-
|
3520 |
-
// First pass, sanitize coords and determine outer edges
|
3521 |
-
i = baseCoords.length;
|
3522 |
-
while ( i-- ) {
|
3523 |
-
next = [parseInt( baseCoords[--i], 10 ), parseInt( baseCoords[i + 1], 10 )];
|
3524 |
-
|
3525 |
-
if ( next[0] > result.position.right ) {
|
3526 |
-
result.position.right = next[0];
|
3527 |
-
}
|
3528 |
-
if ( next[0] < result.position.left ) {
|
3529 |
-
result.position.left = next[0];
|
3530 |
-
}
|
3531 |
-
if ( next[1] > result.position.bottom ) {
|
3532 |
-
result.position.bottom = next[1];
|
3533 |
-
}
|
3534 |
-
if ( next[1] < result.position.top ) {
|
3535 |
-
result.position.top = next[1];
|
3536 |
-
}
|
3537 |
|
3538 |
-
|
3539 |
-
|
|
|
|
|
|
|
|
|
3540 |
|
3541 |
-
|
3542 |
-
|
3543 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3544 |
|
3545 |
-
|
3546 |
-
|
3547 |
-
|
3548 |
-
|
3549 |
-
|
3550 |
-
|
3551 |
-
|
3552 |
-
|
3553 |
-
|
3554 |
-
|
3555 |
-
|
3556 |
-
|
3557 |
-
|
3558 |
-
|
3559 |
-
|
3560 |
-
|
3561 |
-
|
3562 |
-
|
3563 |
-
|
3564 |
-
|
3565 |
-
|
3566 |
-
|
3567 |
-
|
3568 |
-
|
3569 |
-
|
3570 |
-
|
3571 |
-
|
3572 |
-
|
3573 |
-
|
3574 |
-
|
3575 |
-
|
3576 |
-
|
3577 |
-
|
3578 |
-
|
3579 |
-
|
3580 |
-
|
3581 |
-
|
3582 |
-
|
3583 |
-
|
3584 |
-
|
3585 |
-
|
3586 |
-
|
3587 |
-
|
3588 |
-
|
3589 |
-
(corner.x === CENTER && (realX < compareX || realX > (result.width - compareX))) ||
|
3590 |
-
(corner.y === TOP && realY >= compareY) ||
|
3591 |
-
(corner.y === BOTTOM && realY <= compareY) ||
|
3592 |
-
(corner.y === CENTER && (realY < compareY || realY > (result.height - compareY))) ) {
|
3593 |
-
coords.splice( i, 1 );
|
3594 |
-
}
|
3595 |
-
}
|
3596 |
-
}
|
3597 |
-
result.position = {left: coords[0][0], top: coords[0][1]};
|
3598 |
-
}
|
3599 |
|
3600 |
-
|
3601 |
-
},
|
3602 |
|
3603 |
-
|
3604 |
-
|
3605 |
-
|
3606 |
-
|
3607 |
-
position: {
|
3608 |
-
left: Math.min( ax, bx ),
|
3609 |
-
top: Math.min( ay, by )
|
3610 |
-
}
|
3611 |
-
};
|
3612 |
-
},
|
3613 |
|
3614 |
-
|
3615 |
-
|
3616 |
-
|
3617 |
-
|
3618 |
-
},
|
3619 |
-
ellipse: function( cx, cy, rx, ry, corner ) {
|
3620 |
-
var c = PLUGINS.polys._angles[corner.abbrev()],
|
3621 |
-
rxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ),
|
3622 |
-
rys = ry * Math.sin( c * Math.PI );
|
3623 |
-
|
3624 |
-
return {
|
3625 |
-
width: (rx * 2) - Math.abs( rxc ),
|
3626 |
-
height: (ry * 2) - Math.abs( rys ),
|
3627 |
-
position: {
|
3628 |
-
left: cx + rxc,
|
3629 |
-
top: cy + rys
|
3630 |
-
},
|
3631 |
-
adjustable: FALSE
|
3632 |
-
};
|
3633 |
-
},
|
3634 |
-
circle: function( cx, cy, r, corner ) {
|
3635 |
-
return PLUGINS.polys.ellipse( cx, cy, r, r, corner );
|
3636 |
-
}
|
3637 |
-
};
|
3638 |
-
;
|
3639 |
-
PLUGINS.svg = function( api, svg, corner ) {
|
3640 |
-
var doc = $( document ),
|
3641 |
-
elem = svg[0],
|
3642 |
-
root = $( elem.ownerSVGElement ),
|
3643 |
-
xScale = 1, yScale = 1,
|
3644 |
-
complex = true,
|
3645 |
-
rootWidth, rootHeight,
|
3646 |
-
mtx, transformed, viewBox,
|
3647 |
-
len, next, i, points,
|
3648 |
-
result, position, dimensions;
|
3649 |
-
|
3650 |
-
// Ascend the parentNode chain until we find an element with getBBox()
|
3651 |
-
while ( !elem.getBBox ) {
|
3652 |
-
elem = elem.parentNode;
|
3653 |
-
}
|
3654 |
-
if ( !elem.getBBox || !elem.parentNode ) {
|
3655 |
-
return FALSE;
|
3656 |
}
|
3657 |
|
3658 |
-
//
|
3659 |
-
|
3660 |
-
|
|
|
|
|
3661 |
|
3662 |
-
//
|
3663 |
-
|
3664 |
-
|
3665 |
-
xScale += strokeWidth2 / rootWidth;
|
3666 |
-
yScale += strokeWidth2 / rootHeight;
|
3667 |
}
|
|
|
3668 |
|
3669 |
-
|
3670 |
-
|
3671 |
-
case 'ellipse':
|
3672 |
-
case 'circle':
|
3673 |
-
result = PLUGINS.polys.ellipse(
|
3674 |
-
elem.cx.baseVal.value,
|
3675 |
-
elem.cy.baseVal.value,
|
3676 |
-
(elem.rx || elem.r).baseVal.value + strokeWidth2,
|
3677 |
-
(elem.ry || elem.r).baseVal.value + strokeWidth2,
|
3678 |
-
corner
|
3679 |
-
);
|
3680 |
-
break;
|
3681 |
-
|
3682 |
-
case 'line':
|
3683 |
-
case 'polygon':
|
3684 |
-
case 'polyline':
|
3685 |
-
// Determine points object (line has none, so mimic using array)
|
3686 |
-
points = elem.points || [
|
3687 |
-
{x: elem.x1.baseVal.value, y: elem.y1.baseVal.value},
|
3688 |
-
{x: elem.x2.baseVal.value, y: elem.y2.baseVal.value}
|
3689 |
-
];
|
3690 |
-
|
3691 |
-
for ( result = [], i = -1, len = points.numberOfItems || points.length; ++i < len; ) {
|
3692 |
-
next = points.getItem ? points.getItem( i ) : points[i];
|
3693 |
-
result.push.apply( result, [next.x, next.y] );
|
3694 |
-
}
|
3695 |
|
3696 |
-
|
3697 |
-
|
3698 |
-
|
3699 |
-
|
3700 |
-
|
3701 |
-
|
3702 |
-
|
3703 |
-
|
3704 |
-
|
3705 |
-
|
3706 |
-
|
3707 |
-
|
3708 |
-
|
3709 |
-
|
3710 |
-
|
3711 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3712 |
|
3713 |
-
|
3714 |
-
|
3715 |
-
|
3716 |
-
|
3717 |
-
// If the shape was complex (i.e. not using bounding box calculations)
|
3718 |
-
if ( complex ) {
|
3719 |
-
// Convert position into a pixel value
|
3720 |
-
if ( root.createSVGPoint ) {
|
3721 |
-
mtx = elem.getScreenCTM();
|
3722 |
-
points = root.createSVGPoint();
|
3723 |
-
|
3724 |
-
points.x = position.left;
|
3725 |
-
points.y = position.top;
|
3726 |
-
transformed = points.matrixTransform( mtx );
|
3727 |
-
position.left = transformed.x;
|
3728 |
-
position.top = transformed.y;
|
3729 |
-
}
|
3730 |
|
3731 |
-
|
3732 |
-
|
3733 |
-
|
3734 |
-
|
3735 |
-
|
3736 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3737 |
|
3738 |
-
|
3739 |
-
|
3740 |
-
|
3741 |
|
3742 |
-
|
3743 |
-
|
3744 |
-
|
3745 |
-
PLUGINS.imagemap = function( api, area, corner, adjustMethod ) {
|
3746 |
-
if ( !area.jquery ) {
|
3747 |
-
area = $( area );
|
3748 |
-
}
|
3749 |
|
3750 |
-
|
3751 |
-
|
3752 |
-
|
3753 |
-
coordsArray = coordsString.replace( /,$/, '' ).split( ',' ),
|
3754 |
-
imageOffset, coords, i, next, result, len;
|
3755 |
|
3756 |
-
|
3757 |
-
|
3758 |
-
return FALSE;
|
3759 |
-
}
|
3760 |
|
3761 |
-
|
3762 |
-
|
3763 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3764 |
}
|
|
|
|
|
3765 |
|
3766 |
-
|
3767 |
-
|
3768 |
-
for ( i = -1, len = coordsArray.length, coords = []; ++i < len; ) {
|
3769 |
-
coords.push( parseInt( coordsArray[i], 10 ) );
|
3770 |
-
}
|
3771 |
|
3772 |
-
|
3773 |
-
|
3774 |
-
|
|
|
|
|
|
|
|
|
3775 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3776 |
|
3777 |
-
|
3778 |
-
|
3779 |
-
|
3780 |
-
}
|
3781 |
|
3782 |
-
|
3783 |
-
|
3784 |
-
|
3785 |
-
|
3786 |
|
3787 |
-
|
3788 |
-
|
3789 |
-
|
|
|
|
|
|
|
3790 |
|
3791 |
-
|
3792 |
-
|
3793 |
-
;
|
3794 |
-
|
|
|
|
|
|
|
|
|
3795 |
|
3796 |
-
|
3797 |
-
|
3798 |
-
|
3799 |
-
|
3800 |
-
|
3801 |
-
|
3802 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3803 |
|
3804 |
-
|
3805 |
-
|
3806 |
-
|
|
|
3807 |
}
|
3808 |
|
3809 |
-
|
3810 |
-
|
3811 |
-
|
3812 |
-
|
3813 |
-
overlay && (overlay[0].style.top = $( window ).scrollTop() + 'px');
|
3814 |
-
},
|
3815 |
-
|
3816 |
-
init: function( qtip ) {
|
3817 |
-
var tooltip = qtip.tooltip,
|
3818 |
-
scroll;
|
3819 |
|
3820 |
-
|
3821 |
-
|
3822 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3823 |
|
3824 |
-
|
3825 |
-
|
3826 |
-
|
|
|
|
|
3827 |
|
3828 |
-
|
3829 |
-
|
3830 |
-
|
3831 |
|
3832 |
-
|
3833 |
-
|
3834 |
-
|
3835 |
-
qtip._bind( tooltip, ['tooltipshow'], this._scroll, this._ns, this );
|
3836 |
-
}
|
3837 |
|
3838 |
-
|
3839 |
-
|
3840 |
-
|
3841 |
|
3842 |
-
|
3843 |
-
|
3844 |
-
|
3845 |
-
height: tooltip.outerHeight( FALSE ),
|
3846 |
-
width: tooltip.outerWidth( FALSE )
|
3847 |
-
},
|
3848 |
-
plugin = this.qtip.plugins.tip,
|
3849 |
-
tip = this.qtip.elements.tip,
|
3850 |
-
tipAdjust, offset;
|
3851 |
-
|
3852 |
-
// Adjust border offset
|
3853 |
-
offset = parseInt( tooltip.css( 'borderLeftWidth' ), 10 ) || 0;
|
3854 |
-
offset = {left: -offset, top: -offset};
|
3855 |
-
|
3856 |
-
// Adjust for tips plugin
|
3857 |
-
if ( plugin && tip ) {
|
3858 |
-
tipAdjust = (plugin.corner.precedance === 'x') ? [WIDTH, LEFT] : [HEIGHT, TOP];
|
3859 |
-
offset[tipAdjust[1]] -= tip[tipAdjust[0]]();
|
3860 |
-
}
|
3861 |
|
3862 |
-
|
3863 |
-
|
3864 |
-
|
|
|
|
|
3865 |
|
3866 |
-
|
3867 |
-
|
3868 |
-
|
3869 |
-
return this;
|
3870 |
-
}
|
3871 |
|
3872 |
-
|
3873 |
-
|
3874 |
-
|
3875 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3876 |
|
3877 |
-
|
3878 |
-
|
|
|
3879 |
|
3880 |
-
|
3881 |
-
|
3882 |
-
|
3883 |
-
}
|
3884 |
-
if ( style.width ) {
|
3885 |
-
tooltip.css( WIDTH, style.width );
|
3886 |
-
}
|
3887 |
|
3888 |
-
|
3889 |
-
|
3890 |
-
|
3891 |
-
|
3892 |
|
3893 |
-
|
3894 |
-
|
3895 |
-
if ( width % 2 < 1 ) {
|
3896 |
-
width += 1;
|
3897 |
-
}
|
3898 |
|
3899 |
-
|
3900 |
-
|
3901 |
-
|
3902 |
|
3903 |
-
|
3904 |
-
|
3905 |
-
|
3906 |
-
|
3907 |
|
3908 |
-
|
3909 |
-
|
|
|
3910 |
|
3911 |
-
|
3912 |
-
|
3913 |
-
|
3914 |
|
3915 |
-
|
3916 |
-
|
|
|
|
|
3917 |
|
3918 |
-
|
3919 |
-
|
3920 |
|
3921 |
-
|
3922 |
-
|
3923 |
-
|
3924 |
|
3925 |
-
|
3926 |
-
|
3927 |
-
}
|
3928 |
-
}
|
3929 |
-
);
|
3930 |
|
3931 |
-
|
3932 |
-
|
3933 |
-
return BROWSER.ie === 6 ? new Ie6( api ) : FALSE;
|
3934 |
-
};
|
3935 |
|
3936 |
-
|
|
|
|
|
3937 |
|
3938 |
-
|
3939 |
-
|
3940 |
-
this.redraw();
|
3941 |
-
}
|
3942 |
-
};
|
3943 |
-
;
|
3944 |
}
|
3945 |
-
)
|
3946 |
-
}( window, document ));
|
3947 |
-
}
|
3948 |
-
|
3949 |
|
|
|
|
|
|
|
|
|
3950 |
|
|
|
3951 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
/*
|
2 |
+
* qTip2 - Pretty powerful tooltips - v2.2.1
|
3 |
* http://qtip2.com
|
4 |
*
|
5 |
+
* Copyright (c) 2014
|
6 |
+
* Released under the MIT licenses
|
7 |
* http://jquery.org/license
|
8 |
*
|
9 |
+
* Date: Sat Sep 6 2014 11:12 GMT+0100+0100
|
10 |
* Plugins: tips modal viewport svg imagemap ie6
|
11 |
+
* Styles: core basic css3
|
12 |
*/
|
13 |
/*global window: false, jQuery: false, console: false, define: false */
|
14 |
|
15 |
+
/* Cache window, document, undefined */
|
16 |
+
(function( window, document, undefined ) {
|
|
|
17 |
|
18 |
+
// Uses AMD or browser globals to create a jQuery plugin.
|
19 |
+
(function( factory ) {
|
20 |
+
"use strict";
|
21 |
+
if(typeof define === 'function' && define.amd) {
|
22 |
+
define(['jquery'], factory);
|
|
|
|
|
|
|
|
|
23 |
}
|
24 |
+
else if(jQuery && !jQuery.fn.qtip) {
|
25 |
+
factory(jQuery);
|
26 |
+
}
|
27 |
+
}
|
28 |
+
(function($) {
|
29 |
+
"use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
|
30 |
+
;// Munge the primitives - Paul Irish tip
|
31 |
+
var TRUE = true,
|
32 |
+
FALSE = false,
|
33 |
+
NULL = null,
|
34 |
+
|
35 |
+
// Common variables
|
36 |
+
X = 'x', Y = 'y',
|
37 |
+
WIDTH = 'width',
|
38 |
+
HEIGHT = 'height',
|
39 |
+
|
40 |
+
// Positioning sides
|
41 |
+
TOP = 'top',
|
42 |
+
LEFT = 'left',
|
43 |
+
BOTTOM = 'bottom',
|
44 |
+
RIGHT = 'right',
|
45 |
+
CENTER = 'center',
|
46 |
+
|
47 |
+
// Position adjustment types
|
48 |
+
FLIP = 'flip',
|
49 |
+
FLIPINVERT = 'flipinvert',
|
50 |
+
SHIFT = 'shift',
|
51 |
+
|
52 |
+
// Shortcut vars
|
53 |
+
QTIP, PROTOTYPE, CORNER, CHECKS,
|
54 |
+
PLUGINS = {},
|
55 |
+
NAMESPACE = 'qtip',
|
56 |
+
ATTR_HAS = 'data-hasqtip',
|
57 |
+
ATTR_ID = 'data-qtip-id',
|
58 |
+
WIDGET = ['ui-widget', 'ui-tooltip'],
|
59 |
+
SELECTOR = '.'+NAMESPACE,
|
60 |
+
INACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' '),
|
61 |
+
|
62 |
+
CLASS_FIXED = NAMESPACE+'-fixed',
|
63 |
+
CLASS_DEFAULT = NAMESPACE + '-default',
|
64 |
+
CLASS_FOCUS = NAMESPACE + '-focus',
|
65 |
+
CLASS_HOVER = NAMESPACE + '-hover',
|
66 |
+
CLASS_DISABLED = NAMESPACE+'-disabled',
|
67 |
+
|
68 |
+
replaceSuffix = '_replacedByqTip',
|
69 |
+
oldtitle = 'oldtitle',
|
70 |
+
trackingBound,
|
71 |
+
|
72 |
+
// Browser detection
|
73 |
+
BROWSER = {
|
74 |
+
/*
|
75 |
+
* IE version detection
|
76 |
+
*
|
77 |
+
* Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment
|
78 |
+
* Credit to James Padolsey for the original implemntation!
|
79 |
+
*/
|
80 |
+
ie: (function(){
|
81 |
+
for (
|
82 |
+
var v = 4, i = document.createElement("div");
|
83 |
+
(i.innerHTML = "<!--[if gt IE " + v + "]><i></i><![endif]-->") && i.getElementsByTagName("i")[0];
|
84 |
+
v+=1
|
85 |
+
) {}
|
86 |
+
return v > 4 ? v : NaN;
|
87 |
+
}()),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
|
89 |
+
/*
|
90 |
+
* iOS version detection
|
91 |
+
*/
|
92 |
+
iOS: parseFloat(
|
93 |
+
('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1])
|
94 |
+
.replace('undefined', '3_2').replace('_', '.').replace('_', '')
|
95 |
+
) || FALSE
|
96 |
+
};
|
97 |
+
;function QTip(target, options, id, attr) {
|
98 |
+
// Elements and ID
|
99 |
+
this.id = id;
|
100 |
+
this.target = target;
|
101 |
+
this.tooltip = NULL;
|
102 |
+
this.elements = { target: target };
|
103 |
+
|
104 |
+
// Internal constructs
|
105 |
+
this._id = NAMESPACE + '-' + id;
|
106 |
+
this.timers = { img: {} };
|
107 |
+
this.options = options;
|
108 |
+
this.plugins = {};
|
109 |
+
|
110 |
+
// Cache object
|
111 |
+
this.cache = {
|
112 |
+
event: {},
|
113 |
+
target: $(),
|
114 |
+
disabled: FALSE,
|
115 |
+
attr: attr,
|
116 |
+
onTooltip: FALSE,
|
117 |
+
lastClass: ''
|
118 |
+
};
|
119 |
+
|
120 |
+
// Set the initial flags
|
121 |
+
this.rendered = this.destroyed = this.disabled = this.waiting =
|
122 |
+
this.hiddenDuringWait = this.positioning = this.triggering = FALSE;
|
123 |
+
}
|
124 |
+
PROTOTYPE = QTip.prototype;
|
125 |
+
|
126 |
+
PROTOTYPE._when = function(deferreds) {
|
127 |
+
return $.when.apply($, deferreds);
|
128 |
+
};
|
129 |
+
|
130 |
+
PROTOTYPE.render = function(show) {
|
131 |
+
if(this.rendered || this.destroyed) { return this; } // If tooltip has already been rendered, exit
|
132 |
+
|
133 |
+
var self = this,
|
134 |
+
options = this.options,
|
135 |
+
cache = this.cache,
|
136 |
+
elements = this.elements,
|
137 |
+
text = options.content.text,
|
138 |
+
title = options.content.title,
|
139 |
+
button = options.content.button,
|
140 |
+
posOptions = options.position,
|
141 |
+
namespace = '.'+this._id+' ',
|
142 |
+
deferreds = [],
|
143 |
+
tooltip;
|
144 |
+
|
145 |
+
// Add ARIA attributes to target
|
146 |
+
$.attr(this.target[0], 'aria-describedby', this._id);
|
147 |
+
|
148 |
+
// Create public position object that tracks current position corners
|
149 |
+
cache.posClass = this._createPosClass(
|
150 |
+
(this.position = { my: posOptions.my, at: posOptions.at }).my
|
151 |
+
);
|
152 |
+
|
153 |
+
// Create tooltip element
|
154 |
+
this.tooltip = elements.tooltip = tooltip = $('<div/>', {
|
155 |
+
'id': this._id,
|
156 |
+
'class': [ NAMESPACE, CLASS_DEFAULT, options.style.classes, cache.posClass ].join(' '),
|
157 |
+
'width': options.style.width || '',
|
158 |
+
'height': options.style.height || '',
|
159 |
+
'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse,
|
160 |
+
|
161 |
+
/* ARIA specific attributes */
|
162 |
+
'role': 'alert',
|
163 |
+
'aria-live': 'polite',
|
164 |
+
'aria-atomic': FALSE,
|
165 |
+
'aria-describedby': this._id + '-content',
|
166 |
+
'aria-hidden': TRUE
|
167 |
+
})
|
168 |
+
.toggleClass(CLASS_DISABLED, this.disabled)
|
169 |
+
.attr(ATTR_ID, this.id)
|
170 |
+
.data(NAMESPACE, this)
|
171 |
+
.appendTo(posOptions.container)
|
172 |
+
.append(
|
173 |
+
// Create content element
|
174 |
+
elements.content = $('<div />', {
|
175 |
+
'class': NAMESPACE + '-content',
|
176 |
+
'id': this._id + '-content',
|
177 |
+
'aria-atomic': TRUE
|
178 |
+
})
|
179 |
+
);
|
180 |
+
|
181 |
+
// Set rendered flag and prevent redundant reposition calls for now
|
182 |
+
this.rendered = -1;
|
183 |
+
this.positioning = TRUE;
|
184 |
+
|
185 |
+
// Create title...
|
186 |
+
if(title) {
|
187 |
+
this._createTitle();
|
188 |
+
|
189 |
+
// Update title only if its not a callback (called in toggle if so)
|
190 |
+
if(!$.isFunction(title)) {
|
191 |
+
deferreds.push( this._updateTitle(title, FALSE) );
|
192 |
}
|
193 |
+
}
|
194 |
|
195 |
+
// Create button
|
196 |
+
if(button) { this._createButton(); }
|
197 |
|
198 |
+
// Set proper rendered flag and update content if not a callback function (called in toggle)
|
199 |
+
if(!$.isFunction(text)) {
|
200 |
+
deferreds.push( this._updateContent(text, FALSE) );
|
201 |
+
}
|
202 |
+
this.rendered = TRUE;
|
203 |
|
204 |
+
// Setup widget classes
|
205 |
+
this._setWidget();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
206 |
|
207 |
+
// Initialize 'render' plugins
|
208 |
+
$.each(PLUGINS, function(name) {
|
209 |
+
var instance;
|
210 |
+
if(this.initialize === 'render' && (instance = this(self))) {
|
211 |
+
self.plugins[name] = instance;
|
212 |
+
}
|
213 |
+
});
|
214 |
|
215 |
+
// Unassign initial events and assign proper events
|
216 |
+
this._unassignEvents();
|
217 |
+
this._assignEvents();
|
218 |
|
219 |
+
// When deferreds have completed
|
220 |
+
this._when(deferreds).then(function() {
|
221 |
+
// tooltiprender event
|
222 |
+
self._trigger('render');
|
223 |
|
224 |
+
// Reset flags
|
225 |
+
self.positioning = FALSE;
|
|
|
|
|
|
|
226 |
|
227 |
+
// Show tooltip if not hidden during wait period
|
228 |
+
if(!self.hiddenDuringWait && (options.show.ready || show)) {
|
229 |
+
self.toggle(TRUE, cache.event, FALSE);
|
230 |
+
}
|
231 |
+
self.hiddenDuringWait = FALSE;
|
232 |
+
});
|
233 |
|
234 |
+
// Expose API
|
235 |
+
QTIP.api[this.id] = this;
|
|
|
|
|
|
|
236 |
|
237 |
+
return this;
|
238 |
+
};
|
239 |
|
240 |
+
PROTOTYPE.destroy = function(immediate) {
|
241 |
+
// Set flag the signify destroy is taking place to plugins
|
242 |
+
// and ensure it only gets destroyed once!
|
243 |
+
if(this.destroyed) { return this.target; }
|
|
|
|
|
|
|
|
|
|
|
244 |
|
245 |
+
function process() {
|
246 |
+
if(this.destroyed) { return; }
|
247 |
+
this.destroyed = TRUE;
|
248 |
|
249 |
+
var target = this.target,
|
250 |
+
title = target.attr(oldtitle),
|
251 |
+
timer;
|
|
|
|
|
252 |
|
253 |
+
// Destroy tooltip if rendered
|
254 |
+
if(this.rendered) {
|
255 |
+
this.tooltip.stop(1,0).find('*').remove().end().remove();
|
256 |
+
}
|
257 |
|
258 |
+
// Destroy all plugins
|
259 |
+
$.each(this.plugins, function(name) {
|
260 |
+
this.destroy && this.destroy();
|
261 |
+
});
|
|
|
|
|
|
|
262 |
|
263 |
+
// Clear timers
|
264 |
+
for(timer in this.timers) {
|
265 |
+
clearTimeout(this.timers[timer]);
|
266 |
+
}
|
267 |
|
268 |
+
// Remove api object and ARIA attributes
|
269 |
+
target.removeData(NAMESPACE)
|
270 |
+
.removeAttr(ATTR_ID)
|
271 |
+
.removeAttr(ATTR_HAS)
|
272 |
+
.removeAttr('aria-describedby');
|
273 |
|
274 |
+
// Reset old title attribute if removed
|
275 |
+
if(this.options.suppress && title) {
|
276 |
+
target.attr('title', title).removeAttr(oldtitle);
|
277 |
+
}
|
|
|
|
|
278 |
|
279 |
+
// Remove qTip events associated with this API
|
280 |
+
this._unassignEvents();
|
|
|
|
|
|
|
281 |
|
282 |
+
// Remove ID from used id objects, and delete object references
|
283 |
+
// for better garbage collection and leak protection
|
284 |
+
this.options = this.elements = this.cache = this.timers =
|
285 |
+
this.plugins = this.mouse = NULL;
|
286 |
|
287 |
+
// Delete epoxsed API object
|
288 |
+
delete QTIP.api[this.id];
|
289 |
+
}
|
|
|
290 |
|
291 |
+
// If an immediate destory is needed
|
292 |
+
if((immediate !== TRUE || this.triggering === 'hide') && this.rendered) {
|
293 |
+
this.tooltip.one('tooltiphidden', $.proxy(process, this));
|
294 |
+
!this.triggering && this.hide();
|
295 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
296 |
|
297 |
+
// If we're not in the process of hiding... process
|
298 |
+
else { process.call(this); }
|
299 |
|
300 |
+
return this.target;
|
301 |
+
};
|
302 |
+
;function invalidOpt(a) {
|
303 |
+
return a === NULL || $.type(a) !== 'object';
|
304 |
+
}
|
305 |
|
306 |
+
function invalidContent(c) {
|
307 |
+
return !( $.isFunction(c) || (c && c.attr) || c.length || ($.type(c) === 'object' && (c.jquery || c.then) ));
|
308 |
+
}
|
309 |
|
310 |
+
// Option object sanitizer
|
311 |
+
function sanitizeOptions(opts) {
|
312 |
+
var content, text, ajax, once;
|
|
|
|
|
313 |
|
314 |
+
if(invalidOpt(opts)) { return FALSE; }
|
|
|
|
|
|
|
315 |
|
316 |
+
if(invalidOpt(opts.metadata)) {
|
317 |
+
opts.metadata = { type: opts.metadata };
|
318 |
+
}
|
319 |
|
320 |
+
if('content' in opts) {
|
321 |
+
content = opts.content;
|
|
|
|
|
322 |
|
323 |
+
if(invalidOpt(content) || content.jquery || content.done) {
|
324 |
+
content = opts.content = {
|
325 |
+
text: (text = invalidContent(content) ? FALSE : content)
|
326 |
+
};
|
327 |
}
|
328 |
+
else { text = content.text; }
|
329 |
|
330 |
+
// DEPRECATED - Old content.ajax plugin functionality
|
331 |
+
// Converts it into the proper Deferred syntax
|
332 |
+
if('ajax' in content) {
|
333 |
+
ajax = content.ajax;
|
334 |
+
once = ajax && ajax.once !== FALSE;
|
335 |
+
delete content.ajax;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
|
337 |
+
content.text = function(event, api) {
|
338 |
+
var loading = text || $(this).attr(api.options.content.attr) || 'Loading...',
|
|
|
|
|
|
|
339 |
|
340 |
+
deferred = $.ajax(
|
341 |
+
$.extend({}, ajax, { context: api })
|
342 |
+
)
|
343 |
+
.then(ajax.success, NULL, ajax.error)
|
344 |
+
.then(function(content) {
|
345 |
+
if(content && once) { api.set('content.text', content); }
|
346 |
+
return content;
|
347 |
+
},
|
348 |
+
function(xhr, status, error) {
|
349 |
+
if(api.destroyed || xhr.status === 0) { return; }
|
350 |
+
api.set('content.text', status + ': ' + error);
|
351 |
+
});
|
352 |
|
353 |
+
return !once ? (api.set('content.text', loading), deferred) : loading;
|
354 |
+
};
|
355 |
+
}
|
|
|
356 |
|
357 |
+
if('title' in content) {
|
358 |
+
if($.isPlainObject(content.title)) {
|
359 |
+
content.button = content.title.button;
|
360 |
+
content.title = content.title.text;
|
361 |
}
|
362 |
|
363 |
+
if(invalidContent(content.title || FALSE)) {
|
364 |
+
content.title = FALSE;
|
365 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
366 |
}
|
367 |
+
}
|
368 |
|
369 |
+
if('position' in opts && invalidOpt(opts.position)) {
|
370 |
+
opts.position = { my: opts.position, at: opts.position };
|
371 |
+
}
|
|
|
|
|
|
|
|
|
372 |
|
373 |
+
if('show' in opts && invalidOpt(opts.show)) {
|
374 |
+
opts.show = opts.show.jquery ? { target: opts.show } :
|
375 |
+
opts.show === TRUE ? { ready: TRUE } : { event: opts.show };
|
376 |
+
}
|
377 |
|
378 |
+
if('hide' in opts && invalidOpt(opts.hide)) {
|
379 |
+
opts.hide = opts.hide.jquery ? { target: opts.hide } : { event: opts.hide };
|
380 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
381 |
|
382 |
+
if('style' in opts && invalidOpt(opts.style)) {
|
383 |
+
opts.style = { classes: opts.style };
|
384 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
385 |
|
386 |
+
// Sanitize plugin options
|
387 |
+
$.each(PLUGINS, function() {
|
388 |
+
this.sanitize && this.sanitize(opts);
|
389 |
+
});
|
390 |
|
391 |
+
return opts;
|
392 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
393 |
|
394 |
+
// Setup builtin .set() option checks
|
395 |
+
CHECKS = PROTOTYPE.checks = {
|
396 |
+
builtin: {
|
397 |
+
// Core checks
|
398 |
+
'^id$': function(obj, o, v, prev) {
|
399 |
+
var id = v === TRUE ? QTIP.nextid : v,
|
400 |
+
new_id = NAMESPACE + '-' + id;
|
401 |
+
|
402 |
+
if(id !== FALSE && id.length > 0 && !$('#'+new_id).length) {
|
403 |
+
this._id = new_id;
|
404 |
+
|
405 |
+
if(this.rendered) {
|
406 |
+
this.tooltip[0].id = this._id;
|
407 |
+
this.elements.content[0].id = this._id + '-content';
|
408 |
+
this.elements.title[0].id = this._id + '-title';
|
409 |
+
}
|
410 |
+
}
|
411 |
+
else { obj[o] = prev; }
|
412 |
+
},
|
413 |
+
'^prerender': function(obj, o, v) {
|
414 |
+
v && !this.rendered && this.render(this.options.show.ready);
|
415 |
+
},
|
416 |
+
|
417 |
+
// Content checks
|
418 |
+
'^content.text$': function(obj, o, v) {
|
419 |
+
this._updateContent(v);
|
420 |
+
},
|
421 |
+
'^content.attr$': function(obj, o, v, prev) {
|
422 |
+
if(this.options.content.text === this.target.attr(prev)) {
|
423 |
+
this._updateContent( this.target.attr(v) );
|
424 |
+
}
|
425 |
+
},
|
426 |
+
'^content.title$': function(obj, o, v) {
|
427 |
+
// Remove title if content is null
|
428 |
+
if(!v) { return this._removeTitle(); }
|
429 |
+
|
430 |
+
// If title isn't already created, create it now and update
|
431 |
+
v && !this.elements.title && this._createTitle();
|
432 |
+
this._updateTitle(v);
|
433 |
+
},
|
434 |
+
'^content.button$': function(obj, o, v) {
|
435 |
+
this._updateButton(v);
|
436 |
+
},
|
437 |
+
'^content.title.(text|button)$': function(obj, o, v) {
|
438 |
+
this.set('content.'+o, v); // Backwards title.text/button compat
|
439 |
+
},
|
440 |
+
|
441 |
+
// Position checks
|
442 |
+
'^position.(my|at)$': function(obj, o, v){
|
443 |
+
'string' === typeof v && (this.position[o] = obj[o] = new CORNER(v, o === 'at'));
|
444 |
+
},
|
445 |
+
'^position.container$': function(obj, o, v){
|
446 |
+
this.rendered && this.tooltip.appendTo(v);
|
447 |
+
},
|
448 |
+
|
449 |
+
// Show checks
|
450 |
+
'^show.ready$': function(obj, o, v) {
|
451 |
+
v && (!this.rendered && this.render(TRUE) || this.toggle(TRUE));
|
452 |
+
},
|
453 |
+
|
454 |
+
// Style checks
|
455 |
+
'^style.classes$': function(obj, o, v, p) {
|
456 |
+
this.rendered && this.tooltip.removeClass(p).addClass(v);
|
457 |
+
},
|
458 |
+
'^style.(width|height)': function(obj, o, v) {
|
459 |
+
this.rendered && this.tooltip.css(o, v);
|
460 |
+
},
|
461 |
+
'^style.widget|content.title': function() {
|
462 |
+
this.rendered && this._setWidget();
|
463 |
+
},
|
464 |
+
'^style.def': function(obj, o, v) {
|
465 |
+
this.rendered && this.tooltip.toggleClass(CLASS_DEFAULT, !!v);
|
466 |
+
},
|
467 |
+
|
468 |
+
// Events check
|
469 |
+
'^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) {
|
470 |
+
this.rendered && this.tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v);
|
471 |
+
},
|
472 |
+
|
473 |
+
// Properties which require event reassignment
|
474 |
+
'^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() {
|
475 |
+
if(!this.rendered) { return; }
|
476 |
+
|
477 |
+
// Set tracking flag
|
478 |
+
var posOptions = this.options.position;
|
479 |
+
this.tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse);
|
480 |
+
|
481 |
+
// Reassign events
|
482 |
+
this._unassignEvents();
|
483 |
+
this._assignEvents();
|
484 |
+
}
|
485 |
+
}
|
486 |
+
};
|
487 |
|
488 |
+
// Dot notation converter
|
489 |
+
function convertNotation(options, notation) {
|
490 |
+
var i = 0, obj, option = options,
|
|
|
491 |
|
492 |
+
// Split notation into array
|
493 |
+
levels = notation.split('.');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
494 |
|
495 |
+
// Loop through
|
496 |
+
while( option = option[ levels[i++] ] ) {
|
497 |
+
if(i < levels.length) { obj = option; }
|
498 |
+
}
|
499 |
|
500 |
+
return [obj || options, levels.pop()];
|
501 |
+
}
|
|
|
|
|
|
|
502 |
|
503 |
+
PROTOTYPE.get = function(notation) {
|
504 |
+
if(this.destroyed) { return this; }
|
|
|
505 |
|
506 |
+
var o = convertNotation(this.options, notation.toLowerCase()),
|
507 |
+
result = o[0][ o[1] ];
|
|
|
|
|
|
|
|
|
508 |
|
509 |
+
return result.precedance ? result.string() : result;
|
510 |
+
};
|
|
|
511 |
|
512 |
+
function setCallback(notation, args) {
|
513 |
+
var category, rule, match;
|
514 |
|
515 |
+
for(category in this.checks) {
|
516 |
+
for(rule in this.checks[category]) {
|
517 |
+
if(match = (new RegExp(rule, 'i')).exec(notation)) {
|
518 |
+
args.push(match);
|
519 |
+
|
520 |
+
if(category === 'builtin' || this.plugins[category]) {
|
521 |
+
this.checks[category][rule].apply(
|
522 |
+
this.plugins[category] || this, args
|
523 |
+
);
|
524 |
}
|
525 |
}
|
|
|
|
|
526 |
}
|
527 |
+
}
|
528 |
+
}
|
529 |
|
530 |
+
var rmove = /^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,
|
531 |
+
rrender = /^prerender|show\.ready/i;
|
|
|
|
|
|
|
|
|
|
|
532 |
|
533 |
+
PROTOTYPE.set = function(option, value) {
|
534 |
+
if(this.destroyed) { return this; }
|
535 |
|
536 |
+
var rendered = this.rendered,
|
537 |
+
reposition = FALSE,
|
538 |
+
options = this.options,
|
539 |
+
checks = this.checks,
|
540 |
+
name;
|
541 |
|
542 |
+
// Convert singular option/value pair into object form
|
543 |
+
if('string' === typeof option) {
|
544 |
+
name = option; option = {}; option[name] = value;
|
545 |
+
}
|
546 |
+
else { option = $.extend({}, option); }
|
547 |
|
548 |
+
// Set all of the defined options to their new values
|
549 |
+
$.each(option, function(notation, value) {
|
550 |
+
if(rendered && rrender.test(notation)) {
|
551 |
+
delete option[notation]; return;
|
|
|
|
|
|
|
|
|
552 |
}
|
553 |
|
554 |
+
// Set new obj value
|
555 |
+
var obj = convertNotation(options, notation.toLowerCase()), previous;
|
556 |
+
previous = obj[0][ obj[1] ];
|
557 |
+
obj[0][ obj[1] ] = value && value.nodeType ? $(value) : value;
|
558 |
|
559 |
+
// Also check if we need to reposition
|
560 |
+
reposition = rmove.test(notation) || reposition;
|
|
|
|
|
561 |
|
562 |
+
// Set the new params for the callback
|
563 |
+
option[notation] = [obj[0], obj[1], value, previous];
|
564 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
565 |
|
566 |
+
// Re-sanitize options
|
567 |
+
sanitizeOptions(options);
|
|
|
|
|
|
|
|
|
|
|
568 |
|
569 |
+
/*
|
570 |
+
* Execute any valid callbacks for the set options
|
571 |
+
* Also set positioning flag so we don't get loads of redundant repositioning calls.
|
572 |
+
*/
|
573 |
+
this.positioning = TRUE;
|
574 |
+
$.each(option, $.proxy(setCallback, this));
|
575 |
+
this.positioning = FALSE;
|
576 |
|
577 |
+
// Update position if needed
|
578 |
+
if(this.rendered && this.tooltip[0].offsetWidth > 0 && reposition) {
|
579 |
+
this.reposition( options.position.target === 'mouse' ? NULL : this.cache.event );
|
580 |
+
}
|
581 |
|
582 |
+
return this;
|
583 |
+
};
|
584 |
+
;PROTOTYPE._update = function(content, element, reposition) {
|
585 |
+
var self = this,
|
586 |
+
cache = this.cache;
|
587 |
|
588 |
+
// Make sure tooltip is rendered and content is defined. If not return
|
589 |
+
if(!this.rendered || !content) { return FALSE; }
|
590 |
|
591 |
+
// Use function to parse content
|
592 |
+
if($.isFunction(content)) {
|
593 |
+
content = content.call(this.elements.target, cache.event, this) || '';
|
594 |
+
}
|
|
|
|
|
|
|
595 |
|
596 |
+
// Handle deferred content
|
597 |
+
if($.isFunction(content.then)) {
|
598 |
+
cache.waiting = TRUE;
|
599 |
+
return content.then(function(c) {
|
600 |
+
cache.waiting = FALSE;
|
601 |
+
return self._update(c, element);
|
602 |
+
}, NULL, function(e) {
|
603 |
+
return self._update(e, element);
|
604 |
+
});
|
605 |
+
}
|
606 |
|
607 |
+
// If content is null... return false
|
608 |
+
if(content === FALSE || (!content && content !== '')) { return FALSE; }
|
609 |
|
610 |
+
// Append new content if its a DOM array and show it if hidden
|
611 |
+
if(content.jquery && content.length > 0) {
|
612 |
+
element.empty().append(
|
613 |
+
content.css({ display: 'block', visibility: 'visible' })
|
614 |
+
);
|
615 |
+
}
|
616 |
|
617 |
+
// Content is a regular string, insert the new content
|
618 |
+
else { element.html(content); }
|
|
|
|
|
619 |
|
620 |
+
// Wait for content to be loaded, and reposition
|
621 |
+
return this._waitForContent(element).then(function(images) {
|
622 |
+
if(self.rendered && self.tooltip[0].offsetWidth > 0) {
|
623 |
+
self.reposition(cache.event, !images.length);
|
624 |
+
}
|
625 |
+
});
|
626 |
+
};
|
627 |
|
628 |
+
PROTOTYPE._waitForContent = function(element) {
|
629 |
+
var cache = this.cache;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
630 |
|
631 |
+
// Set flag
|
632 |
+
cache.waiting = TRUE;
|
|
|
|
|
633 |
|
634 |
+
// If imagesLoaded is included, ensure images have loaded and return promise
|
635 |
+
return ( $.fn.imagesLoaded ? element.imagesLoaded() : $.Deferred().resolve([]) )
|
636 |
+
.done(function() { cache.waiting = FALSE; })
|
637 |
+
.promise();
|
638 |
+
};
|
|
|
639 |
|
640 |
+
PROTOTYPE._updateContent = function(content, reposition) {
|
641 |
+
this._update(content, this.elements.content, reposition);
|
642 |
+
};
|
|
|
643 |
|
644 |
+
PROTOTYPE._updateTitle = function(content, reposition) {
|
645 |
+
if(this._update(content, this.elements.title, reposition) === FALSE) {
|
646 |
+
this._removeTitle(FALSE);
|
647 |
+
}
|
648 |
+
};
|
649 |
+
|
650 |
+
PROTOTYPE._createTitle = function()
|
651 |
+
{
|
652 |
+
var elements = this.elements,
|
653 |
+
id = this._id+'-title';
|
654 |
+
|
655 |
+
// Destroy previous title element, if present
|
656 |
+
if(elements.titlebar) { this._removeTitle(); }
|
657 |
+
|
658 |
+
// Create title bar and title elements
|
659 |
+
elements.titlebar = $('<div />', {
|
660 |
+
'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass('header') : '')
|
661 |
+
})
|
662 |
+
.append(
|
663 |
+
elements.title = $('<div />', {
|
664 |
+
'id': id,
|
665 |
+
'class': NAMESPACE + '-title',
|
666 |
+
'aria-atomic': TRUE
|
667 |
+
})
|
668 |
+
)
|
669 |
+
.insertBefore(elements.content)
|
670 |
+
|
671 |
+
// Button-specific events
|
672 |
+
.delegate('.qtip-close', 'mousedown keydown mouseup keyup mouseout', function(event) {
|
673 |
+
$(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down');
|
674 |
+
})
|
675 |
+
.delegate('.qtip-close', 'mouseover mouseout', function(event){
|
676 |
+
$(this).toggleClass('ui-state-hover', event.type === 'mouseover');
|
677 |
+
});
|
678 |
+
|
679 |
+
// Create button if enabled
|
680 |
+
if(this.options.content.button) { this._createButton(); }
|
681 |
+
};
|
682 |
+
|
683 |
+
PROTOTYPE._removeTitle = function(reposition)
|
684 |
+
{
|
685 |
+
var elements = this.elements;
|
686 |
+
|
687 |
+
if(elements.title) {
|
688 |
+
elements.titlebar.remove();
|
689 |
+
elements.titlebar = elements.title = elements.button = NULL;
|
690 |
+
|
691 |
+
// Reposition if enabled
|
692 |
+
if(reposition !== FALSE) { this.reposition(); }
|
693 |
+
}
|
694 |
+
};
|
695 |
+
;PROTOTYPE._createPosClass = function(my) {
|
696 |
+
return NAMESPACE + '-pos-' + (my || this.options.position.my).abbrev();
|
697 |
+
};
|
698 |
+
|
699 |
+
PROTOTYPE.reposition = function(event, effect) {
|
700 |
+
if(!this.rendered || this.positioning || this.destroyed) { return this; }
|
701 |
+
|
702 |
+
// Set positioning flag
|
703 |
+
this.positioning = TRUE;
|
704 |
+
|
705 |
+
var cache = this.cache,
|
706 |
+
tooltip = this.tooltip,
|
707 |
+
posOptions = this.options.position,
|
708 |
+
target = posOptions.target,
|
709 |
+
my = posOptions.my,
|
710 |
+
at = posOptions.at,
|
711 |
+
viewport = posOptions.viewport,
|
712 |
+
container = posOptions.container,
|
713 |
+
adjust = posOptions.adjust,
|
714 |
+
method = adjust.method.split(' '),
|
715 |
+
tooltipWidth = tooltip.outerWidth(FALSE),
|
716 |
+
tooltipHeight = tooltip.outerHeight(FALSE),
|
717 |
+
targetWidth = 0,
|
718 |
+
targetHeight = 0,
|
719 |
+
type = tooltip.css('position'),
|
720 |
+
position = { left: 0, top: 0 },
|
721 |
+
visible = tooltip[0].offsetWidth > 0,
|
722 |
+
isScroll = event && event.type === 'scroll',
|
723 |
+
win = $(window),
|
724 |
+
doc = container[0].ownerDocument,
|
725 |
+
mouse = this.mouse,
|
726 |
+
pluginCalculations, offset, adjusted, newClass;
|
727 |
+
|
728 |
+
// Check if absolute position was passed
|
729 |
+
if($.isArray(target) && target.length === 2) {
|
730 |
+
// Force left top and set position
|
731 |
+
at = { x: LEFT, y: TOP };
|
732 |
+
position = { left: target[0], top: target[1] };
|
733 |
+
}
|
734 |
+
|
735 |
+
// Check if mouse was the target
|
736 |
+
else if(target === 'mouse') {
|
737 |
+
// Force left top to allow flipping
|
738 |
+
at = { x: LEFT, y: TOP };
|
739 |
|
740 |
+
// Use the mouse origin that caused the show event, if distance hiding is enabled
|
741 |
+
if((!adjust.mouse || this.options.hide.distance) && cache.origin && cache.origin.pageX) {
|
742 |
+
event = cache.origin;
|
743 |
+
}
|
744 |
|
745 |
+
// Use cached event for resize/scroll events
|
746 |
+
else if(!event || (event && (event.type === 'resize' || event.type === 'scroll'))) {
|
747 |
+
event = cache.event;
|
748 |
+
}
|
749 |
|
750 |
+
// Otherwise, use the cached mouse coordinates if available
|
751 |
+
else if(mouse && mouse.pageX) {
|
752 |
+
event = mouse;
|
753 |
+
}
|
|
|
|
|
|
|
|
|
|
|
754 |
|
755 |
+
// Calculate body and container offset and take them into account below
|
756 |
+
if(type !== 'static') { position = container.offset(); }
|
757 |
+
if(doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth)) {
|
758 |
+
offset = $(document.body).offset();
|
759 |
+
}
|
760 |
|
761 |
+
// Use event coordinates for position
|
762 |
+
position = {
|
763 |
+
left: event.pageX - position.left + (offset && offset.left || 0),
|
764 |
+
top: event.pageY - position.top + (offset && offset.top || 0)
|
765 |
};
|
766 |
|
767 |
+
// Scroll events are a pain, some browsers
|
768 |
+
if(adjust.mouse && isScroll && mouse) {
|
769 |
+
position.left -= (mouse.scrollX || 0) - win.scrollLeft();
|
770 |
+
position.top -= (mouse.scrollY || 0) - win.scrollTop();
|
771 |
+
}
|
772 |
+
}
|
773 |
|
774 |
+
// Target wasn't mouse or absolute...
|
775 |
+
else {
|
776 |
+
// Check if event targetting is being used
|
777 |
+
if(target === 'event') {
|
778 |
+
if(event && event.target && event.type !== 'scroll' && event.type !== 'resize') {
|
779 |
+
cache.target = $(event.target);
|
780 |
}
|
781 |
+
else if(!event.target) {
|
782 |
+
cache.target = this.elements.target;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
783 |
}
|
784 |
+
}
|
785 |
+
else if(target !== 'event'){
|
786 |
+
cache.target = $(target.jquery ? target : this.elements.target);
|
787 |
+
}
|
788 |
+
target = cache.target;
|
789 |
|
790 |
+
// Parse the target into a jQuery object and make sure there's an element present
|
791 |
+
target = $(target).eq(0);
|
792 |
+
if(target.length === 0) { return this; }
|
793 |
|
794 |
+
// Check if window or document is the target
|
795 |
+
else if(target[0] === document || target[0] === window) {
|
796 |
+
targetWidth = BROWSER.iOS ? window.innerWidth : target.width();
|
797 |
+
targetHeight = BROWSER.iOS ? window.innerHeight : target.height();
|
798 |
|
799 |
+
if(target[0] === window) {
|
800 |
+
position = {
|
801 |
+
top: (viewport || target).scrollTop(),
|
802 |
+
left: (viewport || target).scrollLeft()
|
803 |
+
};
|
804 |
}
|
805 |
+
}
|
806 |
|
807 |
+
// Check if the target is an <AREA> element
|
808 |
+
else if(PLUGINS.imagemap && target.is('area')) {
|
809 |
+
pluginCalculations = PLUGINS.imagemap(this, target, at, PLUGINS.viewport ? method : FALSE);
|
810 |
+
}
|
|
|
811 |
|
812 |
+
// Check if the target is an SVG element
|
813 |
+
else if(PLUGINS.svg && target && target[0].ownerSVGElement) {
|
814 |
+
pluginCalculations = PLUGINS.svg(this, target, at, PLUGINS.viewport ? method : FALSE);
|
815 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
816 |
|
817 |
+
// Otherwise use regular jQuery methods
|
818 |
+
else {
|
819 |
+
targetWidth = target.outerWidth(FALSE);
|
820 |
+
targetHeight = target.outerHeight(FALSE);
|
821 |
+
position = target.offset();
|
822 |
+
}
|
823 |
|
824 |
+
// Parse returned plugin values into proper variables
|
825 |
+
if(pluginCalculations) {
|
826 |
+
targetWidth = pluginCalculations.width;
|
827 |
+
targetHeight = pluginCalculations.height;
|
828 |
+
offset = pluginCalculations.offset;
|
829 |
+
position = pluginCalculations.position;
|
830 |
+
}
|
831 |
|
832 |
+
// Adjust position to take into account offset parents
|
833 |
+
position = this.reposition.offset(target, position, container);
|
|
|
|
|
|
|
|
|
834 |
|
835 |
+
// Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2)
|
836 |
+
if((BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1) ||
|
837 |
+
(BROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33) ||
|
838 |
+
(!BROWSER.iOS && type === 'fixed')
|
839 |
+
){
|
840 |
+
position.left -= win.scrollLeft();
|
841 |
+
position.top -= win.scrollTop();
|
842 |
+
}
|
843 |
|
844 |
+
// Adjust position relative to target
|
845 |
+
if(!pluginCalculations || (pluginCalculations && pluginCalculations.adjustable !== FALSE)) {
|
846 |
+
position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0;
|
847 |
+
position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0;
|
848 |
+
}
|
849 |
+
}
|
|
|
850 |
|
851 |
+
// Adjust position relative to tooltip
|
852 |
+
position.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0);
|
853 |
+
position.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0);
|
|
|
|
|
854 |
|
855 |
+
// Use viewport adjustment plugin if enabled
|
856 |
+
if(PLUGINS.viewport) {
|
857 |
+
adjusted = position.adjusted = PLUGINS.viewport(
|
858 |
+
this, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight
|
859 |
+
);
|
|
|
860 |
|
861 |
+
// Apply offsets supplied by positioning plugin (if used)
|
862 |
+
if(offset && adjusted.left) { position.left += offset.left; }
|
863 |
+
if(offset && adjusted.top) { position.top += offset.top; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
864 |
|
865 |
+
// Apply any new 'my' position
|
866 |
+
if(adjusted.my) { this.position.my = adjusted.my; }
|
867 |
+
}
|
|
|
|
|
868 |
|
869 |
+
// Viewport adjustment is disabled, set values to zero
|
870 |
+
else { position.adjusted = { left: 0, top: 0 }; }
|
|
|
|
|
871 |
|
872 |
+
// Set tooltip position class if it's changed
|
873 |
+
if(cache.posClass !== (newClass = this._createPosClass(this.position.my))) {
|
874 |
+
tooltip.removeClass(cache.posClass).addClass( (cache.posClass = newClass) );
|
875 |
+
}
|
|
|
|
|
|
|
876 |
|
877 |
+
// tooltipmove event
|
878 |
+
if(!this._trigger('move', [position, viewport.elem || viewport], event)) { return this; }
|
879 |
+
delete position.adjusted;
|
|
|
|
|
|
|
880 |
|
881 |
+
// If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly
|
882 |
+
if(effect === FALSE || !visible || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) {
|
883 |
+
tooltip.css(position);
|
884 |
+
}
|
885 |
|
886 |
+
// Use custom function if provided
|
887 |
+
else if($.isFunction(posOptions.effect)) {
|
888 |
+
posOptions.effect.call(tooltip, this, $.extend({}, position));
|
889 |
+
tooltip.queue(function(next) {
|
890 |
+
// Reset attributes to avoid cross-browser rendering bugs
|
891 |
+
$(this).css({ opacity: '', height: '' });
|
892 |
+
if(BROWSER.ie) { this.style.removeAttribute('filter'); }
|
893 |
|
894 |
+
next();
|
895 |
+
});
|
896 |
+
}
|
|
|
|
|
|
|
|
|
897 |
|
898 |
+
// Set positioning flag
|
899 |
+
this.positioning = FALSE;
|
900 |
|
901 |
+
return this;
|
902 |
+
};
|
|
|
|
|
|
|
|
|
|
|
|
|
903 |
|
904 |
+
// Custom (more correct for qTip!) offset calculator
|
905 |
+
PROTOTYPE.reposition.offset = function(elem, pos, container) {
|
906 |
+
if(!container[0]) { return pos; }
|
|
|
|
|
|
|
907 |
|
908 |
+
var ownerDocument = $(elem[0].ownerDocument),
|
909 |
+
quirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat',
|
910 |
+
parent = container[0],
|
911 |
+
scrolled, position, parentOffset, overflow;
|
912 |
|
913 |
+
function scroll(e, i) {
|
914 |
+
pos.left += i * e.scrollLeft();
|
915 |
+
pos.top += i * e.scrollTop();
|
916 |
+
}
|
|
|
917 |
|
918 |
+
// Compensate for non-static containers offset
|
919 |
+
do {
|
920 |
+
if((position = $.css(parent, 'position')) !== 'static') {
|
921 |
+
if(position === 'fixed') {
|
922 |
+
parentOffset = parent.getBoundingClientRect();
|
923 |
+
scroll(ownerDocument, -1);
|
|
|
924 |
}
|
|
|
|
|
925 |
else {
|
926 |
+
parentOffset = $(parent).position();
|
927 |
+
parentOffset.left += (parseFloat($.css(parent, 'borderLeftWidth')) || 0);
|
928 |
+
parentOffset.top += (parseFloat($.css(parent, 'borderTopWidth')) || 0);
|
|
|
|
|
|
|
929 |
}
|
|
|
930 |
|
931 |
+
pos.left -= parentOffset.left + (parseFloat($.css(parent, 'marginLeft')) || 0);
|
932 |
+
pos.top -= parentOffset.top + (parseFloat($.css(parent, 'marginTop')) || 0);
|
|
|
|
|
933 |
|
934 |
+
// If this is the first parent element with an overflow of "scroll" or "auto", store it
|
935 |
+
if(!scrolled && (overflow = $.css(parent, 'overflow')) !== 'hidden' && overflow !== 'visible') { scrolled = $(parent); }
|
936 |
+
}
|
937 |
+
}
|
938 |
+
while((parent = parent.offsetParent));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
939 |
|
940 |
+
// Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode)
|
941 |
+
if(scrolled && (scrolled[0] !== ownerDocument[0] || quirks)) {
|
942 |
+
scroll(scrolled, 1);
|
943 |
+
}
|
944 |
|
945 |
+
return pos;
|
946 |
+
};
|
947 |
+
|
948 |
+
// Corner class
|
949 |
+
var C = (CORNER = PROTOTYPE.reposition.Corner = function(corner, forceY) {
|
950 |
+
corner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, CENTER).toLowerCase();
|
951 |
+
this.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase();
|
952 |
+
this.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase();
|
953 |
+
this.forceY = !!forceY;
|
954 |
+
|
955 |
+
var f = corner.charAt(0);
|
956 |
+
this.precedance = (f === 't' || f === 'b' ? Y : X);
|
957 |
+
}).prototype;
|
958 |
+
|
959 |
+
C.invert = function(z, center) {
|
960 |
+
this[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z];
|
961 |
+
};
|
962 |
+
|
963 |
+
C.string = function(join) {
|
964 |
+
var x = this.x, y = this.y;
|
965 |
+
|
966 |
+
var result = x !== y ?
|
967 |
+
(x === 'center' || y !== 'center' && (this.precedance === Y || this.forceY) ?
|
968 |
+
[y,x] : [x,y]
|
969 |
+
) :
|
970 |
+
[x];
|
971 |
+
|
972 |
+
return join !== false ? result.join(' ') : result;
|
973 |
+
};
|
974 |
+
|
975 |
+
C.abbrev = function() {
|
976 |
+
var result = this.string(false);
|
977 |
+
return result[0].charAt(0) + (result[1] && result[1].charAt(0) || '');
|
978 |
+
};
|
979 |
+
|
980 |
+
C.clone = function() {
|
981 |
+
return new CORNER( this.string(), this.forceY );
|
982 |
+
};
|
983 |
+
|
984 |
+
;
|
985 |
+
PROTOTYPE.toggle = function(state, event) {
|
986 |
+
var cache = this.cache,
|
987 |
+
options = this.options,
|
988 |
+
tooltip = this.tooltip;
|
989 |
+
|
990 |
+
// Try to prevent flickering when tooltip overlaps show element
|
991 |
+
if(event) {
|
992 |
+
if((/over|enter/).test(event.type) && cache.event && (/out|leave/).test(cache.event.type) &&
|
993 |
+
options.show.target.add(event.target).length === options.show.target.length &&
|
994 |
+
tooltip.has(event.relatedTarget).length) {
|
995 |
return this;
|
996 |
+
}
|
997 |
|
998 |
+
// Cache event
|
999 |
+
cache.event = $.event.fix(event);
|
1000 |
+
}
|
|
|
|
|
1001 |
|
1002 |
+
// If we're currently waiting and we've just hidden... stop it
|
1003 |
+
this.waiting && !state && (this.hiddenDuringWait = TRUE);
|
|
|
|
|
1004 |
|
1005 |
+
// Render the tooltip if showing and it isn't already
|
1006 |
+
if(!this.rendered) { return state ? this.render(1) : this; }
|
1007 |
+
else if(this.destroyed || this.disabled) { return this; }
|
|
|
1008 |
|
1009 |
+
var type = state ? 'show' : 'hide',
|
1010 |
+
opts = this.options[type],
|
1011 |
+
otherOpts = this.options[ !state ? 'show' : 'hide' ],
|
1012 |
+
posOptions = this.options.position,
|
1013 |
+
contentOptions = this.options.content,
|
1014 |
+
width = this.tooltip.css('width'),
|
1015 |
+
visible = this.tooltip.is(':visible'),
|
1016 |
+
animate = state || opts.target.length === 1,
|
1017 |
+
sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target,
|
1018 |
+
identicalState, allow, showEvent, delay, after;
|
|
|
|
|
1019 |
|
1020 |
+
// Detect state if valid one isn't provided
|
1021 |
+
if((typeof state).search('boolean|number')) { state = !visible; }
|
1022 |
|
1023 |
+
// Check if the tooltip is in an identical state to the new would-be state
|
1024 |
+
identicalState = !tooltip.is(':animated') && visible === state && sameTarget;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1025 |
|
1026 |
+
// Fire tooltip(show/hide) event and check if destroyed
|
1027 |
+
allow = !identicalState ? !!this._trigger(type, [90]) : NULL;
|
|
|
|
|
1028 |
|
1029 |
+
// Check to make sure the tooltip wasn't destroyed in the callback
|
1030 |
+
if(this.destroyed) { return this; }
|
1031 |
|
1032 |
+
// If the user didn't stop the method prematurely and we're showing the tooltip, focus it
|
1033 |
+
if(allow !== FALSE && state) { this.focus(event); }
|
|
|
|
|
|
|
|
|
1034 |
|
1035 |
+
// If the state hasn't changed or the user stopped it, return early
|
1036 |
+
if(!allow || identicalState) { return this; }
|
|
|
1037 |
|
1038 |
+
// Set ARIA hidden attribute
|
1039 |
+
$.attr(tooltip[0], 'aria-hidden', !!!state);
|
|
|
1040 |
|
1041 |
+
// Execute state specific properties
|
1042 |
+
if(state) {
|
1043 |
+
// Store show origin coordinates
|
1044 |
+
this.mouse && (cache.origin = $.event.fix(this.mouse));
|
1045 |
|
1046 |
+
// Update tooltip content & title if it's a dynamic function
|
1047 |
+
if($.isFunction(contentOptions.text)) { this._updateContent(contentOptions.text, FALSE); }
|
1048 |
+
if($.isFunction(contentOptions.title)) { this._updateTitle(contentOptions.title, FALSE); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1049 |
|
1050 |
+
// Cache mousemove events for positioning purposes (if not already tracking)
|
1051 |
+
if(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) {
|
1052 |
+
$(document).bind('mousemove.'+NAMESPACE, this._storeMouse);
|
1053 |
+
trackingBound = TRUE;
|
1054 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1055 |
|
1056 |
+
// Update the tooltip position (set width first to prevent viewport/max-width issues)
|
1057 |
+
if(!width) { tooltip.css('width', tooltip.outerWidth(FALSE)); }
|
1058 |
+
this.reposition(event, arguments[2]);
|
1059 |
+
if(!width) { tooltip.css('width', ''); }
|
1060 |
|
1061 |
+
// Hide other tooltips if tooltip is solo
|
1062 |
+
if(!!opts.solo) {
|
1063 |
+
(typeof opts.solo === 'string' ? $(opts.solo) : $(SELECTOR, opts.solo))
|
1064 |
+
.not(tooltip).not(opts.target).qtip('hide', $.Event('tooltipsolo'));
|
1065 |
+
}
|
1066 |
+
}
|
1067 |
+
else {
|
1068 |
+
// Clear show timer if we're hiding
|
1069 |
+
clearTimeout(this.timers.show);
|
1070 |
|
1071 |
+
// Remove cached origin on hide
|
1072 |
+
delete cache.origin;
|
|
|
|
|
1073 |
|
1074 |
+
// Remove mouse tracking event if not needed (all tracking qTips are hidden)
|
1075 |
+
if(trackingBound && !$(SELECTOR+'[tracking="true"]:visible', opts.solo).not(tooltip).length) {
|
1076 |
+
$(document).unbind('mousemove.'+NAMESPACE);
|
1077 |
+
trackingBound = FALSE;
|
1078 |
+
}
|
|
|
|
|
1079 |
|
1080 |
+
// Blur the tooltip
|
1081 |
+
this.blur(event);
|
1082 |
+
}
|
|
|
|
|
1083 |
|
1084 |
+
// Define post-animation, state specific properties
|
1085 |
+
after = $.proxy(function() {
|
1086 |
+
if(state) {
|
1087 |
+
// Prevent antialias from disappearing in IE by removing filter
|
1088 |
+
if(BROWSER.ie) { tooltip[0].style.removeAttribute('filter'); }
|
|
|
|
|
|
|
1089 |
|
1090 |
+
// Remove overflow setting to prevent tip bugs
|
1091 |
+
tooltip.css('overflow', '');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1092 |
|
1093 |
+
// Autofocus elements if enabled
|
1094 |
+
if('string' === typeof opts.autofocus) {
|
1095 |
+
$(this.options.show.autofocus, tooltip).focus();
|
1096 |
}
|
1097 |
|
1098 |
+
// If set, hide tooltip when inactive for delay period
|
1099 |
+
this.options.show.target.trigger('qtip-'+this.id+'-inactive');
|
1100 |
+
}
|
1101 |
+
else {
|
1102 |
+
// Reset CSS states
|
1103 |
+
tooltip.css({
|
1104 |
+
display: '',
|
1105 |
+
visibility: '',
|
1106 |
+
opacity: '',
|
1107 |
+
left: '',
|
1108 |
+
top: ''
|
1109 |
+
});
|
1110 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1111 |
|
1112 |
+
// tooltipvisible/tooltiphidden events
|
1113 |
+
this._trigger(state ? 'visible' : 'hidden');
|
1114 |
+
}, this);
|
|
|
1115 |
|
1116 |
+
// If no effect type is supplied, use a simple toggle
|
1117 |
+
if(opts.effect === FALSE || animate === FALSE) {
|
1118 |
+
tooltip[ type ]();
|
1119 |
+
after();
|
1120 |
+
}
|
1121 |
|
1122 |
+
// Use custom function if provided
|
1123 |
+
else if($.isFunction(opts.effect)) {
|
1124 |
+
tooltip.stop(1, 1);
|
1125 |
+
opts.effect.call(tooltip, this);
|
1126 |
+
tooltip.queue('fx', function(n) {
|
1127 |
+
after(); n();
|
1128 |
+
});
|
1129 |
+
}
|
|
|
|
|
|
|
1130 |
|
1131 |
+
// Use basic fade function by default
|
1132 |
+
else { tooltip.fadeTo(90, state ? 1 : 0, after); }
|
|
|
|
|
1133 |
|
1134 |
+
// If inactive hide method is set, active it
|
1135 |
+
if(state) { opts.target.trigger('qtip-'+this.id+'-inactive'); }
|
|
|
|
|
1136 |
|
1137 |
+
return this;
|
1138 |
+
};
|
1139 |
|
1140 |
+
PROTOTYPE.show = function(event) { return this.toggle(TRUE, event); };
|
|
|
|
|
1141 |
|
1142 |
+
PROTOTYPE.hide = function(event) { return this.toggle(FALSE, event); };
|
1143 |
+
;PROTOTYPE.focus = function(event) {
|
1144 |
+
if(!this.rendered || this.destroyed) { return this; }
|
1145 |
|
1146 |
+
var qtips = $(SELECTOR),
|
1147 |
+
tooltip = this.tooltip,
|
1148 |
+
curIndex = parseInt(tooltip[0].style.zIndex, 10),
|
1149 |
+
newIndex = QTIP.zindex + qtips.length,
|
1150 |
+
focusedElem;
|
1151 |
|
1152 |
+
// Only update the z-index if it has changed and tooltip is not already focused
|
1153 |
+
if(!tooltip.hasClass(CLASS_FOCUS)) {
|
1154 |
+
// tooltipfocus event
|
1155 |
+
if(this._trigger('focus', [newIndex], event)) {
|
1156 |
+
// Only update z-index's if they've changed
|
1157 |
+
if(curIndex !== newIndex) {
|
1158 |
+
// Reduce our z-index's and keep them properly ordered
|
1159 |
+
qtips.each(function() {
|
1160 |
+
if(this.style.zIndex > curIndex) {
|
1161 |
+
this.style.zIndex = this.style.zIndex - 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1162 |
}
|
1163 |
+
});
|
1164 |
|
1165 |
+
// Fire blur event for focused tooltip
|
1166 |
+
qtips.filter('.' + CLASS_FOCUS).qtip('blur', event);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1167 |
}
|
1168 |
|
1169 |
+
// Set the new z-index
|
1170 |
+
tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex;
|
1171 |
+
}
|
1172 |
+
}
|
|
|
|
|
|
|
|
|
1173 |
|
1174 |
+
return this;
|
1175 |
+
};
|
|
|
|
|
|
|
1176 |
|
1177 |
+
PROTOTYPE.blur = function(event) {
|
1178 |
+
if(!this.rendered || this.destroyed) { return this; }
|
|
|
|
|
1179 |
|
1180 |
+
// Set focused status to FALSE
|
1181 |
+
this.tooltip.removeClass(CLASS_FOCUS);
|
|
|
|
|
1182 |
|
1183 |
+
// tooltipblur event
|
1184 |
+
this._trigger('blur', [ this.tooltip.css('zIndex') ], event);
|
|
|
|
|
1185 |
|
1186 |
+
return this;
|
1187 |
+
};
|
1188 |
+
;PROTOTYPE.disable = function(state) {
|
1189 |
+
if(this.destroyed) { return this; }
|
1190 |
|
1191 |
+
// If 'toggle' is passed, toggle the current state
|
1192 |
+
if(state === 'toggle') {
|
1193 |
+
state = !(this.rendered ? this.tooltip.hasClass(CLASS_DISABLED) : this.disabled);
|
1194 |
+
}
|
1195 |
|
1196 |
+
// Disable if no state passed
|
1197 |
+
else if('boolean' !== typeof state) {
|
1198 |
+
state = TRUE;
|
1199 |
+
}
|
1200 |
|
1201 |
+
if(this.rendered) {
|
1202 |
+
this.tooltip.toggleClass(CLASS_DISABLED, state)
|
1203 |
+
.attr('aria-disabled', state);
|
1204 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1205 |
|
1206 |
+
this.disabled = !!state;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1207 |
|
1208 |
+
return this;
|
1209 |
+
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1210 |
|
1211 |
+
PROTOTYPE.enable = function() { return this.disable(FALSE); };
|
1212 |
+
;PROTOTYPE._createButton = function()
|
1213 |
+
{
|
1214 |
+
var self = this,
|
1215 |
+
elements = this.elements,
|
1216 |
+
tooltip = elements.tooltip,
|
1217 |
+
button = this.options.content.button,
|
1218 |
+
isString = typeof button === 'string',
|
1219 |
+
close = isString ? button : 'Close tooltip';
|
1220 |
|
1221 |
+
if(elements.button) { elements.button.remove(); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1222 |
|
1223 |
+
// Use custom button if one was supplied by user, else use default
|
1224 |
+
if(button.jquery) {
|
1225 |
+
elements.button = button;
|
1226 |
+
}
|
1227 |
+
else {
|
1228 |
+
elements.button = $('<a />', {
|
1229 |
+
'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE+'-icon'),
|
1230 |
+
'title': close,
|
1231 |
+
'aria-label': close
|
1232 |
+
})
|
1233 |
+
.prepend(
|
1234 |
+
$('<span />', {
|
1235 |
+
'class': 'ui-icon ui-icon-close',
|
1236 |
+
'html': '×'
|
1237 |
+
})
|
1238 |
+
);
|
1239 |
+
}
|
1240 |
|
1241 |
+
// Create button and setup attributes
|
1242 |
+
elements.button.appendTo(elements.titlebar || tooltip)
|
1243 |
+
.attr('role', 'button')
|
1244 |
+
.click(function(event) {
|
1245 |
+
if(!tooltip.hasClass(CLASS_DISABLED)) { self.hide(event); }
|
1246 |
+
return FALSE;
|
1247 |
+
});
|
1248 |
+
};
|
1249 |
+
|
1250 |
+
PROTOTYPE._updateButton = function(button)
|
1251 |
+
{
|
1252 |
+
// Make sure tooltip is rendered and if not, return
|
1253 |
+
if(!this.rendered) { return FALSE; }
|
1254 |
+
|
1255 |
+
var elem = this.elements.button;
|
1256 |
+
if(button) { this._createButton(); }
|
1257 |
+
else { elem.remove(); }
|
1258 |
+
};
|
1259 |
+
;// Widget class creator
|
1260 |
+
function createWidgetClass(cls) {
|
1261 |
+
return WIDGET.concat('').join(cls ? '-'+cls+' ' : ' ');
|
1262 |
+
}
|
1263 |
|
1264 |
+
// Widget class setter method
|
1265 |
+
PROTOTYPE._setWidget = function()
|
1266 |
+
{
|
1267 |
+
var on = this.options.style.widget,
|
1268 |
+
elements = this.elements,
|
1269 |
+
tooltip = elements.tooltip,
|
1270 |
+
disabled = tooltip.hasClass(CLASS_DISABLED);
|
1271 |
|
1272 |
+
tooltip.removeClass(CLASS_DISABLED);
|
1273 |
+
CLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled';
|
1274 |
+
tooltip.toggleClass(CLASS_DISABLED, disabled);
|
1275 |
|
1276 |
+
tooltip.toggleClass('ui-helper-reset '+createWidgetClass(), on).toggleClass(CLASS_DEFAULT, this.options.style.def && !on);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1277 |
|
1278 |
+
if(elements.content) {
|
1279 |
+
elements.content.toggleClass( createWidgetClass('content'), on);
|
1280 |
+
}
|
1281 |
+
if(elements.titlebar) {
|
1282 |
+
elements.titlebar.toggleClass( createWidgetClass('header'), on);
|
1283 |
+
}
|
1284 |
+
if(elements.button) {
|
1285 |
+
elements.button.toggleClass(NAMESPACE+'-icon', !on);
|
1286 |
+
}
|
1287 |
+
};
|
1288 |
+
;function delay(callback, duration) {
|
1289 |
+
// If tooltip has displayed, start hide timer
|
1290 |
+
if(duration > 0) {
|
1291 |
+
return setTimeout(
|
1292 |
+
$.proxy(callback, this), duration
|
1293 |
+
);
|
1294 |
+
}
|
1295 |
+
else{ callback.call(this); }
|
1296 |
+
}
|
1297 |
|
1298 |
+
function showMethod(event) {
|
1299 |
+
if(this.tooltip.hasClass(CLASS_DISABLED)) { return; }
|
|
|
1300 |
|
1301 |
+
// Clear hide timers
|
1302 |
+
clearTimeout(this.timers.show);
|
1303 |
+
clearTimeout(this.timers.hide);
|
|
|
|
|
|
|
|
|
|
|
|
|
1304 |
|
1305 |
+
// Start show timer
|
1306 |
+
this.timers.show = delay.call(this,
|
1307 |
+
function() { this.toggle(TRUE, event); },
|
1308 |
+
this.options.show.delay
|
1309 |
+
);
|
1310 |
+
}
|
1311 |
|
1312 |
+
function hideMethod(event) {
|
1313 |
+
if(this.tooltip.hasClass(CLASS_DISABLED) || this.destroyed) { return; }
|
1314 |
+
|
1315 |
+
// Check if new target was actually the tooltip element
|
1316 |
+
var relatedTarget = $(event.relatedTarget),
|
1317 |
+
ontoTooltip = relatedTarget.closest(SELECTOR)[0] === this.tooltip[0],
|
1318 |
+
ontoTarget = relatedTarget[0] === this.options.show.target[0];
|
1319 |
+
|
1320 |
+
// Clear timers and stop animation queue
|
1321 |
+
clearTimeout(this.timers.show);
|
1322 |
+
clearTimeout(this.timers.hide);
|
1323 |
+
|
1324 |
+
// Prevent hiding if tooltip is fixed and event target is the tooltip.
|
1325 |
+
// Or if mouse positioning is enabled and cursor momentarily overlaps
|
1326 |
+
if(this !== relatedTarget[0] &&
|
1327 |
+
(this.options.position.target === 'mouse' && ontoTooltip) ||
|
1328 |
+
(this.options.hide.fixed && (
|
1329 |
+
(/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget))
|
1330 |
+
))
|
1331 |
+
{
|
1332 |
+
try {
|
1333 |
+
event.preventDefault();
|
1334 |
+
event.stopImmediatePropagation();
|
1335 |
+
} catch(e) {}
|
1336 |
+
|
1337 |
+
return;
|
1338 |
+
}
|
1339 |
|
1340 |
+
// If tooltip has displayed, start hide timer
|
1341 |
+
this.timers.hide = delay.call(this,
|
1342 |
+
function() { this.toggle(FALSE, event); },
|
1343 |
+
this.options.hide.delay,
|
1344 |
+
this
|
1345 |
+
);
|
1346 |
+
}
|
1347 |
|
1348 |
+
function inactiveMethod(event) {
|
1349 |
+
if(this.tooltip.hasClass(CLASS_DISABLED) || !this.options.hide.inactive) { return; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1350 |
|
1351 |
+
// Clear timer
|
1352 |
+
clearTimeout(this.timers.inactive);
|
|
|
|
|
1353 |
|
1354 |
+
this.timers.inactive = delay.call(this,
|
1355 |
+
function(){ this.hide(event); },
|
1356 |
+
this.options.hide.inactive
|
1357 |
+
);
|
1358 |
+
}
|
1359 |
|
1360 |
+
function repositionMethod(event) {
|
1361 |
+
if(this.rendered && this.tooltip[0].offsetWidth > 0) { this.reposition(event); }
|
1362 |
+
}
|
|
|
|
|
|
|
|
|
|
|
1363 |
|
1364 |
+
// Store mouse coordinates
|
1365 |
+
PROTOTYPE._storeMouse = function(event) {
|
1366 |
+
(this.mouse = $.event.fix(event)).type = 'mousemove';
|
1367 |
+
return this;
|
1368 |
+
};
|
1369 |
+
|
1370 |
+
// Bind events
|
1371 |
+
PROTOTYPE._bind = function(targets, events, method, suffix, context) {
|
1372 |
+
if(!targets || !method || !events.length) { return; }
|
1373 |
+
var ns = '.' + this._id + (suffix ? '-'+suffix : '');
|
1374 |
+
$(targets).bind(
|
1375 |
+
(events.split ? events : events.join(ns + ' ')) + ns,
|
1376 |
+
$.proxy(method, context || this)
|
1377 |
+
);
|
1378 |
+
return this;
|
1379 |
+
};
|
1380 |
+
PROTOTYPE._unbind = function(targets, suffix) {
|
1381 |
+
targets && $(targets).unbind('.' + this._id + (suffix ? '-'+suffix : ''));
|
1382 |
+
return this;
|
1383 |
+
};
|
1384 |
+
|
1385 |
+
// Global delegation helper
|
1386 |
+
function delegate(selector, events, method) {
|
1387 |
+
$(document.body).delegate(selector,
|
1388 |
+
(events.split ? events : events.join('.'+NAMESPACE + ' ')) + '.'+NAMESPACE,
|
1389 |
+
function() {
|
1390 |
+
var api = QTIP.api[ $.attr(this, ATTR_ID) ];
|
1391 |
+
api && !api.disabled && method.apply(api, arguments);
|
1392 |
}
|
1393 |
+
);
|
1394 |
+
}
|
1395 |
+
// Event trigger
|
1396 |
+
PROTOTYPE._trigger = function(type, args, event) {
|
1397 |
+
var callback = $.Event('tooltip'+type);
|
1398 |
+
callback.originalEvent = (event && $.extend({}, event)) || this.cache.event || NULL;
|
1399 |
+
|
1400 |
+
this.triggering = type;
|
1401 |
+
this.tooltip.trigger(callback, [this].concat(args || []));
|
1402 |
+
this.triggering = FALSE;
|
1403 |
+
|
1404 |
+
return !callback.isDefaultPrevented();
|
1405 |
+
};
|
1406 |
+
|
1407 |
+
PROTOTYPE._bindEvents = function(showEvents, hideEvents, showTargets, hideTargets, showMethod, hideMethod) {
|
1408 |
+
// Get tasrgets that lye within both
|
1409 |
+
var similarTargets = showTargets.filter( hideTargets ).add( hideTargets.filter(showTargets) ),
|
1410 |
+
toggleEvents = [];
|
1411 |
+
|
1412 |
+
// If hide and show targets are the same...
|
1413 |
+
if(similarTargets.length) {
|
1414 |
+
|
1415 |
+
// Filter identical show/hide events
|
1416 |
+
$.each(hideEvents, function(i, type) {
|
1417 |
+
var showIndex = $.inArray(type, showEvents);
|
1418 |
+
|
1419 |
+
// Both events are identical, remove from both hide and show events
|
1420 |
+
// and append to toggleEvents
|
1421 |
+
showIndex > -1 && toggleEvents.push( showEvents.splice( showIndex, 1 )[0] );
|
1422 |
+
});
|
1423 |
+
|
1424 |
+
// Toggle events are special case of identical show/hide events, which happen in sequence
|
1425 |
+
if(toggleEvents.length) {
|
1426 |
+
// Bind toggle events to the similar targets
|
1427 |
+
this._bind(similarTargets, toggleEvents, function(event) {
|
1428 |
+
var state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false;
|
1429 |
+
(state ? hideMethod : showMethod).call(this, event);
|
1430 |
+
});
|
1431 |
+
|
1432 |
+
// Remove the similar targets from the regular show/hide bindings
|
1433 |
+
showTargets = showTargets.not(similarTargets);
|
1434 |
+
hideTargets = hideTargets.not(similarTargets);
|
1435 |
}
|
1436 |
+
}
|
1437 |
|
1438 |
+
// Apply show/hide/toggle events
|
1439 |
+
this._bind(showTargets, showEvents, showMethod);
|
1440 |
+
this._bind(hideTargets, hideEvents, hideMethod);
|
1441 |
+
};
|
1442 |
+
|
1443 |
+
PROTOTYPE._assignInitialEvents = function(event) {
|
1444 |
+
var options = this.options,
|
1445 |
+
showTarget = options.show.target,
|
1446 |
+
hideTarget = options.hide.target,
|
1447 |
+
showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [],
|
1448 |
+
hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : [];
|
1449 |
+
|
1450 |
+
// Catch remove/removeqtip events on target element to destroy redundant tooltips
|
1451 |
+
this._bind(this.elements.target, ['remove', 'removeqtip'], function(event) {
|
1452 |
+
this.destroy(true);
|
1453 |
+
}, 'destroy');
|
1454 |
+
|
1455 |
+
/*
|
1456 |
+
* Make sure hoverIntent functions properly by using mouseleave as a hide event if
|
1457 |
+
* mouseenter/mouseout is used for show.event, even if it isn't in the users options.
|
1458 |
+
*/
|
1459 |
+
if(/mouse(over|enter)/i.test(options.show.event) && !/mouse(out|leave)/i.test(options.hide.event)) {
|
1460 |
+
hideEvents.push('mouseleave');
|
1461 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1462 |
|
1463 |
+
/*
|
1464 |
+
* Also make sure initial mouse targetting works correctly by caching mousemove coords
|
1465 |
+
* on show targets before the tooltip has rendered. Also set onTarget when triggered to
|
1466 |
+
* keep mouse tracking working.
|
1467 |
+
*/
|
1468 |
+
this._bind(showTarget, 'mousemove', function(event) {
|
1469 |
+
this._storeMouse(event);
|
1470 |
+
this.cache.onTarget = TRUE;
|
1471 |
+
});
|
1472 |
+
|
1473 |
+
// Define hoverIntent function
|
1474 |
+
function hoverIntent(event) {
|
1475 |
+
// Only continue if tooltip isn't disabled
|
1476 |
+
if(this.disabled || this.destroyed) { return FALSE; }
|
1477 |
+
|
1478 |
+
// Cache the event data
|
1479 |
+
this.cache.event = event && $.event.fix(event);
|
1480 |
+
this.cache.target = event && $(event.target);
|
1481 |
+
|
1482 |
+
// Start the event sequence
|
1483 |
+
clearTimeout(this.timers.show);
|
1484 |
+
this.timers.show = delay.call(this,
|
1485 |
+
function() { this.render(typeof event === 'object' || options.show.ready); },
|
1486 |
+
options.prerender ? 0 : options.show.delay
|
1487 |
);
|
1488 |
+
}
|
1489 |
|
1490 |
+
// Filter and bind events
|
1491 |
+
this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() {
|
1492 |
+
if(!this.timers) { return FALSE; }
|
1493 |
+
clearTimeout(this.timers.show);
|
1494 |
+
});
|
1495 |
+
|
1496 |
+
// Prerendering is enabled, create tooltip now
|
1497 |
+
if(options.show.ready || options.prerender) { hoverIntent.call(this, event); }
|
1498 |
+
};
|
1499 |
+
|
1500 |
+
// Event assignment method
|
1501 |
+
PROTOTYPE._assignEvents = function() {
|
1502 |
+
var self = this,
|
1503 |
+
options = this.options,
|
1504 |
+
posOptions = options.position,
|
1505 |
+
|
1506 |
+
tooltip = this.tooltip,
|
1507 |
+
showTarget = options.show.target,
|
1508 |
+
hideTarget = options.hide.target,
|
1509 |
+
containerTarget = posOptions.container,
|
1510 |
+
viewportTarget = posOptions.viewport,
|
1511 |
+
documentTarget = $(document),
|
1512 |
+
bodyTarget = $(document.body),
|
1513 |
+
windowTarget = $(window),
|
1514 |
+
|
1515 |
+
showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [],
|
1516 |
+
hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : [];
|
1517 |
+
|
1518 |
+
|
1519 |
+
// Assign passed event callbacks
|
1520 |
+
$.each(options.events, function(name, callback) {
|
1521 |
+
self._bind(tooltip, name === 'toggle' ? ['tooltipshow','tooltiphide'] : ['tooltip'+name], callback, null, tooltip);
|
1522 |
+
});
|
1523 |
+
|
1524 |
+
// Hide tooltips when leaving current window/frame (but not select/option elements)
|
1525 |
+
if(/mouse(out|leave)/i.test(options.hide.event) && options.hide.leave === 'window') {
|
1526 |
+
this._bind(documentTarget, ['mouseout', 'blur'], function(event) {
|
1527 |
+
if(!/select|option/.test(event.target.nodeName) && !event.relatedTarget) {
|
1528 |
+
this.hide(event);
|
1529 |
+
}
|
1530 |
+
});
|
1531 |
+
}
|
1532 |
|
1533 |
+
// Enable hide.fixed by adding appropriate class
|
1534 |
+
if(options.hide.fixed) {
|
1535 |
+
hideTarget = hideTarget.add( tooltip.addClass(CLASS_FIXED) );
|
1536 |
+
}
|
1537 |
|
1538 |
+
/*
|
1539 |
+
* Make sure hoverIntent functions properly by using mouseleave to clear show timer if
|
1540 |
+
* mouseenter/mouseout is used for show.event, even if it isn't in the users options.
|
1541 |
+
*/
|
1542 |
+
else if(/mouse(over|enter)/i.test(options.show.event)) {
|
1543 |
+
this._bind(hideTarget, 'mouseleave', function() {
|
1544 |
+
clearTimeout(this.timers.show);
|
1545 |
+
});
|
1546 |
+
}
|
1547 |
|
1548 |
+
// Hide tooltip on document mousedown if unfocus events are enabled
|
1549 |
+
if(('' + options.hide.event).indexOf('unfocus') > -1) {
|
1550 |
+
this._bind(containerTarget.closest('html'), ['mousedown', 'touchstart'], function(event) {
|
1551 |
+
var elem = $(event.target),
|
1552 |
+
enabled = this.rendered && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0,
|
1553 |
+
isAncestor = elem.parents(SELECTOR).filter(this.tooltip[0]).length > 0;
|
1554 |
|
1555 |
+
if(elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor &&
|
1556 |
+
!this.target.has(elem[0]).length && enabled
|
1557 |
+
) {
|
1558 |
+
this.hide(event);
|
|
|
|
|
|
|
1559 |
}
|
1560 |
+
});
|
1561 |
+
}
|
1562 |
|
1563 |
+
// Check if the tooltip hides when inactive
|
1564 |
+
if('number' === typeof options.hide.inactive) {
|
1565 |
+
// Bind inactive method to show target(s) as a custom event
|
1566 |
+
this._bind(showTarget, 'qtip-'+this.id+'-inactive', inactiveMethod, 'inactive');
|
1567 |
|
1568 |
+
// Define events which reset the 'inactive' event handler
|
1569 |
+
this._bind(hideTarget.add(tooltip), QTIP.inactiveEvents, inactiveMethod);
|
1570 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1571 |
|
1572 |
+
// Filter and bind events
|
1573 |
+
this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1574 |
|
1575 |
+
// Mouse movement bindings
|
1576 |
+
this._bind(showTarget.add(tooltip), 'mousemove', function(event) {
|
1577 |
+
// Check if the tooltip hides when mouse is moved a certain distance
|
1578 |
+
if('number' === typeof options.hide.distance) {
|
1579 |
+
var origin = this.cache.origin || {},
|
1580 |
+
limit = this.options.hide.distance,
|
1581 |
+
abs = Math.abs;
|
1582 |
|
1583 |
+
// Check if the movement has gone beyond the limit, and hide it if so
|
1584 |
+
if(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) {
|
1585 |
+
this.hide(event);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1586 |
}
|
1587 |
+
}
|
1588 |
|
1589 |
+
// Cache mousemove coords on show targets
|
1590 |
+
this._storeMouse(event);
|
1591 |
+
});
|
1592 |
+
|
1593 |
+
// Mouse positioning events
|
1594 |
+
if(posOptions.target === 'mouse') {
|
1595 |
+
// If mouse adjustment is on...
|
1596 |
+
if(posOptions.adjust.mouse) {
|
1597 |
+
// Apply a mouseleave event so we don't get problems with overlapping
|
1598 |
+
if(options.hide.event) {
|
1599 |
+
// Track if we're on the target or not
|
1600 |
+
this._bind(showTarget, ['mouseenter', 'mouseleave'], function(event) {
|
1601 |
+
if(!this.cache) {return FALSE; }
|
1602 |
+
this.cache.onTarget = event.type === 'mouseenter';
|
1603 |
+
});
|
1604 |
+
}
|
1605 |
+
|
1606 |
+
// Update tooltip position on mousemove
|
1607 |
+
this._bind(documentTarget, 'mousemove', function(event) {
|
1608 |
+
// Update the tooltip position only if the tooltip is visible and adjustment is enabled
|
1609 |
+
if(this.rendered && this.cache.onTarget && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0) {
|
1610 |
+
this.reposition(event);
|
1611 |
+
}
|
1612 |
+
});
|
1613 |
+
}
|
1614 |
+
}
|
1615 |
|
1616 |
+
// Adjust positions of the tooltip on window resize if enabled
|
1617 |
+
if(posOptions.adjust.resize || viewportTarget.length) {
|
1618 |
+
this._bind( $.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod );
|
1619 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1620 |
|
1621 |
+
// Adjust tooltip position on scroll of the window or viewport element if present
|
1622 |
+
if(posOptions.adjust.scroll) {
|
1623 |
+
this._bind( windowTarget.add(posOptions.container), 'scroll', repositionMethod );
|
1624 |
+
}
|
1625 |
+
};
|
1626 |
+
|
1627 |
+
// Un-assignment method
|
1628 |
+
PROTOTYPE._unassignEvents = function() {
|
1629 |
+
var options = this.options,
|
1630 |
+
showTargets = options.show.target,
|
1631 |
+
hideTargets = options.hide.target,
|
1632 |
+
targets = $.grep([
|
1633 |
+
this.elements.target[0],
|
1634 |
+
this.rendered && this.tooltip[0],
|
1635 |
+
options.position.container[0],
|
1636 |
+
options.position.viewport[0],
|
1637 |
+
options.position.container.closest('html')[0], // unfocus
|
1638 |
+
window,
|
1639 |
+
document
|
1640 |
+
], function(i) {
|
1641 |
+
return typeof i === 'object';
|
1642 |
+
});
|
1643 |
+
|
1644 |
+
// Add show and hide targets if they're valid
|
1645 |
+
if(showTargets && showTargets.toArray) {
|
1646 |
+
targets = targets.concat(showTargets.toArray());
|
1647 |
+
}
|
1648 |
+
if(hideTargets && hideTargets.toArray) {
|
1649 |
+
targets = targets.concat(hideTargets.toArray());
|
1650 |
+
}
|
1651 |
|
1652 |
+
// Unbind the events
|
1653 |
+
this._unbind(targets)
|
1654 |
+
._unbind(targets, 'destroy')
|
1655 |
+
._unbind(targets, 'inactive');
|
1656 |
+
};
|
1657 |
+
|
1658 |
+
// Apply common event handlers using delegate (avoids excessive .bind calls!)
|
1659 |
+
$(function() {
|
1660 |
+
delegate(SELECTOR, ['mouseenter', 'mouseleave'], function(event) {
|
1661 |
+
var state = event.type === 'mouseenter',
|
1662 |
+
tooltip = $(event.currentTarget),
|
1663 |
+
target = $(event.relatedTarget || event.target),
|
1664 |
+
options = this.options;
|
1665 |
+
|
1666 |
+
// On mouseenter...
|
1667 |
+
if(state) {
|
1668 |
+
// Focus the tooltip on mouseenter (z-index stacking)
|
1669 |
+
this.focus(event);
|
1670 |
+
|
1671 |
+
// Clear hide timer on tooltip hover to prevent it from closing
|
1672 |
+
tooltip.hasClass(CLASS_FIXED) && !tooltip.hasClass(CLASS_DISABLED) && clearTimeout(this.timers.hide);
|
1673 |
+
}
|
1674 |
|
1675 |
+
// On mouseleave...
|
1676 |
+
else {
|
1677 |
+
// When mouse tracking is enabled, hide when we leave the tooltip and not onto the show target (if a hide event is set)
|
1678 |
+
if(options.position.target === 'mouse' && options.position.adjust.mouse &&
|
1679 |
+
options.hide.event && options.show.target && !target.closest(options.show.target[0]).length) {
|
1680 |
+
this.hide(event);
|
|
|
|
|
|
|
|
|
1681 |
}
|
1682 |
+
}
|
1683 |
|
1684 |
+
// Add hover class
|
1685 |
+
tooltip.toggleClass(CLASS_HOVER, state);
|
1686 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1687 |
|
1688 |
+
// Define events which reset the 'inactive' event handler
|
1689 |
+
delegate('['+ATTR_ID+']', INACTIVE_EVENTS, inactiveMethod);
|
1690 |
+
});
|
1691 |
+
;// Initialization method
|
1692 |
+
function init(elem, id, opts) {
|
1693 |
+
var obj, posOptions, attr, config, title,
|
1694 |
|
1695 |
+
// Setup element references
|
1696 |
+
docBody = $(document.body),
|
|
|
1697 |
|
1698 |
+
// Use document body instead of document element if needed
|
1699 |
+
newTarget = elem[0] === document ? docBody : elem,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1700 |
|
1701 |
+
// Grab metadata from element if plugin is present
|
1702 |
+
metadata = (elem.metadata) ? elem.metadata(opts.metadata) : NULL,
|
|
|
|
|
1703 |
|
1704 |
+
// If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise
|
1705 |
+
metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1706 |
|
1707 |
+
// Grab data from metadata.name (or data-qtipopts as fallback) using .data() method,
|
1708 |
+
html5 = elem.data(opts.metadata.name || 'qtipopts');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1709 |
|
1710 |
+
// If we don't get an object returned attempt to parse it manualyl without parseJSON
|
1711 |
+
try { html5 = typeof html5 === 'string' ? $.parseJSON(html5) : html5; } catch(e) {}
|
|
|
|
|
|
|
|
|
1712 |
|
1713 |
+
// Merge in and sanitize metadata
|
1714 |
+
config = $.extend(TRUE, {}, QTIP.defaults, opts,
|
1715 |
+
typeof html5 === 'object' ? sanitizeOptions(html5) : NULL,
|
1716 |
+
sanitizeOptions(metadata5 || metadata));
|
|
|
1717 |
|
1718 |
+
// Re-grab our positioning options now we've merged our metadata and set id to passed value
|
1719 |
+
posOptions = config.position;
|
1720 |
+
config.id = id;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1721 |
|
1722 |
+
// Setup missing content if none is detected
|
1723 |
+
if('boolean' === typeof config.content.text) {
|
1724 |
+
attr = elem.attr(config.content.attr);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1725 |
|
1726 |
+
// Grab from supplied attribute if available
|
1727 |
+
if(config.content.attr !== FALSE && attr) { config.content.text = attr; }
|
|
|
1728 |
|
1729 |
+
// No valid content was found, abort render
|
1730 |
+
else { return FALSE; }
|
1731 |
+
}
|
1732 |
|
1733 |
+
// Setup target options
|
1734 |
+
if(!posOptions.container.length) { posOptions.container = docBody; }
|
1735 |
+
if(posOptions.target === FALSE) { posOptions.target = newTarget; }
|
1736 |
+
if(config.show.target === FALSE) { config.show.target = newTarget; }
|
1737 |
+
if(config.show.solo === TRUE) { config.show.solo = posOptions.container.closest('body'); }
|
1738 |
+
if(config.hide.target === FALSE) { config.hide.target = newTarget; }
|
1739 |
+
if(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; }
|
1740 |
+
|
1741 |
+
// Ensure we only use a single container
|
1742 |
+
posOptions.container = posOptions.container.eq(0);
|
1743 |
+
|
1744 |
+
// Convert position corner values into x and y strings
|
1745 |
+
posOptions.at = new CORNER(posOptions.at, TRUE);
|
1746 |
+
posOptions.my = new CORNER(posOptions.my);
|
1747 |
+
|
1748 |
+
// Destroy previous tooltip if overwrite is enabled, or skip element if not
|
1749 |
+
if(elem.data(NAMESPACE)) {
|
1750 |
+
if(config.overwrite) {
|
1751 |
+
elem.qtip('destroy', true);
|
1752 |
+
}
|
1753 |
+
else if(config.overwrite === FALSE) {
|
1754 |
+
return FALSE;
|
1755 |
+
}
|
1756 |
+
}
|
1757 |
|
1758 |
+
// Add has-qtip attribute
|
1759 |
+
elem.attr(ATTR_HAS, id);
|
1760 |
|
1761 |
+
// Remove title attribute and store it if present
|
1762 |
+
if(config.suppress && (title = elem.attr('title'))) {
|
1763 |
+
// Final attr call fixes event delegatiom and IE default tooltip showing problem
|
1764 |
+
elem.removeAttr('title').attr(oldtitle, title).attr('title', '');
|
1765 |
+
}
|
1766 |
|
1767 |
+
// Initialize the tooltip and add API reference
|
1768 |
+
obj = new QTip(elem, config, id, !!attr);
|
1769 |
+
elem.data(NAMESPACE, obj);
|
1770 |
|
1771 |
+
return obj;
|
1772 |
+
}
|
|
|
|
|
|
|
1773 |
|
1774 |
+
// jQuery $.fn extension method
|
1775 |
+
QTIP = $.fn.qtip = function(options, notation, newValue)
|
1776 |
+
{
|
1777 |
+
var command = ('' + options).toLowerCase(), // Parse command
|
1778 |
+
returned = NULL,
|
1779 |
+
args = $.makeArray(arguments).slice(1),
|
1780 |
+
event = args[args.length - 1],
|
1781 |
+
opts = this[0] ? $.data(this[0], NAMESPACE) : NULL;
|
1782 |
+
|
1783 |
+
// Check for API request
|
1784 |
+
if((!arguments.length && opts) || command === 'api') {
|
1785 |
+
return opts;
|
1786 |
+
}
|
1787 |
|
1788 |
+
// Execute API command if present
|
1789 |
+
else if('string' === typeof options) {
|
1790 |
+
this.each(function() {
|
1791 |
+
var api = $.data(this, NAMESPACE);
|
1792 |
+
if(!api) { return TRUE; }
|
1793 |
|
1794 |
+
// Cache the event if possible
|
1795 |
+
if(event && event.timeStamp) { api.cache.event = event; }
|
|
|
1796 |
|
1797 |
+
// Check for specific API commands
|
1798 |
+
if(notation && (command === 'option' || command === 'options')) {
|
1799 |
+
if(newValue !== undefined || $.isPlainObject(notation)) {
|
1800 |
+
api.set(notation, newValue);
|
1801 |
}
|
|
|
|
|
1802 |
else {
|
1803 |
+
returned = api.get(notation);
|
1804 |
return FALSE;
|
1805 |
}
|
1806 |
}
|
1807 |
|
1808 |
+
// Execute API command
|
1809 |
+
else if(api[command]) {
|
1810 |
+
api[command].apply(api, args);
|
|
|
|
|
|
|
1811 |
}
|
1812 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1813 |
|
1814 |
+
return returned !== NULL ? returned : this;
|
1815 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1816 |
|
1817 |
+
// No API commands. validate provided options and setup qTips
|
1818 |
+
else if('object' === typeof options || !arguments.length) {
|
1819 |
+
// Sanitize options first
|
1820 |
+
opts = sanitizeOptions($.extend(TRUE, {}, options));
|
|
|
|
|
|
|
1821 |
|
1822 |
+
return this.each(function(i) {
|
1823 |
+
var api, id;
|
|
|
|
|
1824 |
|
1825 |
+
// Find next available ID, or use custom ID if provided
|
1826 |
+
id = $.isArray(opts.id) ? opts.id[i] : opts.id;
|
1827 |
+
id = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1828 |
|
1829 |
+
// Initialize the qTip and re-grab newly sanitized options
|
1830 |
+
api = init($(this), id, opts);
|
1831 |
+
if(api === FALSE) { return TRUE; }
|
1832 |
+
else { QTIP.api[id] = api; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1833 |
|
1834 |
+
// Initialize plugins
|
1835 |
+
$.each(PLUGINS, function() {
|
1836 |
+
if(this.initialize === 'initialize') { this(api); }
|
1837 |
+
});
|
1838 |
|
1839 |
+
// Assign initial pre-render events
|
1840 |
+
api._assignInitialEvents(event);
|
1841 |
+
});
|
1842 |
+
}
|
1843 |
+
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1844 |
|
1845 |
+
// Expose class
|
1846 |
+
$.qtip = QTip;
|
1847 |
|
1848 |
+
// Populated in render method
|
1849 |
+
QTIP.api = {};
|
1850 |
+
;$.each({
|
1851 |
+
/* Allow other plugins to successfully retrieve the title of an element with a qTip applied */
|
1852 |
+
attr: function(attr, val) {
|
1853 |
+
if(this.length) {
|
1854 |
+
var self = this[0],
|
1855 |
+
title = 'title',
|
1856 |
+
api = $.data(self, 'qtip');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1857 |
|
1858 |
+
if(attr === title && api && 'object' === typeof api && api.options.suppress) {
|
1859 |
+
if(arguments.length < 2) {
|
1860 |
+
return $.attr(self, oldtitle);
|
|
|
|
|
1861 |
}
|
1862 |
|
1863 |
+
// If qTip is rendered and title was originally used as content, update it
|
1864 |
+
if(api && api.options.content.attr === title && api.cache.attr) {
|
1865 |
+
api.set('content.text', val);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1866 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1867 |
|
1868 |
+
// Use the regular attr method to set, then cache the result
|
1869 |
+
return this.attr(oldtitle, val);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1870 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1871 |
}
|
1872 |
|
1873 |
+
return $.fn['attr'+replaceSuffix].apply(this, arguments);
|
1874 |
+
},
|
|
|
|
|
|
|
1875 |
|
1876 |
+
/* Allow clone to correctly retrieve cached title attributes */
|
1877 |
+
clone: function(keepData) {
|
1878 |
+
var titles = $([]), title = 'title',
|
|
|
|
|
|
|
|
|
|
|
|
|
1879 |
|
1880 |
+
// Clone our element using the real clone method
|
1881 |
+
elems = $.fn['clone'+replaceSuffix].apply(this, arguments);
|
|
|
|
|
|
|
|
|
1882 |
|
1883 |
+
// Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false
|
1884 |
+
if(!keepData) {
|
1885 |
+
elems.filter('['+oldtitle+']').attr('title', function() {
|
1886 |
+
return $.attr(this, oldtitle);
|
1887 |
+
})
|
1888 |
+
.removeAttr(oldtitle);
|
1889 |
}
|
1890 |
|
1891 |
+
return elems;
|
1892 |
+
}
|
1893 |
+
}, function(name, func) {
|
1894 |
+
if(!func || $.fn[name+replaceSuffix]) { return TRUE; }
|
1895 |
+
|
1896 |
+
var old = $.fn[name+replaceSuffix] = $.fn[name];
|
1897 |
+
$.fn[name] = function() {
|
1898 |
+
return func.apply(this, arguments) || old.apply(this, arguments);
|
1899 |
+
};
|
1900 |
+
});
|
1901 |
+
|
1902 |
+
/* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar).
|
1903 |
+
* This snippet is taken directly from jQuery UI source code found here:
|
1904 |
+
* http://code.jquery.com/ui/jquery-ui-git.js
|
1905 |
+
*/
|
1906 |
+
if(!$.ui) {
|
1907 |
+
$['cleanData'+replaceSuffix] = $.cleanData;
|
1908 |
+
$.cleanData = function( elems ) {
|
1909 |
+
for(var i = 0, elem; (elem = $( elems[i] )).length; i++) {
|
1910 |
+
if(elem.attr(ATTR_HAS)) {
|
1911 |
+
try { elem.triggerHandler('removeqtip'); }
|
1912 |
+
catch( e ) {}
|
1913 |
+
}
|
1914 |
}
|
1915 |
+
$['cleanData'+replaceSuffix].apply(this, arguments);
|
1916 |
+
};
|
1917 |
+
}
|
1918 |
+
;// qTip version
|
1919 |
+
QTIP.version = '2.2.1';
|
1920 |
+
|
1921 |
+
// Base ID for all qTips
|
1922 |
+
QTIP.nextid = 0;
|
1923 |
+
|
1924 |
+
// Inactive events array
|
1925 |
+
QTIP.inactiveEvents = INACTIVE_EVENTS;
|
1926 |
+
|
1927 |
+
// Base z-index for all qTips
|
1928 |
+
QTIP.zindex = 15000;
|
1929 |
+
|
1930 |
+
// Define configuration defaults
|
1931 |
+
QTIP.defaults = {
|
1932 |
+
prerender: FALSE,
|
1933 |
+
id: FALSE,
|
1934 |
+
overwrite: TRUE,
|
1935 |
+
suppress: TRUE,
|
1936 |
+
content: {
|
1937 |
+
text: TRUE,
|
1938 |
+
attr: 'title',
|
1939 |
+
title: FALSE,
|
1940 |
+
button: FALSE
|
1941 |
+
},
|
1942 |
+
position: {
|
1943 |
+
my: 'top left',
|
1944 |
+
at: 'bottom right',
|
1945 |
+
target: FALSE,
|
1946 |
+
container: FALSE,
|
1947 |
+
viewport: FALSE,
|
1948 |
+
adjust: {
|
1949 |
+
x: 0, y: 0,
|
1950 |
+
mouse: TRUE,
|
1951 |
+
scroll: TRUE,
|
1952 |
+
resize: TRUE,
|
1953 |
+
method: 'flipinvert flipinvert'
|
1954 |
+
},
|
1955 |
+
effect: function(api, pos, viewport) {
|
1956 |
+
$(this).animate(pos, {
|
1957 |
+
duration: 200,
|
1958 |
+
queue: FALSE
|
1959 |
+
});
|
1960 |
}
|
1961 |
+
},
|
1962 |
+
show: {
|
1963 |
+
target: FALSE,
|
1964 |
+
event: 'mouseenter',
|
1965 |
+
effect: TRUE,
|
1966 |
+
delay: 90,
|
1967 |
+
solo: FALSE,
|
1968 |
+
ready: FALSE,
|
1969 |
+
autofocus: FALSE
|
1970 |
+
},
|
1971 |
+
hide: {
|
1972 |
+
target: FALSE,
|
1973 |
+
event: 'mouseleave',
|
1974 |
+
effect: TRUE,
|
1975 |
+
delay: 0,
|
1976 |
+
fixed: FALSE,
|
1977 |
+
inactive: FALSE,
|
1978 |
+
leave: 'window',
|
1979 |
+
distance: FALSE
|
1980 |
+
},
|
1981 |
+
style: {
|
1982 |
+
classes: '',
|
1983 |
+
widget: FALSE,
|
1984 |
+
width: FALSE,
|
1985 |
+
height: FALSE,
|
1986 |
+
def: TRUE
|
1987 |
+
},
|
1988 |
+
events: {
|
1989 |
+
render: NULL,
|
1990 |
+
move: NULL,
|
1991 |
+
show: NULL,
|
1992 |
+
hide: NULL,
|
1993 |
+
toggle: NULL,
|
1994 |
+
visible: NULL,
|
1995 |
+
hidden: NULL,
|
1996 |
+
focus: NULL,
|
1997 |
+
blur: NULL
|
1998 |
+
}
|
1999 |
+
};
|
2000 |
+
;var TIP,
|
2001 |
+
|
2002 |
+
// .bind()/.on() namespace
|
2003 |
+
TIPNS = '.qtip-tip',
|
2004 |
+
|
2005 |
+
// Common CSS strings
|
2006 |
+
MARGIN = 'margin',
|
2007 |
+
BORDER = 'border',
|
2008 |
+
COLOR = 'color',
|
2009 |
+
BG_COLOR = 'background-color',
|
2010 |
+
TRANSPARENT = 'transparent',
|
2011 |
+
IMPORTANT = ' !important',
|
2012 |
+
|
2013 |
+
// Check if the browser supports <canvas/> elements
|
2014 |
+
HASCANVAS = !!document.createElement('canvas').getContext,
|
2015 |
+
|
2016 |
+
// Invalid colour values used in parseColours()
|
2017 |
+
INVALID = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i;
|
2018 |
+
|
2019 |
+
// Camel-case method, taken from jQuery source
|
2020 |
+
// http://code.jquery.com/jquery-1.8.0.js
|
2021 |
+
function camel(s) { return s.charAt(0).toUpperCase() + s.slice(1); }
|
2022 |
+
|
2023 |
+
/*
|
2024 |
+
* Modified from Modernizr's testPropsAll()
|
2025 |
+
* http://modernizr.com/downloads/modernizr-latest.js
|
2026 |
+
*/
|
2027 |
+
var cssProps = {}, cssPrefixes = ["Webkit", "O", "Moz", "ms"];
|
2028 |
+
function vendorCss(elem, prop) {
|
2029 |
+
var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
|
2030 |
+
props = (prop + ' ' + cssPrefixes.join(ucProp + ' ') + ucProp).split(' '),
|
2031 |
+
cur, val, i = 0;
|
2032 |
+
|
2033 |
+
// If the property has already been mapped...
|
2034 |
+
if(cssProps[prop]) { return elem.css(cssProps[prop]); }
|
2035 |
+
|
2036 |
+
while((cur = props[i++])) {
|
2037 |
+
if((val = elem.css(cur)) !== undefined) {
|
2038 |
+
return cssProps[prop] = cur, val;
|
2039 |
}
|
2040 |
+
}
|
2041 |
+
}
|
2042 |
|
2043 |
+
// Parse a given elements CSS property into an int
|
2044 |
+
function intCss(elem, prop) {
|
2045 |
+
return Math.ceil(parseFloat(vendorCss(elem, prop)));
|
2046 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2047 |
|
|
|
|
|
|
|
2048 |
|
2049 |
+
// VML creation (for IE only)
|
2050 |
+
if(!HASCANVAS) {
|
2051 |
+
var createVML = function(tag, props, style) {
|
2052 |
+
return '<qtipvml:'+tag+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(props||'')+
|
2053 |
+
' style="behavior: url(#default#VML); '+(style||'')+ '" />';
|
2054 |
+
};
|
2055 |
+
}
|
|
|
2056 |
|
2057 |
+
// Canvas only definitions
|
2058 |
+
else {
|
2059 |
+
var PIXEL_RATIO = window.devicePixelRatio || 1,
|
2060 |
+
BACKING_STORE_RATIO = (function() {
|
2061 |
+
var context = document.createElement('canvas').getContext('2d');
|
2062 |
+
return context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio ||
|
2063 |
+
context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1;
|
2064 |
+
}()),
|
2065 |
+
SCALE = PIXEL_RATIO / BACKING_STORE_RATIO;
|
2066 |
+
}
|
2067 |
|
|
|
|
|
2068 |
|
2069 |
+
function Tip(qtip, options) {
|
2070 |
+
this._ns = 'tip';
|
2071 |
+
this.options = options;
|
2072 |
+
this.offset = options.offset;
|
2073 |
+
this.size = [ options.width, options.height ];
|
|
|
|
|
|
|
|
|
|
|
|
|
2074 |
|
2075 |
+
// Initialize
|
2076 |
+
this.init( (this.qtip = qtip) );
|
2077 |
+
}
|
2078 |
|
2079 |
+
$.extend(Tip.prototype, {
|
2080 |
+
init: function(qtip) {
|
2081 |
+
var context, tip;
|
2082 |
|
2083 |
+
// Create tip element and prepend to the tooltip
|
2084 |
+
tip = this.element = qtip.elements.tip = $('<div />', { 'class': NAMESPACE+'-tip' }).prependTo(qtip.tooltip);
|
|
|
|
|
|
|
|
|
2085 |
|
2086 |
+
// Create tip drawing element(s)
|
2087 |
+
if(HASCANVAS) {
|
2088 |
+
// save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()!
|
2089 |
+
context = $('<canvas />').appendTo(this.element)[0].getContext('2d');
|
2090 |
|
2091 |
+
// Setup constant parameters
|
2092 |
+
context.lineJoin = 'miter';
|
2093 |
+
context.miterLimit = 100000;
|
2094 |
+
context.save();
|
2095 |
+
}
|
2096 |
+
else {
|
2097 |
+
context = createVML('shape', 'coordorigin="0,0"', 'position:absolute;');
|
2098 |
+
this.element.html(context + context);
|
2099 |
|
2100 |
+
// Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML
|
2101 |
+
qtip._bind( $('*', tip).add(tip), ['click', 'mousedown'], function(event) { event.stopPropagation(); }, this._ns);
|
2102 |
+
}
|
|
|
2103 |
|
2104 |
+
// Bind update events
|
2105 |
+
qtip._bind(qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this);
|
2106 |
+
|
2107 |
+
// Create it
|
2108 |
+
this.create();
|
2109 |
+
},
|
2110 |
+
|
2111 |
+
_swapDimensions: function() {
|
2112 |
+
this.size[0] = this.options.height;
|
2113 |
+
this.size[1] = this.options.width;
|
2114 |
+
},
|
2115 |
+
_resetDimensions: function() {
|
2116 |
+
this.size[0] = this.options.width;
|
2117 |
+
this.size[1] = this.options.height;
|
2118 |
+
},
|
2119 |
+
|
2120 |
+
_useTitle: function(corner) {
|
2121 |
+
var titlebar = this.qtip.elements.titlebar;
|
2122 |
+
return titlebar && (
|
2123 |
+
corner.y === TOP || (corner.y === CENTER && this.element.position().top + (this.size[1] / 2) + this.options.offset < titlebar.outerHeight(TRUE))
|
2124 |
+
);
|
2125 |
+
},
|
|
|
|
|
2126 |
|
2127 |
+
_parseCorner: function(corner) {
|
2128 |
+
var my = this.qtip.options.position.my;
|
2129 |
|
2130 |
+
// Detect corner and mimic properties
|
2131 |
+
if(corner === FALSE || my === FALSE) {
|
2132 |
+
corner = FALSE;
|
2133 |
+
}
|
2134 |
+
else if(corner === TRUE) {
|
2135 |
+
corner = new CORNER( my.string() );
|
2136 |
+
}
|
2137 |
+
else if(!corner.string) {
|
2138 |
+
corner = new CORNER(corner);
|
2139 |
+
corner.fixed = TRUE;
|
2140 |
+
}
|
2141 |
|
2142 |
+
return corner;
|
2143 |
+
},
|
2144 |
+
|
2145 |
+
_parseWidth: function(corner, side, use) {
|
2146 |
+
var elements = this.qtip.elements,
|
2147 |
+
prop = BORDER + camel(side) + 'Width';
|
2148 |
+
|
2149 |
+
return (use ? intCss(use, prop) : (
|
2150 |
+
intCss(elements.content, prop) ||
|
2151 |
+
intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) ||
|
2152 |
+
intCss(elements.tooltip, prop)
|
2153 |
+
)) || 0;
|
2154 |
+
},
|
2155 |
+
|
2156 |
+
_parseRadius: function(corner) {
|
2157 |
+
var elements = this.qtip.elements,
|
2158 |
+
prop = BORDER + camel(corner.y) + camel(corner.x) + 'Radius';
|
2159 |
+
|
2160 |
+
return BROWSER.ie < 9 ? 0 :
|
2161 |
+
intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) ||
|
2162 |
+
intCss(elements.tooltip, prop) || 0;
|
2163 |
+
},
|
2164 |
+
|
2165 |
+
_invalidColour: function(elem, prop, compare) {
|
2166 |
+
var val = elem.css(prop);
|
2167 |
+
return !val || (compare && val === elem.css(compare)) || INVALID.test(val) ? FALSE : val;
|
2168 |
+
},
|
2169 |
+
|
2170 |
+
_parseColours: function(corner) {
|
2171 |
+
var elements = this.qtip.elements,
|
2172 |
+
tip = this.element.css('cssText', ''),
|
2173 |
+
borderSide = BORDER + camel(corner[ corner.precedance ]) + camel(COLOR),
|
2174 |
+
colorElem = this._useTitle(corner) && elements.titlebar || elements.content,
|
2175 |
+
css = this._invalidColour, color = [];
|
2176 |
+
|
2177 |
+
// Attempt to detect the background colour from various elements, left-to-right precedance
|
2178 |
+
color[0] = css(tip, BG_COLOR) || css(colorElem, BG_COLOR) || css(elements.content, BG_COLOR) ||
|
2179 |
+
css(elements.tooltip, BG_COLOR) || tip.css(BG_COLOR);
|
2180 |
+
|
2181 |
+
// Attempt to detect the correct border side colour from various elements, left-to-right precedance
|
2182 |
+
color[1] = css(tip, borderSide, COLOR) || css(colorElem, borderSide, COLOR) ||
|
2183 |
+
css(elements.content, borderSide, COLOR) || css(elements.tooltip, borderSide, COLOR) || elements.tooltip.css(borderSide);
|
2184 |
+
|
2185 |
+
// Reset background and border colours
|
2186 |
+
$('*', tip).add(tip).css('cssText', BG_COLOR+':'+TRANSPARENT+IMPORTANT+';'+BORDER+':0'+IMPORTANT+';');
|
2187 |
+
|
2188 |
+
return color;
|
2189 |
+
},
|
2190 |
+
|
2191 |
+
_calculateSize: function(corner) {
|
2192 |
+
var y = corner.precedance === Y,
|
2193 |
+
width = this.options['width'],
|
2194 |
+
height = this.options['height'],
|
2195 |
+
isCenter = corner.abbrev() === 'c',
|
2196 |
+
base = (y ? width: height) * (isCenter ? 0.5 : 1),
|
2197 |
+
pow = Math.pow,
|
2198 |
+
round = Math.round,
|
2199 |
+
bigHyp, ratio, result,
|
2200 |
+
|
2201 |
+
smallHyp = Math.sqrt( pow(base, 2) + pow(height, 2) ),
|
2202 |
+
hyp = [ (this.border / base) * smallHyp, (this.border / height) * smallHyp ];
|
2203 |
+
|
2204 |
+
hyp[2] = Math.sqrt( pow(hyp[0], 2) - pow(this.border, 2) );
|
2205 |
+
hyp[3] = Math.sqrt( pow(hyp[1], 2) - pow(this.border, 2) );
|
2206 |
+
|
2207 |
+
bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]);
|
2208 |
+
ratio = bigHyp / smallHyp;
|
2209 |
+
|
2210 |
+
result = [ round(ratio * width), round(ratio * height) ];
|
2211 |
+
return y ? result : result.reverse();
|
2212 |
+
},
|
2213 |
+
|
2214 |
+
// Tip coordinates calculator
|
2215 |
+
_calculateTip: function(corner, size, scale) {
|
2216 |
+
scale = scale || 1;
|
2217 |
+
size = size || this.size;
|
2218 |
+
|
2219 |
+
var width = size[0] * scale,
|
2220 |
+
height = size[1] * scale,
|
2221 |
+
width2 = Math.ceil(width / 2), height2 = Math.ceil(height / 2),
|
2222 |
+
|
2223 |
+
// Define tip coordinates in terms of height and width values
|
2224 |
+
tips = {
|
2225 |
+
br: [0,0, width,height, width,0],
|
2226 |
+
bl: [0,0, width,0, 0,height],
|
2227 |
+
tr: [0,height, width,0, width,height],
|
2228 |
+
tl: [0,0, 0,height, width,height],
|
2229 |
+
tc: [0,height, width2,0, width,height],
|
2230 |
+
bc: [0,0, width,0, width2,height],
|
2231 |
+
rc: [0,0, width,height2, 0,height],
|
2232 |
+
lc: [width,0, width,height, 0,height2]
|
2233 |
+
};
|
2234 |
|
2235 |
+
// Set common side shapes
|
2236 |
+
tips.lt = tips.br; tips.rt = tips.bl;
|
2237 |
+
tips.lb = tips.tr; tips.rb = tips.tl;
|
2238 |
+
|
2239 |
+
return tips[ corner.abbrev() ];
|
2240 |
+
},
|
2241 |
+
|
2242 |
+
// Tip coordinates drawer (canvas)
|
2243 |
+
_drawCoords: function(context, coords) {
|
2244 |
+
context.beginPath();
|
2245 |
+
context.moveTo(coords[0], coords[1]);
|
2246 |
+
context.lineTo(coords[2], coords[3]);
|
2247 |
+
context.lineTo(coords[4], coords[5]);
|
2248 |
+
context.closePath();
|
2249 |
+
},
|
2250 |
+
|
2251 |
+
create: function() {
|
2252 |
+
// Determine tip corner
|
2253 |
+
var c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner(this.options.corner);
|
2254 |
+
|
2255 |
+
// If we have a tip corner...
|
2256 |
+
if( (this.enabled = !!this.corner && this.corner.abbrev() !== 'c') ) {
|
2257 |
+
// Cache it
|
2258 |
+
this.qtip.cache.corner = c.clone();
|
2259 |
+
|
2260 |
+
// Create it
|
2261 |
+
this.update();
|
2262 |
+
}
|
2263 |
|
2264 |
+
// Toggle tip element
|
2265 |
+
this.element.toggle(this.enabled);
|
2266 |
|
2267 |
+
return this.corner;
|
2268 |
+
},
|
|
|
2269 |
|
2270 |
+
update: function(corner, position) {
|
2271 |
+
if(!this.enabled) { return this; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2272 |
|
2273 |
+
var elements = this.qtip.elements,
|
2274 |
+
tip = this.element,
|
2275 |
+
inner = tip.children(),
|
2276 |
+
options = this.options,
|
2277 |
+
curSize = this.size,
|
2278 |
+
mimic = options.mimic,
|
2279 |
+
round = Math.round,
|
2280 |
+
color, precedance, context,
|
2281 |
+
coords, bigCoords, translate, newSize, border, BACKING_STORE_RATIO;
|
2282 |
|
2283 |
+
// Re-determine tip if not already set
|
2284 |
+
if(!corner) { corner = this.qtip.cache.corner || this.corner; }
|
|
|
2285 |
|
2286 |
+
// Use corner property if we detect an invalid mimic value
|
2287 |
+
if(mimic === FALSE) { mimic = corner; }
|
|
|
|
|
2288 |
|
2289 |
+
// Otherwise inherit mimic properties from the corner object as necessary
|
2290 |
+
else {
|
2291 |
+
mimic = new CORNER(mimic);
|
2292 |
+
mimic.precedance = corner.precedance;
|
2293 |
|
2294 |
+
if(mimic.x === 'inherit') { mimic.x = corner.x; }
|
2295 |
+
else if(mimic.y === 'inherit') { mimic.y = corner.y; }
|
2296 |
+
else if(mimic.x === mimic.y) {
|
2297 |
+
mimic[ corner.precedance ] = corner[ corner.precedance ];
|
2298 |
+
}
|
2299 |
+
}
|
2300 |
+
precedance = mimic.precedance;
|
2301 |
|
2302 |
+
// Ensure the tip width.height are relative to the tip position
|
2303 |
+
if(corner.precedance === X) { this._swapDimensions(); }
|
2304 |
+
else { this._resetDimensions(); }
|
2305 |
|
2306 |
+
// Update our colours
|
2307 |
+
color = this.color = this._parseColours(corner);
|
|
|
|
|
2308 |
|
2309 |
+
// Detect border width, taking into account colours
|
2310 |
+
if(color[1] !== TRANSPARENT) {
|
2311 |
+
// Grab border width
|
2312 |
+
border = this.border = this._parseWidth(corner, corner[corner.precedance]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2313 |
|
2314 |
+
// If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips)
|
2315 |
+
if(options.border && border < 1 && !INVALID.test(color[1])) { color[0] = color[1]; }
|
|
|
|
|
2316 |
|
2317 |
+
// Set border width (use detected border width if options.border is true)
|
2318 |
+
this.border = border = options.border !== TRUE ? options.border : border;
|
2319 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2320 |
|
2321 |
+
// Border colour was invalid, set border to zero
|
2322 |
+
else { this.border = border = 0; }
|
2323 |
+
|
2324 |
+
// Determine tip size
|
2325 |
+
newSize = this.size = this._calculateSize(corner);
|
2326 |
+
tip.css({
|
2327 |
+
width: newSize[0],
|
2328 |
+
height: newSize[1],
|
2329 |
+
lineHeight: newSize[1]+'px'
|
2330 |
+
});
|
2331 |
+
|
2332 |
+
// Calculate tip translation
|
2333 |
+
if(corner.precedance === Y) {
|
2334 |
+
translate = [
|
2335 |
+
round(mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2),
|
2336 |
+
round(mimic.y === TOP ? newSize[1] - curSize[1] : 0)
|
2337 |
+
];
|
2338 |
+
}
|
2339 |
+
else {
|
2340 |
+
translate = [
|
2341 |
+
round(mimic.x === LEFT ? newSize[0] - curSize[0] : 0),
|
2342 |
+
round(mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2)
|
2343 |
+
];
|
2344 |
+
}
|
2345 |
|
2346 |
+
// Canvas drawing implementation
|
2347 |
+
if(HASCANVAS) {
|
2348 |
+
// Grab canvas context and clear/save it
|
2349 |
+
context = inner[0].getContext('2d');
|
2350 |
+
context.restore(); context.save();
|
2351 |
+
context.clearRect(0,0,6000,6000);
|
2352 |
+
|
2353 |
+
// Calculate coordinates
|
2354 |
+
coords = this._calculateTip(mimic, curSize, SCALE);
|
2355 |
+
bigCoords = this._calculateTip(mimic, this.size, SCALE);
|
2356 |
+
|
2357 |
+
// Set the canvas size using calculated size
|
2358 |
+
inner.attr(WIDTH, newSize[0] * SCALE).attr(HEIGHT, newSize[1] * SCALE);
|
2359 |
+
inner.css(WIDTH, newSize[0]).css(HEIGHT, newSize[1]);
|
2360 |
+
|
2361 |
+
// Draw the outer-stroke tip
|
2362 |
+
this._drawCoords(context, bigCoords);
|
2363 |
+
context.fillStyle = color[1];
|
2364 |
+
context.fill();
|
2365 |
+
|
2366 |
+
// Draw the actual tip
|
2367 |
+
context.translate(translate[0] * SCALE, translate[1] * SCALE);
|
2368 |
+
this._drawCoords(context, coords);
|
2369 |
+
context.fillStyle = color[0];
|
2370 |
+
context.fill();
|
2371 |
+
}
|
2372 |
|
2373 |
+
// VML (IE Proprietary implementation)
|
2374 |
+
else {
|
2375 |
+
// Calculate coordinates
|
2376 |
+
coords = this._calculateTip(mimic);
|
2377 |
+
|
2378 |
+
// Setup coordinates string
|
2379 |
+
coords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] +
|
2380 |
+
',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe';
|
2381 |
+
|
2382 |
+
// Setup VML-specific offset for pixel-perfection
|
2383 |
+
translate[2] = border && /^(r|b)/i.test(corner.string()) ?
|
2384 |
+
BROWSER.ie === 8 ? 2 : 1 : 0;
|
2385 |
+
|
2386 |
+
// Set initial CSS
|
2387 |
+
inner.css({
|
2388 |
+
coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border),
|
2389 |
+
antialias: ''+(mimic.string().indexOf(CENTER) > -1),
|
2390 |
+
left: translate[0] - (translate[2] * Number(precedance === X)),
|
2391 |
+
top: translate[1] - (translate[2] * Number(precedance === Y)),
|
2392 |
+
width: newSize[0] + border,
|
2393 |
+
height: newSize[1] + border
|
2394 |
+
})
|
2395 |
+
.each(function(i) {
|
2396 |
+
var $this = $(this);
|
2397 |
+
|
2398 |
+
// Set shape specific attributes
|
2399 |
+
$this[ $this.prop ? 'prop' : 'attr' ]({
|
2400 |
+
coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border),
|
2401 |
+
path: coords,
|
2402 |
+
fillcolor: color[0],
|
2403 |
+
filled: !!i,
|
2404 |
+
stroked: !i
|
2405 |
+
})
|
2406 |
+
.toggle(!!(border || i));
|
2407 |
+
|
2408 |
+
// Check if border is enabled and add stroke element
|
2409 |
+
!i && $this.html( createVML(
|
2410 |
+
'stroke', 'weight="'+(border*2)+'px" color="'+color[1]+'" miterlimit="1000" joinstyle="miter"'
|
2411 |
+
) );
|
2412 |
+
});
|
2413 |
+
}
|
2414 |
|
2415 |
+
// Opera bug #357 - Incorrect tip position
|
2416 |
+
// https://github.com/Craga89/qTip2/issues/367
|
2417 |
+
window.opera && setTimeout(function() {
|
2418 |
+
elements.tip.css({
|
2419 |
+
display: 'inline-block',
|
2420 |
+
visibility: 'visible'
|
2421 |
+
});
|
2422 |
+
}, 1);
|
2423 |
+
|
2424 |
+
// Position if needed
|
2425 |
+
if(position !== FALSE) { this.calculate(corner, newSize); }
|
2426 |
+
},
|
2427 |
+
|
2428 |
+
calculate: function(corner, size) {
|
2429 |
+
if(!this.enabled) { return FALSE; }
|
2430 |
+
|
2431 |
+
var self = this,
|
2432 |
+
elements = this.qtip.elements,
|
2433 |
+
tip = this.element,
|
2434 |
+
userOffset = this.options.offset,
|
2435 |
+
isWidget = elements.tooltip.hasClass('ui-widget'),
|
2436 |
+
position = { },
|
2437 |
+
precedance, corners;
|
2438 |
+
|
2439 |
+
// Inherit corner if not provided
|
2440 |
+
corner = corner || this.corner;
|
2441 |
+
precedance = corner.precedance;
|
2442 |
+
|
2443 |
+
// Determine which tip dimension to use for adjustment
|
2444 |
+
size = size || this._calculateSize(corner);
|
2445 |
+
|
2446 |
+
// Setup corners and offset array
|
2447 |
+
corners = [ corner.x, corner.y ];
|
2448 |
+
if(precedance === X) { corners.reverse(); }
|
2449 |
+
|
2450 |
+
// Calculate tip position
|
2451 |
+
$.each(corners, function(i, side) {
|
2452 |
+
var b, bc, br;
|
2453 |
+
|
2454 |
+
if(side === CENTER) {
|
2455 |
+
b = precedance === Y ? LEFT : TOP;
|
2456 |
+
position[ b ] = '50%';
|
2457 |
+
position[MARGIN+'-' + b] = -Math.round(size[ precedance === Y ? 0 : 1 ] / 2) + userOffset;
|
2458 |
+
}
|
2459 |
+
else {
|
2460 |
+
b = self._parseWidth(corner, side, elements.tooltip);
|
2461 |
+
bc = self._parseWidth(corner, side, elements.content);
|
2462 |
+
br = self._parseRadius(corner);
|
2463 |
|
2464 |
+
position[ side ] = Math.max(-self.border, i ? bc : (userOffset + (br > b ? br : -b)));
|
2465 |
+
}
|
2466 |
+
});
|
2467 |
|
2468 |
+
// Adjust for tip size
|
2469 |
+
position[ corner[precedance] ] -= size[ precedance === X ? 0 : 1 ];
|
|
|
|
|
2470 |
|
2471 |
+
// Set and return new position
|
2472 |
+
tip.css({ margin: '', top: '', bottom: '', left: '', right: '' }).css(position);
|
2473 |
+
return position;
|
2474 |
+
},
|
|
|
|
|
|
|
|
|
|
|
2475 |
|
2476 |
+
reposition: function(event, api, pos, viewport) {
|
2477 |
+
if(!this.enabled) { return; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2478 |
|
2479 |
+
var cache = api.cache,
|
2480 |
+
newCorner = this.corner.clone(),
|
2481 |
+
adjust = pos.adjusted,
|
2482 |
+
method = api.options.position.adjust.method.split(' '),
|
2483 |
+
horizontal = method[0],
|
2484 |
+
vertical = method[1] || method[0],
|
2485 |
+
shift = { left: FALSE, top: FALSE, x: 0, y: 0 },
|
2486 |
+
offset, css = {}, props;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2487 |
|
2488 |
+
function shiftflip(direction, precedance, popposite, side, opposite) {
|
2489 |
+
// Horizontal - Shift or flip method
|
2490 |
+
if(direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER) {
|
2491 |
+
newCorner.precedance = newCorner.precedance === X ? Y : X;
|
2492 |
+
}
|
2493 |
+
else if(direction !== SHIFT && adjust[side]){
|
2494 |
+
newCorner[precedance] = newCorner[precedance] === CENTER ?
|
2495 |
+
(adjust[side] > 0 ? side : opposite) : (newCorner[precedance] === side ? opposite : side);
|
2496 |
+
}
|
2497 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2498 |
|
2499 |
+
function shiftonly(xy, side, opposite) {
|
2500 |
+
if(newCorner[xy] === CENTER) {
|
2501 |
+
css[MARGIN+'-'+side] = shift[xy] = offset[MARGIN+'-'+side] - adjust[side];
|
2502 |
+
}
|
2503 |
+
else {
|
2504 |
+
props = offset[opposite] !== undefined ?
|
2505 |
+
[ adjust[side], -offset[side] ] : [ -adjust[side], offset[side] ];
|
|
|
|
|
|
|
|
|
|
|
2506 |
|
2507 |
+
if( (shift[xy] = Math.max(props[0], props[1])) > props[0] ) {
|
2508 |
+
pos[side] -= adjust[side];
|
2509 |
+
shift[side] = FALSE;
|
2510 |
+
}
|
|
|
2511 |
|
2512 |
+
css[ offset[opposite] !== undefined ? opposite : side ] = shift[xy];
|
2513 |
+
}
|
2514 |
+
}
|
|
|
2515 |
|
2516 |
+
// If our tip position isn't fixed e.g. doesn't adjust with viewport...
|
2517 |
+
if(this.corner.fixed !== TRUE) {
|
2518 |
+
// Perform shift/flip adjustments
|
2519 |
+
shiftflip(horizontal, X, Y, LEFT, RIGHT);
|
2520 |
+
shiftflip(vertical, Y, X, TOP, BOTTOM);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2521 |
|
2522 |
+
// Update and redraw the tip if needed (check cached details of last drawn tip)
|
2523 |
+
if(newCorner.string() !== cache.corner.string() || cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) {
|
2524 |
+
this.update(newCorner, FALSE);
|
2525 |
+
}
|
2526 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2527 |
|
2528 |
+
// Setup tip offset properties
|
2529 |
+
offset = this.calculate(newCorner);
|
2530 |
|
2531 |
+
// Readjust offset object to make it left/top
|
2532 |
+
if(offset.right !== undefined) { offset.left = -offset.right; }
|
2533 |
+
if(offset.bottom !== undefined) { offset.top = -offset.bottom; }
|
2534 |
+
offset.user = this.offset;
|
2535 |
|
2536 |
+
// Perform shift adjustments
|
2537 |
+
if(shift.left = (horizontal === SHIFT && !!adjust.left)) { shiftonly(X, LEFT, RIGHT); }
|
2538 |
+
if(shift.top = (vertical === SHIFT && !!adjust.top)) { shiftonly(Y, TOP, BOTTOM); }
|
|
|
2539 |
|
2540 |
+
/*
|
2541 |
+
* If the tip is adjusted in both dimensions, or in a
|
2542 |
+
* direction that would cause it to be anywhere but the
|
2543 |
+
* outer border, hide it!
|
2544 |
+
*/
|
2545 |
+
this.element.css(css).toggle(
|
2546 |
+
!((shift.x && shift.y) || (newCorner.x === CENTER && shift.y) || (newCorner.y === CENTER && shift.x))
|
2547 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2548 |
|
2549 |
+
// Adjust position to accomodate tip dimensions
|
2550 |
+
pos.left -= offset.left.charAt ? offset.user :
|
2551 |
+
horizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0;
|
2552 |
+
pos.top -= offset.top.charAt ? offset.user :
|
2553 |
+
vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0;
|
2554 |
+
|
2555 |
+
// Cache details
|
2556 |
+
cache.cornerLeft = adjust.left; cache.cornerTop = adjust.top;
|
2557 |
+
cache.corner = newCorner.clone();
|
2558 |
+
},
|
2559 |
+
|
2560 |
+
destroy: function() {
|
2561 |
+
// Unbind events
|
2562 |
+
this.qtip._unbind(this.qtip.tooltip, this._ns);
|
2563 |
+
|
2564 |
+
// Remove the tip element(s)
|
2565 |
+
if(this.qtip.elements.tip) {
|
2566 |
+
this.qtip.elements.tip.find('*')
|
2567 |
+
.remove().end().remove();
|
2568 |
+
}
|
2569 |
+
}
|
2570 |
+
});
|
2571 |
|
2572 |
+
TIP = PLUGINS.tip = function(api) {
|
2573 |
+
return new Tip(api, api.options.style.tip);
|
2574 |
+
};
|
|
|
|
|
2575 |
|
2576 |
+
// Initialize tip on render
|
2577 |
+
TIP.initialize = 'render';
|
|
|
|
|
|
|
2578 |
|
2579 |
+
// Setup plugin sanitization options
|
2580 |
+
TIP.sanitize = function(options) {
|
2581 |
+
if(options.style && 'tip' in options.style) {
|
2582 |
+
var opts = options.style.tip;
|
2583 |
+
if(typeof opts !== 'object') { opts = options.style.tip = { corner: opts }; }
|
2584 |
+
if(!(/string|boolean/i).test(typeof opts.corner)) { opts.corner = TRUE; }
|
2585 |
+
}
|
2586 |
+
};
|
2587 |
+
|
2588 |
+
// Add new option checks for the plugin
|
2589 |
+
CHECKS.tip = {
|
2590 |
+
'^position.my|style.tip.(corner|mimic|border)$': function() {
|
2591 |
+
// Make sure a tip can be drawn
|
2592 |
+
this.create();
|
2593 |
+
|
2594 |
+
// Reposition the tooltip
|
2595 |
+
this.qtip.reposition();
|
2596 |
+
},
|
2597 |
+
'^style.tip.(height|width)$': function(obj) {
|
2598 |
+
// Re-set dimensions and redraw the tip
|
2599 |
+
this.size = [ obj.width, obj.height ];
|
2600 |
+
this.update();
|
2601 |
+
|
2602 |
+
// Reposition the tooltip
|
2603 |
+
this.qtip.reposition();
|
2604 |
+
},
|
2605 |
+
'^content.title|style.(classes|widget)$': function() {
|
2606 |
+
this.update();
|
2607 |
+
}
|
2608 |
+
};
|
2609 |
+
|
2610 |
+
// Extend original qTip defaults
|
2611 |
+
$.extend(TRUE, QTIP.defaults, {
|
2612 |
+
style: {
|
2613 |
+
tip: {
|
2614 |
+
corner: TRUE,
|
2615 |
+
mimic: FALSE,
|
2616 |
+
width: 6,
|
2617 |
+
height: 6,
|
2618 |
+
border: TRUE,
|
2619 |
+
offset: 0
|
2620 |
+
}
|
2621 |
+
}
|
2622 |
+
});
|
2623 |
+
;var MODAL, OVERLAY,
|
2624 |
+
MODALCLASS = 'qtip-modal',
|
2625 |
+
MODALSELECTOR = '.'+MODALCLASS;
|
2626 |
+
|
2627 |
+
OVERLAY = function()
|
2628 |
+
{
|
2629 |
+
var self = this,
|
2630 |
+
focusableElems = {},
|
2631 |
+
current, onLast,
|
2632 |
+
prevState, elem;
|
2633 |
+
|
2634 |
+
// Modified code from jQuery UI 1.10.0 source
|
2635 |
+
// http://code.jquery.com/ui/1.10.0/jquery-ui.js
|
2636 |
+
function focusable(element) {
|
2637 |
+
// Use the defined focusable checker when possible
|
2638 |
+
if($.expr[':'].focusable) { return $.expr[':'].focusable; }
|
2639 |
+
|
2640 |
+
var isTabIndexNotNaN = !isNaN($.attr(element, 'tabindex')),
|
2641 |
+
nodeName = element.nodeName && element.nodeName.toLowerCase(),
|
2642 |
+
map, mapName, img;
|
2643 |
+
|
2644 |
+
if('area' === nodeName) {
|
2645 |
+
map = element.parentNode;
|
2646 |
+
mapName = map.name;
|
2647 |
+
if(!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {
|
2648 |
+
return false;
|
2649 |
+
}
|
2650 |
+
img = $('img[usemap=#' + mapName + ']')[0];
|
2651 |
+
return !!img && img.is(':visible');
|
2652 |
+
}
|
2653 |
+
return (/input|select|textarea|button|object/.test( nodeName ) ?
|
2654 |
+
!element.disabled :
|
2655 |
+
'a' === nodeName ?
|
2656 |
+
element.href || isTabIndexNotNaN :
|
2657 |
+
isTabIndexNotNaN
|
2658 |
+
);
|
2659 |
+
}
|
2660 |
|
2661 |
+
// Focus inputs using cached focusable elements (see update())
|
2662 |
+
function focusInputs(blurElems) {
|
2663 |
+
// Blurring body element in IE causes window.open windows to unfocus!
|
2664 |
+
if(focusableElems.length < 1 && blurElems.length) { blurElems.not('body').blur(); }
|
|
|
|
|
|
|
|
|
2665 |
|
2666 |
+
// Focus the inputs
|
2667 |
+
else { focusableElems.first().focus(); }
|
2668 |
+
}
|
|
|
|
|
|
|
|
|
2669 |
|
2670 |
+
// Steal focus from elements outside tooltip
|
2671 |
+
function stealFocus(event) {
|
2672 |
+
if(!elem.is(':visible')) { return; }
|
|
|
|
|
|
|
|
|
|
|
2673 |
|
2674 |
+
var target = $(event.target),
|
2675 |
+
tooltip = current.tooltip,
|
2676 |
+
container = target.closest(SELECTOR),
|
2677 |
+
targetOnTop;
|
|
|
2678 |
|
2679 |
+
// Determine if input container target is above this
|
2680 |
+
targetOnTop = container.length < 1 ? FALSE :
|
2681 |
+
(parseInt(container[0].style.zIndex, 10) > parseInt(tooltip[0].style.zIndex, 10));
|
|
|
|
|
2682 |
|
2683 |
+
// If we're showing a modal, but focus has landed on an input below
|
2684 |
+
// this modal, divert focus to the first visible input in this modal
|
2685 |
+
// or if we can't find one... the tooltip itself
|
2686 |
+
if(!targetOnTop && target.closest(SELECTOR)[0] !== tooltip[0]) {
|
2687 |
+
focusInputs(target);
|
2688 |
+
}
|
2689 |
|
2690 |
+
// Detect when we leave the last focusable element...
|
2691 |
+
onLast = event.target === focusableElems[focusableElems.length - 1];
|
2692 |
+
}
|
|
|
|
|
|
|
|
|
|
|
2693 |
|
2694 |
+
$.extend(self, {
|
2695 |
+
init: function() {
|
2696 |
+
// Create document overlay
|
2697 |
+
elem = self.elem = $('<div />', {
|
2698 |
+
id: 'qtip-overlay',
|
2699 |
+
html: '<div></div>',
|
2700 |
+
mousedown: function() { return FALSE; }
|
2701 |
+
})
|
2702 |
+
.hide();
|
2703 |
|
2704 |
+
// Make sure we can't focus anything outside the tooltip
|
2705 |
+
$(document.body).bind('focusin'+MODALSELECTOR, stealFocus);
|
2706 |
|
2707 |
+
// Apply keyboard "Escape key" close handler
|
2708 |
+
$(document).bind('keydown'+MODALSELECTOR, function(event) {
|
2709 |
+
if(current && current.options.show.modal.escape && event.keyCode === 27) {
|
2710 |
+
current.hide(event);
|
|
|
|
|
2711 |
}
|
2712 |
+
});
|
|
|
|
|
|
|
|
|
2713 |
|
2714 |
+
// Apply click handler for blur option
|
2715 |
+
elem.bind('click'+MODALSELECTOR, function(event) {
|
2716 |
+
if(current && current.options.show.modal.blur) {
|
2717 |
+
current.hide(event);
|
2718 |
+
}
|
2719 |
+
});
|
2720 |
|
2721 |
+
return self;
|
2722 |
+
},
|
|
|
|
|
|
|
|
|
|
|
2723 |
|
2724 |
+
update: function(api) {
|
2725 |
+
// Update current API reference
|
2726 |
+
current = api;
|
|
|
|
|
|
|
|
|
2727 |
|
2728 |
+
// Update focusable elements if enabled
|
2729 |
+
if(api.options.show.modal.stealfocus !== FALSE) {
|
2730 |
+
focusableElems = api.tooltip.find('*').filter(function() {
|
2731 |
+
return focusable(this);
|
2732 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2733 |
}
|
2734 |
+
else { focusableElems = []; }
|
2735 |
+
},
|
2736 |
|
2737 |
+
toggle: function(api, state, duration) {
|
2738 |
+
var docBody = $(document.body),
|
2739 |
+
tooltip = api.tooltip,
|
2740 |
+
options = api.options.show.modal,
|
2741 |
+
effect = options.effect,
|
2742 |
+
type = state ? 'show': 'hide',
|
2743 |
+
visible = elem.is(':visible'),
|
2744 |
+
visibleModals = $(MODALSELECTOR).filter(':visible:not(:animated)').not(tooltip),
|
2745 |
+
zindex;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2746 |
|
2747 |
+
// Set active tooltip API reference
|
2748 |
+
self.update(api);
|
|
|
2749 |
|
2750 |
+
// If the modal can steal the focus...
|
2751 |
+
// Blur the current item and focus anything in the modal we an
|
2752 |
+
if(state && options.stealfocus !== FALSE) {
|
2753 |
+
focusInputs( $(':focus') );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2754 |
}
|
2755 |
|
2756 |
+
// Toggle backdrop cursor style on show
|
2757 |
+
elem.toggleClass('blurs', options.blur);
|
|
|
|
|
|
|
|
|
2758 |
|
2759 |
+
// Append to body on show
|
2760 |
+
if(state) {
|
2761 |
+
elem.appendTo(document.body);
|
|
|
2762 |
}
|
2763 |
|
2764 |
+
// Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible
|
2765 |
+
if((elem.is(':animated') && visible === state && prevState !== FALSE) || (!state && visibleModals.length)) {
|
2766 |
+
return self;
|
2767 |
+
}
|
|
|
2768 |
|
2769 |
+
// Stop all animations
|
2770 |
+
elem.stop(TRUE, FALSE);
|
|
|
|
|
2771 |
|
2772 |
+
// Use custom function if provided
|
2773 |
+
if($.isFunction(effect)) {
|
2774 |
+
effect.call(elem, state);
|
2775 |
+
}
|
2776 |
|
2777 |
+
// If no effect type is supplied, use a simple toggle
|
2778 |
+
else if(effect === FALSE) {
|
2779 |
+
elem[ type ]();
|
2780 |
+
}
|
|
|
|
|
2781 |
|
2782 |
+
// Use basic fade function
|
2783 |
+
else {
|
2784 |
+
elem.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() {
|
2785 |
+
if(!state) { elem.hide(); }
|
2786 |
+
});
|
2787 |
}
|
2788 |
|
2789 |
+
// Reset position and detach from body on hide
|
2790 |
+
if(!state) {
|
2791 |
+
elem.queue(function(next) {
|
2792 |
+
elem.css({ left: '', top: '' });
|
2793 |
+
if(!$(MODALSELECTOR).length) { elem.detach(); }
|
2794 |
+
next();
|
2795 |
+
});
|
2796 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2797 |
|
2798 |
+
// Cache the state
|
2799 |
+
prevState = state;
|
|
|
2800 |
|
2801 |
+
// If the tooltip is destroyed, set reference to null
|
2802 |
+
if(current.destroyed) { current = NULL; }
|
|
|
2803 |
|
2804 |
+
return self;
|
2805 |
}
|
2806 |
+
});
|
2807 |
|
2808 |
+
self.init();
|
2809 |
+
};
|
2810 |
+
OVERLAY = new OVERLAY();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2811 |
|
2812 |
+
function Modal(api, options) {
|
2813 |
+
this.options = options;
|
2814 |
+
this._ns = '-modal';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2815 |
|
2816 |
+
this.init( (this.qtip = api) );
|
2817 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2818 |
|
2819 |
+
$.extend(Modal.prototype, {
|
2820 |
+
init: function(qtip) {
|
2821 |
+
var tooltip = qtip.tooltip;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2822 |
|
2823 |
+
// If modal is disabled... return
|
2824 |
+
if(!this.options.on) { return this; }
|
|
|
|
|
|
|
2825 |
|
2826 |
+
// Set overlay reference
|
2827 |
+
qtip.elements.overlay = OVERLAY.elem;
|
|
|
2828 |
|
2829 |
+
// Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index
|
2830 |
+
tooltip.addClass(MODALCLASS).css('z-index', QTIP.modal_zindex + $(MODALSELECTOR).length);
|
|
|
2831 |
|
2832 |
+
// Apply our show/hide/focus modal events
|
2833 |
+
qtip._bind(tooltip, ['tooltipshow', 'tooltiphide'], function(event, api, duration) {
|
2834 |
+
var oEvent = event.originalEvent;
|
2835 |
|
2836 |
+
// Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop
|
2837 |
+
if(event.target === tooltip[0]) {
|
2838 |
+
if(oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test(oEvent.type) && $(oEvent.relatedTarget).closest(OVERLAY.elem[0]).length) {
|
2839 |
+
try { event.preventDefault(); } catch(e) {}
|
2840 |
+
}
|
2841 |
+
else if(!oEvent || (oEvent && oEvent.type !== 'tooltipsolo')) {
|
2842 |
+
this.toggle(event, event.type === 'tooltipshow', duration);
|
2843 |
}
|
2844 |
}
|
2845 |
+
}, this._ns, this);
|
2846 |
|
2847 |
+
// Adjust modal z-index on tooltip focus
|
2848 |
+
qtip._bind(tooltip, 'tooltipfocus', function(event, api) {
|
2849 |
+
// If focus was cancelled before it reached us, don't do anything
|
2850 |
+
if(event.isDefaultPrevented() || event.target !== tooltip[0]) { return; }
|
2851 |
|
2852 |
+
var qtips = $(MODALSELECTOR),
|
|
|
|
|
2853 |
|
2854 |
+
// Keep the modal's lower than other, regular qtips
|
2855 |
+
newIndex = QTIP.modal_zindex + qtips.length,
|
2856 |
+
curIndex = parseInt(tooltip[0].style.zIndex, 10);
|
2857 |
+
|
2858 |
+
// Set overlay z-index
|
2859 |
+
OVERLAY.elem[0].style.zIndex = newIndex - 1;
|
2860 |
+
|
2861 |
+
// Reduce modal z-index's and keep them properly ordered
|
2862 |
+
qtips.each(function() {
|
2863 |
+
if(this.style.zIndex > curIndex) {
|
2864 |
+
this.style.zIndex -= 1;
|
2865 |
}
|
2866 |
+
});
|
|
|
2867 |
|
2868 |
+
// Fire blur event for focused tooltip
|
2869 |
+
qtips.filter('.' + CLASS_FOCUS).qtip('blur', event.originalEvent);
|
2870 |
|
2871 |
+
// Set the new z-index
|
2872 |
+
tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex;
|
2873 |
|
2874 |
+
// Set current
|
2875 |
+
OVERLAY.update(api);
|
|
|
|
|
|
|
|
|
2876 |
|
2877 |
+
// Prevent default handling
|
2878 |
+
try { event.preventDefault(); } catch(e) {}
|
2879 |
+
}, this._ns, this);
|
|
|
|
|
|
|
2880 |
|
2881 |
+
// Focus any other visible modals when this one hides
|
2882 |
+
qtip._bind(tooltip, 'tooltiphide', function(event) {
|
2883 |
+
if(event.target === tooltip[0]) {
|
2884 |
+
$(MODALSELECTOR).filter(':visible').not(tooltip).last().qtip('focus', event);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2885 |
}
|
2886 |
+
}, this._ns, this);
|
2887 |
+
},
|
2888 |
|
2889 |
+
toggle: function(event, state, duration) {
|
2890 |
+
// Make sure default event hasn't been prevented
|
2891 |
+
if(event && event.isDefaultPrevented()) { return this; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2892 |
|
2893 |
+
// Toggle it
|
2894 |
+
OVERLAY.toggle(this.qtip, !!state, duration);
|
2895 |
+
},
|
|
|
2896 |
|
2897 |
+
destroy: function() {
|
2898 |
+
// Remove modal class
|
2899 |
+
this.qtip.tooltip.removeClass(MODALCLASS);
|
|
|
|
|
2900 |
|
2901 |
+
// Remove bound events
|
2902 |
+
this.qtip._unbind(this.qtip.tooltip, this._ns);
|
|
|
|
|
|
|
2903 |
|
2904 |
+
// Delete element reference
|
2905 |
+
OVERLAY.toggle(this.qtip, FALSE);
|
2906 |
+
delete this.qtip.elements.overlay;
|
2907 |
+
}
|
2908 |
+
});
|
|
|
2909 |
|
|
|
|
|
2910 |
|
2911 |
+
MODAL = PLUGINS.modal = function(api) {
|
2912 |
+
return new Modal(api, api.options.show.modal);
|
2913 |
+
};
|
|
|
2914 |
|
2915 |
+
// Setup sanitiztion rules
|
2916 |
+
MODAL.sanitize = function(opts) {
|
2917 |
+
if(opts.show) {
|
2918 |
+
if(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; }
|
2919 |
+
else if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; }
|
2920 |
+
}
|
2921 |
+
};
|
|
|
|
|
2922 |
|
2923 |
+
// Base z-index for all modal tooltips (use qTip core z-index as a base)
|
2924 |
+
QTIP.modal_zindex = QTIP.zindex - 200;
|
|
|
|
|
2925 |
|
2926 |
+
// Plugin needs to be initialized on render
|
2927 |
+
MODAL.initialize = 'render';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2928 |
|
2929 |
+
// Setup option set checks
|
2930 |
+
CHECKS.modal = {
|
2931 |
+
'^show.modal.(on|blur)$': function() {
|
2932 |
+
// Initialise
|
2933 |
+
this.destroy();
|
2934 |
+
this.init();
|
2935 |
|
2936 |
+
// Show the modal if not visible already and tooltip is visible
|
2937 |
+
this.qtip.elems.overlay.toggle(
|
2938 |
+
this.qtip.tooltip[0].offsetWidth > 0
|
2939 |
+
);
|
2940 |
+
}
|
2941 |
+
};
|
2942 |
+
|
2943 |
+
// Extend original api defaults
|
2944 |
+
$.extend(TRUE, QTIP.defaults, {
|
2945 |
+
show: {
|
2946 |
+
modal: {
|
2947 |
+
on: FALSE,
|
2948 |
+
effect: TRUE,
|
2949 |
+
blur: TRUE,
|
2950 |
+
stealfocus: TRUE,
|
2951 |
+
escape: TRUE
|
2952 |
+
}
|
2953 |
+
}
|
2954 |
+
});
|
2955 |
+
;PLUGINS.viewport = function(api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight)
|
2956 |
+
{
|
2957 |
+
var target = posOptions.target,
|
2958 |
+
tooltip = api.elements.tooltip,
|
2959 |
+
my = posOptions.my,
|
2960 |
+
at = posOptions.at,
|
2961 |
+
adjust = posOptions.adjust,
|
2962 |
+
method = adjust.method.split(' '),
|
2963 |
+
methodX = method[0],
|
2964 |
+
methodY = method[1] || method[0],
|
2965 |
+
viewport = posOptions.viewport,
|
2966 |
+
container = posOptions.container,
|
2967 |
+
cache = api.cache,
|
2968 |
+
adjusted = { left: 0, top: 0 },
|
2969 |
+
fixed, newMy, containerOffset, containerStatic,
|
2970 |
+
viewportWidth, viewportHeight, viewportScroll, viewportOffset;
|
2971 |
+
|
2972 |
+
// If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return
|
2973 |
+
if(!viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none') {
|
2974 |
+
return adjusted;
|
2975 |
+
}
|
2976 |
|
2977 |
+
// Cach container details
|
2978 |
+
containerOffset = container.offset() || adjusted;
|
2979 |
+
containerStatic = container.css('position') === 'static';
|
2980 |
+
|
2981 |
+
// Cache our viewport details
|
2982 |
+
fixed = tooltip.css('position') === 'fixed';
|
2983 |
+
viewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth(FALSE);
|
2984 |
+
viewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight(FALSE);
|
2985 |
+
viewportScroll = { left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop() };
|
2986 |
+
viewportOffset = viewport.offset() || adjusted;
|
2987 |
+
|
2988 |
+
// Generic calculation method
|
2989 |
+
function calculate(side, otherSide, type, adjust, side1, side2, lengthName, targetLength, elemLength) {
|
2990 |
+
var initialPos = position[side1],
|
2991 |
+
mySide = my[side],
|
2992 |
+
atSide = at[side],
|
2993 |
+
isShift = type === SHIFT,
|
2994 |
+
myLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2,
|
2995 |
+
atLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2,
|
2996 |
+
sideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]),
|
2997 |
+
overflow1 = sideOffset - initialPos,
|
2998 |
+
overflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset,
|
2999 |
+
offset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0);
|
3000 |
+
|
3001 |
+
// shift
|
3002 |
+
if(isShift) {
|
3003 |
+
offset = (mySide === side1 ? 1 : -1) * myLength;
|
3004 |
+
|
3005 |
+
// Adjust position but keep it within viewport dimensions
|
3006 |
+
position[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0;
|
3007 |
+
position[side1] = Math.max(
|
3008 |
+
-containerOffset[side1] + viewportOffset[side1],
|
3009 |
+
initialPos - offset,
|
3010 |
+
Math.min(
|
3011 |
+
Math.max(
|
3012 |
+
-containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight),
|
3013 |
+
initialPos + offset
|
3014 |
+
),
|
3015 |
+
position[side1],
|
3016 |
+
|
3017 |
+
// Make sure we don't adjust complete off the element when using 'center'
|
3018 |
+
mySide === 'center' ? initialPos - myLength : 1E9
|
3019 |
+
)
|
3020 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3021 |
|
3022 |
+
}
|
|
|
3023 |
|
3024 |
+
// flip/flipinvert
|
3025 |
+
else {
|
3026 |
+
// Update adjustment amount depending on if using flipinvert or flip
|
3027 |
+
adjust *= (type === FLIPINVERT ? 2 : 0);
|
|
|
|
|
|
|
|
|
|
|
|
|
3028 |
|
3029 |
+
// Check for overflow on the left/top
|
3030 |
+
if(overflow1 > 0 && (mySide !== side1 || overflow2 > 0)) {
|
3031 |
+
position[side1] -= offset + adjust;
|
3032 |
+
newMy.invert(side, side1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3033 |
}
|
3034 |
|
3035 |
+
// Check for overflow on the bottom/right
|
3036 |
+
else if(overflow2 > 0 && (mySide !== side2 || overflow1 > 0) ) {
|
3037 |
+
position[side1] -= (mySide === CENTER ? -offset : offset) + adjust;
|
3038 |
+
newMy.invert(side, side2);
|
3039 |
+
}
|
3040 |
|
3041 |
+
// Make sure we haven't made things worse with the adjustment and reset if so
|
3042 |
+
if(position[side1] < viewportScroll && -position[side1] > overflow2) {
|
3043 |
+
position[side1] = initialPos; newMy = my.clone();
|
|
|
|
|
3044 |
}
|
3045 |
+
}
|
3046 |
|
3047 |
+
return position[side1] - initialPos;
|
3048 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3049 |
|
3050 |
+
// Set newMy if using flip or flipinvert methods
|
3051 |
+
if(methodX !== 'shift' || methodY !== 'shift') { newMy = my.clone(); }
|
3052 |
+
|
3053 |
+
// Adjust position based onviewport and adjustment options
|
3054 |
+
adjusted = {
|
3055 |
+
left: methodX !== 'none' ? calculate( X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth ) : 0,
|
3056 |
+
top: methodY !== 'none' ? calculate( Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight ) : 0,
|
3057 |
+
my: newMy
|
3058 |
+
};
|
3059 |
+
|
3060 |
+
return adjusted;
|
3061 |
+
};
|
3062 |
+
;PLUGINS.polys = {
|
3063 |
+
// POLY area coordinate calculator
|
3064 |
+
// Special thanks to Ed Cradock for helping out with this.
|
3065 |
+
// Uses a binary search algorithm to find suitable coordinates.
|
3066 |
+
polygon: function(baseCoords, corner) {
|
3067 |
+
var result = {
|
3068 |
+
width: 0, height: 0,
|
3069 |
+
position: {
|
3070 |
+
top: 1e10, right: 0,
|
3071 |
+
bottom: 0, left: 1e10
|
3072 |
+
},
|
3073 |
+
adjustable: FALSE
|
3074 |
+
},
|
3075 |
+
i = 0, next,
|
3076 |
+
coords = [],
|
3077 |
+
compareX = 1, compareY = 1,
|
3078 |
+
realX = 0, realY = 0,
|
3079 |
+
newWidth, newHeight;
|
3080 |
+
|
3081 |
+
// First pass, sanitize coords and determine outer edges
|
3082 |
+
i = baseCoords.length; while(i--) {
|
3083 |
+
next = [ parseInt(baseCoords[--i], 10), parseInt(baseCoords[i+1], 10) ];
|
3084 |
+
|
3085 |
+
if(next[0] > result.position.right){ result.position.right = next[0]; }
|
3086 |
+
if(next[0] < result.position.left){ result.position.left = next[0]; }
|
3087 |
+
if(next[1] > result.position.bottom){ result.position.bottom = next[1]; }
|
3088 |
+
if(next[1] < result.position.top){ result.position.top = next[1]; }
|
3089 |
+
|
3090 |
+
coords.push(next);
|
3091 |
+
}
|
3092 |
|
3093 |
+
// Calculate height and width from outer edges
|
3094 |
+
newWidth = result.width = Math.abs(result.position.right - result.position.left);
|
3095 |
+
newHeight = result.height = Math.abs(result.position.bottom - result.position.top);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3096 |
|
3097 |
+
// If it's the center corner...
|
3098 |
+
if(corner.abbrev() === 'c') {
|
3099 |
+
result.position = {
|
3100 |
+
left: result.position.left + (result.width / 2),
|
3101 |
+
top: result.position.top + (result.height / 2)
|
3102 |
+
};
|
3103 |
+
}
|
3104 |
+
else {
|
3105 |
+
// Second pass, use a binary search algorithm to locate most suitable coordinate
|
3106 |
+
while(newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0)
|
3107 |
+
{
|
3108 |
+
newWidth = Math.floor(newWidth / 2);
|
3109 |
+
newHeight = Math.floor(newHeight / 2);
|
3110 |
|
3111 |
+
if(corner.x === LEFT){ compareX = newWidth; }
|
3112 |
+
else if(corner.x === RIGHT){ compareX = result.width - newWidth; }
|
3113 |
+
else{ compareX += Math.floor(newWidth / 2); }
|
3114 |
|
3115 |
+
if(corner.y === TOP){ compareY = newHeight; }
|
3116 |
+
else if(corner.y === BOTTOM){ compareY = result.height - newHeight; }
|
3117 |
+
else{ compareY += Math.floor(newHeight / 2); }
|
|
|
|
|
|
|
|
|
3118 |
|
3119 |
+
i = coords.length; while(i--)
|
3120 |
+
{
|
3121 |
+
if(coords.length < 2){ break; }
|
|
|
|
|
3122 |
|
3123 |
+
realX = coords[i][0] - result.position.left;
|
3124 |
+
realY = coords[i][1] - result.position.top;
|
|
|
|
|
3125 |
|
3126 |
+
if((corner.x === LEFT && realX >= compareX) ||
|
3127 |
+
(corner.x === RIGHT && realX <= compareX) ||
|
3128 |
+
(corner.x === CENTER && (realX < compareX || realX > (result.width - compareX))) ||
|
3129 |
+
(corner.y === TOP && realY >= compareY) ||
|
3130 |
+
(corner.y === BOTTOM && realY <= compareY) ||
|
3131 |
+
(corner.y === CENTER && (realY < compareY || realY > (result.height - compareY)))) {
|
3132 |
+
coords.splice(i, 1);
|
3133 |
+
}
|
3134 |
+
}
|
3135 |
}
|
3136 |
+
result.position = { left: coords[0][0], top: coords[0][1] };
|
3137 |
+
}
|
3138 |
|
3139 |
+
return result;
|
3140 |
+
},
|
|
|
|
|
|
|
3141 |
|
3142 |
+
rect: function(ax, ay, bx, by) {
|
3143 |
+
return {
|
3144 |
+
width: Math.abs(bx - ax),
|
3145 |
+
height: Math.abs(by - ay),
|
3146 |
+
position: {
|
3147 |
+
left: Math.min(ax, bx),
|
3148 |
+
top: Math.min(ay, by)
|
3149 |
}
|
3150 |
+
};
|
3151 |
+
},
|
3152 |
+
|
3153 |
+
_angles: {
|
3154 |
+
tc: 3 / 2, tr: 7 / 4, tl: 5 / 4,
|
3155 |
+
bc: 1 / 2, br: 1 / 4, bl: 3 / 4,
|
3156 |
+
rc: 2, lc: 1, c: 0
|
3157 |
+
},
|
3158 |
+
ellipse: function(cx, cy, rx, ry, corner) {
|
3159 |
+
var c = PLUGINS.polys._angles[ corner.abbrev() ],
|
3160 |
+
rxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ),
|
3161 |
+
rys = ry * Math.sin( c * Math.PI );
|
3162 |
+
|
3163 |
+
return {
|
3164 |
+
width: (rx * 2) - Math.abs(rxc),
|
3165 |
+
height: (ry * 2) - Math.abs(rys),
|
3166 |
+
position: {
|
3167 |
+
left: cx + rxc,
|
3168 |
+
top: cy + rys
|
3169 |
+
},
|
3170 |
+
adjustable: FALSE
|
3171 |
+
};
|
3172 |
+
},
|
3173 |
+
circle: function(cx, cy, r, corner) {
|
3174 |
+
return PLUGINS.polys.ellipse(cx, cy, r, r, corner);
|
3175 |
+
}
|
3176 |
+
};
|
3177 |
+
;PLUGINS.svg = function(api, svg, corner)
|
3178 |
+
{
|
3179 |
+
var doc = $(document),
|
3180 |
+
elem = svg[0],
|
3181 |
+
root = $(elem.ownerSVGElement),
|
3182 |
+
ownerDocument = elem.ownerDocument,
|
3183 |
+
strokeWidth2 = (parseInt(svg.css('stroke-width'), 10) || 0) / 2,
|
3184 |
+
frameOffset, mtx, transformed, viewBox,
|
3185 |
+
len, next, i, points,
|
3186 |
+
result, position, dimensions;
|
3187 |
+
|
3188 |
+
// Ascend the parentNode chain until we find an element with getBBox()
|
3189 |
+
while(!elem.getBBox) { elem = elem.parentNode; }
|
3190 |
+
if(!elem.getBBox || !elem.parentNode) { return FALSE; }
|
3191 |
+
|
3192 |
+
// Determine which shape calculation to use
|
3193 |
+
switch(elem.nodeName) {
|
3194 |
+
case 'ellipse':
|
3195 |
+
case 'circle':
|
3196 |
+
result = PLUGINS.polys.ellipse(
|
3197 |
+
elem.cx.baseVal.value,
|
3198 |
+
elem.cy.baseVal.value,
|
3199 |
+
(elem.rx || elem.r).baseVal.value + strokeWidth2,
|
3200 |
+
(elem.ry || elem.r).baseVal.value + strokeWidth2,
|
3201 |
+
corner
|
3202 |
+
);
|
3203 |
+
break;
|
3204 |
+
|
3205 |
+
case 'line':
|
3206 |
+
case 'polygon':
|
3207 |
+
case 'polyline':
|
3208 |
+
// Determine points object (line has none, so mimic using array)
|
3209 |
+
points = elem.points || [
|
3210 |
+
{ x: elem.x1.baseVal.value, y: elem.y1.baseVal.value },
|
3211 |
+
{ x: elem.x2.baseVal.value, y: elem.y2.baseVal.value }
|
3212 |
+
];
|
3213 |
+
|
3214 |
+
for(result = [], i = -1, len = points.numberOfItems || points.length; ++i < len;) {
|
3215 |
+
next = points.getItem ? points.getItem(i) : points[i];
|
3216 |
+
result.push.apply(result, [next.x, next.y]);
|
3217 |
+
}
|
3218 |
+
|
3219 |
+
result = PLUGINS.polys.polygon(result, corner);
|
3220 |
+
break;
|
3221 |
+
|
3222 |
+
// Unknown shape or rectangle? Use bounding box
|
3223 |
+
default:
|
3224 |
+
result = elem.getBBox();
|
3225 |
+
result = {
|
3226 |
+
width: result.width,
|
3227 |
+
height: result.height,
|
3228 |
+
position: {
|
3229 |
+
left: result.x,
|
3230 |
+
top: result.y
|
3231 |
+
}
|
3232 |
+
};
|
3233 |
+
break;
|
3234 |
+
}
|
3235 |
|
3236 |
+
// Shortcut assignments
|
3237 |
+
position = result.position;
|
3238 |
+
root = root[0];
|
|
|
3239 |
|
3240 |
+
// Convert position into a pixel value
|
3241 |
+
if(root.createSVGPoint) {
|
3242 |
+
mtx = elem.getScreenCTM();
|
3243 |
+
points = root.createSVGPoint();
|
3244 |
|
3245 |
+
points.x = position.left;
|
3246 |
+
points.y = position.top;
|
3247 |
+
transformed = points.matrixTransform( mtx );
|
3248 |
+
position.left = transformed.x;
|
3249 |
+
position.top = transformed.y;
|
3250 |
+
}
|
3251 |
|
3252 |
+
// Check the element is not in a child document, and if so, adjust for frame elements offset
|
3253 |
+
if(ownerDocument !== document && api.position.target !== 'mouse') {
|
3254 |
+
frameOffset = $((ownerDocument.defaultView || ownerDocument.parentWindow).frameElement).offset();
|
3255 |
+
if(frameOffset) {
|
3256 |
+
position.left += frameOffset.left;
|
3257 |
+
position.top += frameOffset.top;
|
3258 |
+
}
|
3259 |
+
}
|
3260 |
|
3261 |
+
// Adjust by scroll offset of owner document
|
3262 |
+
ownerDocument = $(ownerDocument);
|
3263 |
+
position.left += ownerDocument.scrollLeft();
|
3264 |
+
position.top += ownerDocument.scrollTop();
|
3265 |
+
|
3266 |
+
return result;
|
3267 |
+
};
|
3268 |
+
;PLUGINS.imagemap = function(api, area, corner, adjustMethod)
|
3269 |
+
{
|
3270 |
+
if(!area.jquery) { area = $(area); }
|
3271 |
+
|
3272 |
+
var shape = (area.attr('shape') || 'rect').toLowerCase().replace('poly', 'polygon'),
|
3273 |
+
image = $('img[usemap="#'+area.parent('map').attr('name')+'"]'),
|
3274 |
+
coordsString = $.trim(area.attr('coords')),
|
3275 |
+
coordsArray = coordsString.replace(/,$/, '').split(','),
|
3276 |
+
imageOffset, coords, i, next, result, len;
|
3277 |
+
|
3278 |
+
// If we can't find the image using the map...
|
3279 |
+
if(!image.length) { return FALSE; }
|
3280 |
+
|
3281 |
+
// Pass coordinates string if polygon
|
3282 |
+
if(shape === 'polygon') {
|
3283 |
+
result = PLUGINS.polys.polygon(coordsArray, corner);
|
3284 |
+
}
|
3285 |
|
3286 |
+
// Otherwise parse the coordinates and pass them as arguments
|
3287 |
+
else if(PLUGINS.polys[shape]) {
|
3288 |
+
for(i = -1, len = coordsArray.length, coords = []; ++i < len;) {
|
3289 |
+
coords.push( parseInt(coordsArray[i], 10) );
|
3290 |
}
|
3291 |
|
3292 |
+
result = PLUGINS.polys[shape].apply(
|
3293 |
+
this, coords.concat(corner)
|
3294 |
+
);
|
3295 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
3296 |
|
3297 |
+
// If no shapre calculation method was found, return false
|
3298 |
+
else { return FALSE; }
|
3299 |
+
|
3300 |
+
// Make sure we account for padding and borders on the image
|
3301 |
+
imageOffset = image.offset();
|
3302 |
+
imageOffset.left += Math.ceil((image.outerWidth(FALSE) - image.width()) / 2);
|
3303 |
+
imageOffset.top += Math.ceil((image.outerHeight(FALSE) - image.height()) / 2);
|
3304 |
+
|
3305 |
+
// Add image position to offset coordinates
|
3306 |
+
result.position.left += imageOffset.left;
|
3307 |
+
result.position.top += imageOffset.top;
|
3308 |
+
|
3309 |
+
return result;
|
3310 |
+
};
|
3311 |
+
;var IE6,
|
3312 |
+
|
3313 |
+
/*
|
3314 |
+
* BGIFrame adaption (http://plugins.jquery.com/project/bgiframe)
|
3315 |
+
* Special thanks to Brandon Aaron
|
3316 |
+
*/
|
3317 |
+
BGIFRAME = '<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" ' +
|
3318 |
+
' style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); ' +
|
3319 |
+
'-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';
|
3320 |
+
|
3321 |
+
function Ie6(api, qtip) {
|
3322 |
+
this._ns = 'ie6';
|
3323 |
+
this.init( (this.qtip = api) );
|
3324 |
+
}
|
3325 |
|
3326 |
+
$.extend(Ie6.prototype, {
|
3327 |
+
_scroll : function() {
|
3328 |
+
var overlay = this.qtip.elements.overlay;
|
3329 |
+
overlay && (overlay[0].style.top = $(window).scrollTop() + 'px');
|
3330 |
+
},
|
3331 |
|
3332 |
+
init: function(qtip) {
|
3333 |
+
var tooltip = qtip.tooltip,
|
3334 |
+
scroll;
|
3335 |
|
3336 |
+
// Create the BGIFrame element if needed
|
3337 |
+
if($('select, object').length < 1) {
|
3338 |
+
this.bgiframe = qtip.elements.bgiframe = $(BGIFRAME).appendTo(tooltip);
|
|
|
|
|
3339 |
|
3340 |
+
// Update BGIFrame on tooltip move
|
3341 |
+
qtip._bind(tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this);
|
3342 |
+
}
|
3343 |
|
3344 |
+
// redraw() container for width/height calculations
|
3345 |
+
this.redrawContainer = $('<div/>', { id: NAMESPACE+'-rcontainer' })
|
3346 |
+
.appendTo(document.body);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3347 |
|
3348 |
+
// Fixup modal plugin if present too
|
3349 |
+
if( qtip.elements.overlay && qtip.elements.overlay.addClass('qtipmodal-ie6fix') ) {
|
3350 |
+
qtip._bind(window, ['scroll', 'resize'], this._scroll, this._ns, this);
|
3351 |
+
qtip._bind(tooltip, ['tooltipshow'], this._scroll, this._ns, this);
|
3352 |
+
}
|
3353 |
|
3354 |
+
// Set dimensions
|
3355 |
+
this.redraw();
|
3356 |
+
},
|
|
|
|
|
3357 |
|
3358 |
+
adjustBGIFrame: function() {
|
3359 |
+
var tooltip = this.qtip.tooltip,
|
3360 |
+
dimensions = {
|
3361 |
+
height: tooltip.outerHeight(FALSE),
|
3362 |
+
width: tooltip.outerWidth(FALSE)
|
3363 |
+
},
|
3364 |
+
plugin = this.qtip.plugins.tip,
|
3365 |
+
tip = this.qtip.elements.tip,
|
3366 |
+
tipAdjust, offset;
|
3367 |
+
|
3368 |
+
// Adjust border offset
|
3369 |
+
offset = parseInt(tooltip.css('borderLeftWidth'), 10) || 0;
|
3370 |
+
offset = { left: -offset, top: -offset };
|
3371 |
+
|
3372 |
+
// Adjust for tips plugin
|
3373 |
+
if(plugin && tip) {
|
3374 |
+
tipAdjust = (plugin.corner.precedance === 'x') ? [WIDTH, LEFT] : [HEIGHT, TOP];
|
3375 |
+
offset[ tipAdjust[1] ] -= tip[ tipAdjust[0] ]();
|
3376 |
+
}
|
3377 |
|
3378 |
+
// Update bgiframe
|
3379 |
+
this.bgiframe.css(offset).css(dimensions);
|
3380 |
+
},
|
3381 |
|
3382 |
+
// Max/min width simulator function
|
3383 |
+
redraw: function() {
|
3384 |
+
if(this.qtip.rendered < 1 || this.drawing) { return this; }
|
|
|
|
|
|
|
|
|
3385 |
|
3386 |
+
var tooltip = this.qtip.tooltip,
|
3387 |
+
style = this.qtip.options.style,
|
3388 |
+
container = this.qtip.options.position.container,
|
3389 |
+
perc, width, max, min;
|
3390 |
|
3391 |
+
// Set drawing flag
|
3392 |
+
this.qtip.drawing = 1;
|
|
|
|
|
|
|
3393 |
|
3394 |
+
// If tooltip has a set height/width, just set it... like a boss!
|
3395 |
+
if(style.height) { tooltip.css(HEIGHT, style.height); }
|
3396 |
+
if(style.width) { tooltip.css(WIDTH, style.width); }
|
3397 |
|
3398 |
+
// Simulate max/min width if not set width present...
|
3399 |
+
else {
|
3400 |
+
// Reset width and add fluid class
|
3401 |
+
tooltip.css(WIDTH, '').appendTo(this.redrawContainer);
|
3402 |
|
3403 |
+
// Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!)
|
3404 |
+
width = tooltip.width();
|
3405 |
+
if(width % 2 < 1) { width += 1; }
|
3406 |
|
3407 |
+
// Grab our max/min properties
|
3408 |
+
max = tooltip.css('maxWidth') || '';
|
3409 |
+
min = tooltip.css('minWidth') || '';
|
3410 |
|
3411 |
+
// Parse into proper pixel values
|
3412 |
+
perc = (max + min).indexOf('%') > -1 ? container.width() / 100 : 0;
|
3413 |
+
max = ((max.indexOf('%') > -1 ? perc : 1) * parseInt(max, 10)) || width;
|
3414 |
+
min = ((min.indexOf('%') > -1 ? perc : 1) * parseInt(min, 10)) || 0;
|
3415 |
|
3416 |
+
// Determine new dimension size based on max/min/current values
|
3417 |
+
width = max + min ? Math.min(Math.max(width, min), max) : width;
|
3418 |
|
3419 |
+
// Set the newly calculated width and remvoe fluid class
|
3420 |
+
tooltip.css(WIDTH, Math.round(width)).appendTo(container);
|
3421 |
+
}
|
3422 |
|
3423 |
+
// Set drawing flag
|
3424 |
+
this.drawing = 0;
|
|
|
|
|
|
|
3425 |
|
3426 |
+
return this;
|
3427 |
+
},
|
|
|
|
|
3428 |
|
3429 |
+
destroy: function() {
|
3430 |
+
// Remove iframe
|
3431 |
+
this.bgiframe && this.bgiframe.remove();
|
3432 |
|
3433 |
+
// Remove bound events
|
3434 |
+
this.qtip._unbind([window, this.qtip.tooltip], this._ns);
|
|
|
|
|
|
|
|
|
3435 |
}
|
3436 |
+
});
|
|
|
|
|
|
|
3437 |
|
3438 |
+
IE6 = PLUGINS.ie6 = function(api) {
|
3439 |
+
// Proceed only if the browser is IE6
|
3440 |
+
return BROWSER.ie === 6 ? new Ie6(api) : FALSE;
|
3441 |
+
};
|
3442 |
|
3443 |
+
IE6.initialize = 'render';
|
3444 |
|
3445 |
+
CHECKS.ie6 = {
|
3446 |
+
'^content|style$': function() {
|
3447 |
+
this.redraw();
|
3448 |
+
}
|
3449 |
+
};
|
3450 |
+
;}));
|
3451 |
+
}( window, document ));
|
ReduxCore/assets/js/vendor/qtip/jquery.qtip.min.js
CHANGED
@@ -1,3 +1,5 @@
|
|
1 |
-
/* qTip2 v2.2.
|
2 |
-
if ( typeof jQuery.qtip === 'undefined' ) {!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=A,this.elements={target:a},this._id=J+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:z,attr:e,onTooltip:z,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=z}function f(a){return a===A||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?z:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?z:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==z,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,A,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(f(b.title)||(b.button=b.title.button,b.title=b.title.text),g(b.title||z)&&(b.title=z))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===y?{ready:y}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(I,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return M.concat("").join(a?"-"+a+" ":" ")}function l(c){return c&&{type:c.type,pageX:c.pageX,pageY:c.pageY,target:c.target,relatedTarget:c.relatedTarget,scrollX:c.scrollX||a.pageXOffset||b.body.scrollLeft||b.documentElement.scrollLeft,scrollY:c.scrollY||a.pageYOffset||b.body.scrollTop||b.documentElement.scrollTop}||{}}function m(a,b){return b>0?setTimeout(d.proxy(a,this),b):(a.call(this),void 0)}function n(a){return this.tooltip.hasClass(T)?z:(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=m.call(this,function(){this.toggle(y,a)},this.options.show.delay),void 0)}function o(a){if(this.tooltip.hasClass(T))return z;var b=d(a.relatedTarget),c=b.closest(N)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=m.call(this,function(){this.toggle(z,a)},this.options.hide.delay,this)}function p(a){return this.tooltip.hasClass(T)||!this.options.hide.inactive?z:(clearTimeout(this.timers.inactive),this.timers.inactive=m.call(this,function(){this.hide(a)},this.options.hide.inactive),void 0)}function q(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function r(a,c,e){d(b.body).delegate(a,(c.split?c:c.join($+" "))+$,function(){var a=t.api[d.attr(this,L)];a&&!a.disabled&&e.apply(a,arguments)})}function s(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):A,p="html5"===f.metadata.type&&o?o[f.metadata.name]:A,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(y,{},t.defaults,f,"object"==typeof q?h(q):A,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===z||!j)return z;k.content.text=j}if(i.container.length||(i.container=m),i.target===z&&(i.target=n),k.show.target===z&&(k.show.target=n),k.show.solo===y&&(k.show.solo=i.container.closest("body")),k.hide.target===z&&(k.hide.target=n),k.position.viewport===y&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new v(i.at,y),i.my=new v(i.my),a.data(J))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===z)return z;return a.attr(K,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(V,l).attr("title",""),g=new e(a,k,c,!!j),a.data(J,g),a.one("remove.qtip-"+c+" removeqtip.qtip-"+c,function(){var a;(a=d(this).data(J))&&a.destroy(!0)}),g}var t,u,v,w,x,y=!0,z=!1,A=null,B="x",C="y",D="top",E="left",F="bottom",G="right",H="center",I={},J="qtip",K="data-hasqtip",L="data-qtip-id",M=["ui-widget","ui-tooltip"],N="."+J,O="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),P=J+"-fixed",Q=J+"-default",R=J+"-focus",S=J+"-hover",T=J+"-disabled",U="_replacedByqTip",V="oldtitle",W={ie:function(){for(var a=3,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+ ++a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||z};u=e.prototype,u._when=function(a){return d.when.apply(d,a)},u.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[J,Q,e.style.classes,J+"-pos-"+e.position.my.abbrev()].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":z,"aria-describedby":this._id+"-content","aria-hidden":y}).toggleClass(T,this.disabled).attr(L,this.id).data(J,this).appendTo(k.container).append(g.content=d("<div />",{"class":J+"-content",id:this._id+"-content","aria-atomic":y})),this.rendered=-1,this.positioning=y,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,z))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,z)),this.rendered=y,this._setWidget(),d.each(I,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=z,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(y,f.event,z),c.hiddenDuringWait=z}),t.api[this.id]=this,this},u.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=y;var a=this.target,b=a.attr(V);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()}),clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this._unassignEvents(),a.removeData(J).removeAttr(L).removeAttr(K).removeAttr("aria-describedby"),this.options.suppress&&b&&a.attr("title",b).removeAttr(V),this._unbind(a),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=A,delete t.api[this.id]}}return this.destroyed?this.target:(a===y&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},w=u.checks={builtin:{"^id$":function(a,b,c,e){var f=c===y?t.nextid:c,g=J+"-"+f;f!==z&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),this._updateTitle(c),void 0):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(a[b]=new v(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(y)||this.toggle(y))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Q,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},u.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var X=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,Y=/^prerender|show\.ready/i;u.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=z,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&Y.test(b))return delete a[b],void 0;var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=X.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=y,d.each(a,d.proxy(j,this)),this.positioning=z,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?A:this.cache.event),this},u._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=y,a.then(function(a){return e.waiting=z,c._update(a,b)},A,function(a){return c._update(a,b)})):a===z||!a&&""!==a?z:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){a.images&&a.images.length&&c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):z},u._waitForContent=function(a){var b=this.cache;return b.waiting=y,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=z}).promise()},u._updateContent=function(a,b){this._update(a,this.elements.content,b)},u._updateTitle=function(a,b){this._update(a,this.elements.title,b)===z&&this._removeTitle(z)},u._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":J+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":J+"-title","aria-atomic":y})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},u._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=A,a!==z&&this.reposition())},u.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=y;var f,g,h=this.cache,i=this.tooltip,j=this.options.position,k=j.target,l=j.my,m=j.at,n=j.viewport,o=j.container,p=j.adjust,q=p.method.split(" "),r=i.outerWidth(z),s=i.outerHeight(z),t=0,u=0,v=i.css("position"),w={left:0,top:0},x=i[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=o[0].ownerDocument,J=this.mouse;if(d.isArray(k)&&2===k.length)m={x:E,y:D},w={left:k[0],top:k[1]};else if("mouse"===k)m={x:E,y:D},!J||!J.pageX||!p.mouse&&c&&c.pageX?c&&c.pageX||((!p.mouse||this.options.show.distance)&&h.origin&&h.origin.pageX?c=h.origin:(!c||c&&("resize"===c.type||"scroll"===c.type))&&(c=h.event)):c=J,"static"!==v&&(w=o.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),w={left:c.pageX-w.left+(g&&g.left||0),top:c.pageY-w.top+(g&&g.top||0)},p.mouse&&A&&J&&(w.left-=(J.scrollX||0)-B.scrollLeft(),w.top-=(J.scrollY||0)-B.scrollTop());else{if("event"===k?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?h.target=d(c.target):c.target||(h.target=this.elements.target):"event"!==k&&(h.target=d(k.jquery?k:this.elements.target)),k=h.target,k=d(k).eq(0),0===k.length)return this;k[0]===b||k[0]===a?(t=W.iOS?a.innerWidth:k.width(),u=W.iOS?a.innerHeight:k.height(),k[0]===a&&(w={top:(n||k).scrollTop(),left:(n||k).scrollLeft()})):I.imagemap&&k.is("area")?f=I.imagemap(this,k,m,I.viewport?q:z):I.svg&&k&&k[0].ownerSVGElement?f=I.svg(this,k,m,I.viewport?q:z):(t=k.outerWidth(z),u=k.outerHeight(z),w=k.offset()),f&&(t=f.width,u=f.height,g=f.offset,w=f.position),w=this.reposition.offset(k,w,o),(W.iOS>3.1&&W.iOS<4.1||W.iOS>=4.3&&W.iOS<4.33||!W.iOS&&"fixed"===v)&&(w.left-=B.scrollLeft(),w.top-=B.scrollTop()),(!f||f&&f.adjustable!==z)&&(w.left+=m.x===G?t:m.x===H?t/2:0,w.top+=m.y===F?u:m.y===H?u/2:0)}return w.left+=p.x+(l.x===G?-r:l.x===H?-r/2:0),w.top+=p.y+(l.y===F?-s:l.y===H?-s/2:0),I.viewport?(w.adjusted=I.viewport(this,w,j,t,u,r,s),g&&w.adjusted.left&&(w.left+=g.left),g&&w.adjusted.top&&(w.top+=g.top)):w.adjusted={left:0,top:0},this._trigger("move",[w,n.elem||n],c)?(delete w.adjusted,e===z||!x||isNaN(w.left)||isNaN(w.top)||"mouse"===k||!d.isFunction(j.effect)?i.css(w):d.isFunction(j.effect)&&(j.effect.call(i,this,d.extend({},w)),i.queue(function(a){d(this).css({opacity:"",height:""}),W.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=z,this):this},u.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!W.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var Z=(v=u.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,H).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?C:B}).prototype;Z.invert=function(a,b){this[a]=this[a]===E?G:this[a]===G?E:b||this[a]},Z.string=function(){var a=this.x,b=this.y;return a===b?a:this.precedance===C||this.forceY&&"center"!==b?b+" "+a:a+" "+b},Z.abbrev=function(){var a=this.string().split(" ");return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},Z.clone=function(){return new v(this.string(),this.forceY)},u.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=l(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=y),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",m=this.options[k],n=(this.options[a?"hide":"show"],this.options.position),o=this.options.content,p=this.tooltip.css("width"),q=this.tooltip.is(":visible"),r=a||1===m.target.length,s=!c||m.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!q),h=!g.is(":animated")&&q===a&&s,i=h?A:!!this._trigger(k,[90]),this.destroyed?this:(i!==z&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(e.origin=l(this.mouse),d.isFunction(o.text)&&this._updateContent(o.text,z),d.isFunction(o.title)&&this._updateTitle(o.title,z),!x&&"mouse"===n.target&&n.adjust.mouse&&(d(b).bind("mousemove."+J,this._storeMouse),x=y),p||g.css("width",g.outerWidth(z)),this.reposition(c,arguments[2]),p||g.css("width",""),m.solo&&("string"==typeof m.solo?d(m.solo):d(N,m.solo)).not(g).not(m.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,x&&!d(N+'[tracking="true"]:visible',m.solo).not(g).length&&(d(b).unbind("mousemove."+J),x=z),this.blur(c)),j=d.proxy(function(){a?(W.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof m.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),m.effect===z||r===z?(g[k](),j()):d.isFunction(m.effect)?(g.stop(1,1),m.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&m.target.trigger("qtip-"+this.id+"-inactive"),this))},u.show=function(a){return this.toggle(y,a)},u.hide=function(a){return this.toggle(z,a)},u.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(N),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=t.zindex+b.length;return c.hasClass(R)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+R).qtip("blur",a)),c.addClass(R)[0].style.zIndex=f),this},u.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(R),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},u.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(T):this.disabled):"boolean"!=typeof a&&(a=y),this.rendered&&this.tooltip.toggleClass(T,a).attr("aria-disabled",a),this.disabled=!!a,this)},u.enable=function(){return this.disable(z)},u._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":J+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(T)||a.hide(b),z})},u._updateButton=function(a){if(!this.rendered)return z;var b=this.elements.button;a?this._createButton():b.remove()},u._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(T);c.removeClass(T),T=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(T,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Q,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(J+"-icon",!a)},u._storeMouse=function(a){(this.mouse=l(a)).type="mousemove"},u._bind=function(a,b,c,e,f){var g="."+this._id+(e?"-"+e:"");b.length&&d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this))},u._unbind=function(a,b){d(a).unbind("."+this._id+(b?"-"+b:""))};var $="."+J;d(function(){r(N,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(P)&&!c.hasClass(T)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(S,b)}),r("["+L+"]",O,p)}),u._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||A,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=z,!e.isDefaultPrevented()},u._bindEvents=function(a,b,c,e,f,g){if(e.add(c).length===e.length){var h=[];b=d.map(b,function(b){var c=d.inArray(b,a);return c>-1?(h.push(a.splice(c,1)[0]),void 0):b}),h.length&&this._bind(c,h,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)})}this._bind(c,a,f),this._bind(e,b,g)},u._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?z:(this.cache.event=l(a),this.cache.target=a?d(a.target):[c],clearTimeout(this.timers.show),this.timers.show=m.call(this,function(){this.render("object"==typeof a||e.show.ready)},e.show.delay),void 0)}var e=this.options,f=e.show.target,g=e.hide.target,h=e.show.event?d.trim(""+e.show.event).split(" "):[],i=e.hide.event?d.trim(""+e.hide.event).split(" "):[];/mouse(over|enter)/i.test(e.show.event)&&!/mouse(out|leave)/i.test(e.hide.event)&&i.push("mouseleave"),this._bind(f,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=y}),this._bindEvents(h,i,f,g,b,function(){clearTimeout(this.timers.show)}),(e.show.ready||e.prerender)&&b.call(this,a)},u._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),m=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(P)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(T)&&this.tooltip[0].offsetWidth>0,e=b.parents(N).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",p),this._bind(i.add(g),t.inactiveEvents,p,"-inactive")),this._bindEvents(r,s,h,i,n,o),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){this.cache.onTarget="mouseenter"===a.type}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(T)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:m,"resize",q),f.adjust.scroll&&this._bind(m.add(f.container),"scroll",q)},u._unassignEvents=function(){var c=[this.options.show.target[0],this.options.hide.target[0],this.rendered&&this.tooltip[0],this.options.position.container[0],this.options.position.viewport[0],this.options.position.container.closest("html")[0],a,b];this._unbind(d([]).pushStack(d.grep(c,function(a){return"object"==typeof a})))},t=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=A,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],J):A;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,J);if(!a)return y;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),z;a.set(b,e)}}),g!==A?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(y,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===z||c.length<1||t.api[c]?t.nextid++:c,b=s(d(this),c,k),b===z?y:(t.api[c]=b,d.each(I,function(){"initialize"===this.initialize&&this(b)}),b._assignInitialEvents(j),void 0)}))},d.qtip=e,t.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,V):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(V,b))}return d.fn["attr"+U].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+U].apply(this,arguments));return a||b.filter("["+V+"]").attr("title",function(){return d.attr(this,V)}).removeAttr(V),b}},function(a,b){if(!b||d.fn[a+U])return y;var c=d.fn[a+U]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+U]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(K))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+U].apply(this,arguments)}),t.version="2.2.0",t.nextid=0,t.inactiveEvents=O,t.zindex=15e3,t.defaults={prerender:z,id:z,overwrite:y,suppress:y,content:{text:y,attr:"title",title:z,button:z},position:{my:"top left",at:"bottom right",target:z,container:z,viewport:z,adjust:{x:0,y:0,mouse:y,scroll:y,resize:y,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:z})}},show:{target:z,event:"mouseenter",effect:y,delay:90,solo:z,ready:z,autofocus:z},hide:{target:z,event:"mouseleave",effect:y,delay:0,fixed:z,inactive:z,leave:"window",distance:z},style:{classes:"",widget:z,width:z,height:z,def:y},events:{render:A,move:A,show:A,hide:A,toggle:A,visible:A,hidden:A,focus:A,blur:A}}})}(window,document);}
|
3 |
-
//# sourceMappingURL=http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0//var/www/qtip2/build/tmp/tmp-9404qaj6jps/jquery.qtip.min.map
|
|
|
|
1 |
+
/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
|
2 |
+
|
3 |
+
!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=jb+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=jb+s(a.y)+s(a.x)+"Radius";return db.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||pb.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=jb+s(a[a.precedance])+s(kb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,lb)||g(f,lb)||g(b.content,lb)||g(b.tooltip,lb)||c.css(lb),h[1]=g(c,e,kb)||g(f,e,kb)||g(b.content,e,kb)||g(b.tooltip,e,kb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",lb+":"+mb+nb+";"+jb+":0"+nb+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b[4],b[5]),a.closePath()},create:function(){var a=this.corner=(ob||db.ie)&&this._parseCorner(this.options.corner);return(this.enabled=!!this.corner&&"c"!==this.corner.abbrev())&&(this.qtip.cache.corner=a.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(b,c){if(!this.enabled)return this;var e,f,g,h,i,j,k,l,m=this.qtip.elements,n=this.element,o=n.children(),p=this.options,q=this.size,r=p.mimic,s=Math.round;b||(b=this.qtip.cache.corner||this.corner),r===E?r=b:(r=new A(r),r.precedance=b.precedance,"inherit"===r.x?r.x=b.x:"inherit"===r.y?r.y=b.y:r.x===r.y&&(r[b.precedance]=b[b.precedance])),f=r.precedance,b.precedance===G?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==mb?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l;
|
4 |
+
e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wb,xb,yb="qtip-modal",zb="."+yb;xb=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(W);b=j.length<1?E:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("<div />",{id:"qtip-overlay",html:"<div></div>",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]<q&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]<f.position.left&&(f.position.left=c[0]),c[1]>f.position.bottom&&(f.position.bottom=c[1]),c[1]<f.position.top&&(f.position.top=c[1]),h.push(c);if(d=f.width=Math.abs(f.position.right-f.position.left),e=f.height=Math.abs(f.position.bottom-f.position.top),"c"===b.abbrev())f.position={left:f.position.left+f.width/2,top:f.position.top+f.height/2};else{for(;d>0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=(d(b),c[0]),p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k<i;)j=l.getItem?l.getItem(k):l[k],m.push.apply(m,[j.x,j.y]);m=R.polys.polygon(m,e);break;default:m=o.getBBox(),m={width:m.width,height:m.height,position:{left:m.x,top:m.y}}}return n=m.position,p=p[0],p.createSVGPoint&&(g=o.getScreenCTM(),l=p.createSVGPoint(),l.x=n.left,l.y=n.top,h=l.matrixTransform(g),n.left=h.x,n.top=h.y),q!==b&&"mouse"!==a.position.target&&(f=d((q.defaultView||q.parentWindow).frameElement).offset(),f&&(n.left+=f.left,n.top+=f.top)),q=d(q),n.left+=q.scrollLeft(),n.top+=q.scrollTop(),m},R.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=(b.attr("shape")||"rect").toLowerCase().replace("poly","polygon"),k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),l=d.trim(b.attr("coords")),m=l.replace(/,$/,"").split(",");if(!k.length)return E;if("polygon"===j)h=R.polys.polygon(m,c);else{if(!R.polys[j])return E;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=R.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(E)-k.width())/2),e.top+=Math.ceil((k.outerHeight(E)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Ab,Bb='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document);
|
5 |
+
//# sourceMappingURL=jquery.qtip.min.js.map
|
ReduxCore/core/dashboard.php
CHANGED
@@ -6,14 +6,21 @@
|
|
6 |
|
7 |
if (!class_exists('reduxDashboardWidget')) {
|
8 |
class reduxDashboardWidget {
|
9 |
-
|
10 |
-
|
|
|
|
|
|
|
11 |
}
|
12 |
|
13 |
public function add_redux_dashboard() {
|
14 |
add_meta_box('redux_dashboard_widget', 'Redux Framework News', array($this,'redux_dashboard_widget'), 'dashboard', 'side', 'high');
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
17 |
public function redux_dashboard_widget() {
|
18 |
echo '<div class="rss-widget">';
|
19 |
wp_widget_rss_output(array(
|
@@ -27,6 +34,4 @@
|
|
27 |
echo '</div>';
|
28 |
}
|
29 |
}
|
30 |
-
|
31 |
-
new reduxDashboardWidget();
|
32 |
}
|
6 |
|
7 |
if (!class_exists('reduxDashboardWidget')) {
|
8 |
class reduxDashboardWidget {
|
9 |
+
|
10 |
+
public function __construct ($parent) {
|
11 |
+
$fname = Redux_Functions::dat( 'add_redux_dashboard', $parent->args['opt_name'] );
|
12 |
+
|
13 |
+
add_action('wp_dashboard_setup', array($this, $fname));
|
14 |
}
|
15 |
|
16 |
public function add_redux_dashboard() {
|
17 |
add_meta_box('redux_dashboard_widget', 'Redux Framework News', array($this,'redux_dashboard_widget'), 'dashboard', 'side', 'high');
|
18 |
}
|
19 |
|
20 |
+
public function dat() {
|
21 |
+
return;
|
22 |
+
}
|
23 |
+
|
24 |
public function redux_dashboard_widget() {
|
25 |
echo '<div class="rss-widget">';
|
26 |
wp_widget_rss_output(array(
|
34 |
echo '</div>';
|
35 |
}
|
36 |
}
|
|
|
|
|
37 |
}
|
ReduxCore/core/newsflash.php
CHANGED
@@ -28,28 +28,35 @@
|
|
28 |
|
29 |
$this->notice_data = get_option( 'r_notice_data', '' );
|
30 |
|
|
|
|
|
|
|
31 |
// if notice data is empty
|
32 |
if ( empty( $this->notice_data ) ) {
|
33 |
// get notice data from server and create cache data
|
34 |
-
$this
|
35 |
} else {
|
36 |
// check expiry time
|
37 |
if ( ! isset( $_COOKIE[ $this->cookie_id ] ) ) {
|
38 |
// expired! get notice data from server
|
39 |
-
$this
|
40 |
}
|
41 |
}
|
42 |
|
43 |
// set the admin notice msg
|
44 |
-
$this
|
45 |
}
|
46 |
|
|
|
|
|
|
|
|
|
47 |
private function get_notice_json() {
|
48 |
|
49 |
// get notice data from server
|
50 |
|
51 |
-
$data = wp_remote_get( $this->server_file, array( 'sslverify' => false ) );
|
52 |
-
if ( ! is_wp_error( $data ) && $data['response']['code'] == 200 ) {
|
53 |
$data = $data['body'];
|
54 |
// if some data exists
|
55 |
if ( $data != '' || ! empty( $data ) ) {
|
28 |
|
29 |
$this->notice_data = get_option( 'r_notice_data', '' );
|
30 |
|
31 |
+
$fname = Redux_Functions::bub( 'get_notice_json', $parent->args['opt_name'] );
|
32 |
+
$mname = Redux_Functions::yo( 'display_message', $parent->args['opt_name'] );
|
33 |
+
|
34 |
// if notice data is empty
|
35 |
if ( empty( $this->notice_data ) ) {
|
36 |
// get notice data from server and create cache data
|
37 |
+
$this->$fname();
|
38 |
} else {
|
39 |
// check expiry time
|
40 |
if ( ! isset( $_COOKIE[ $this->cookie_id ] ) ) {
|
41 |
// expired! get notice data from server
|
42 |
+
$this->$fname();
|
43 |
}
|
44 |
}
|
45 |
|
46 |
// set the admin notice msg
|
47 |
+
$this->$mname();
|
48 |
}
|
49 |
|
50 |
+
private function bub() {
|
51 |
+
$this->notice_data = '';
|
52 |
+
}
|
53 |
+
|
54 |
private function get_notice_json() {
|
55 |
|
56 |
// get notice data from server
|
57 |
|
58 |
+
$data = @wp_remote_get( $this->server_file, array( 'sslverify' => false ) );
|
59 |
+
if ( isset( $data ) && ! empty( $data ) && ! is_wp_error( $data ) && $data['response']['code'] == 200 ) {
|
60 |
$data = $data['body'];
|
61 |
// if some data exists
|
62 |
if ( $data != '' || ! empty( $data ) ) {
|
ReduxCore/framework.php
CHANGED
@@ -20,16 +20,6 @@
|
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
-
// Fix for the GT3 page builder: http://www.gt3themes.com/wordpress-gt3-page-builder-plugin/
|
24 |
-
/** @global string $pagenow */
|
25 |
-
if ( has_action( 'ecpt_field_options_' ) ) {
|
26 |
-
global $pagenow;
|
27 |
-
if ( $pagenow === 'admin.php' ) {
|
28 |
-
|
29 |
-
remove_action( 'admin_init', 'pb_admin_init' );
|
30 |
-
}
|
31 |
-
}
|
32 |
-
|
33 |
if ( ! class_exists( 'ReduxFrameworkInstances' ) ) {
|
34 |
// Instance Container
|
35 |
require_once dirname( __FILE__ ) . '/inc/class.redux_instances.php';
|
@@ -56,6 +46,8 @@
|
|
56 |
require_once dirname( __FILE__ ) . '/inc/class.redux_functions.php';
|
57 |
require_once dirname( __FILE__ ) . '/inc/class.p.php';
|
58 |
|
|
|
|
|
59 |
require_once dirname( __FILE__ ) . '/inc/class.redux_filesystem.php';
|
60 |
|
61 |
require_once dirname( __FILE__ ) . '/inc/class.redux_admin_notices.php';
|
@@ -77,7 +69,7 @@
|
|
77 |
// Please update the build number with each push, no matter how small.
|
78 |
// This will make for easier support when we ask users what version they are using.
|
79 |
|
80 |
-
public static $_version = '3.5.
|
81 |
public static $_dir;
|
82 |
public static $_url;
|
83 |
public static $_upload_dir;
|
@@ -141,6 +133,10 @@
|
|
141 |
|
142 |
// ::init()
|
143 |
|
|
|
|
|
|
|
|
|
144 |
public $framework_url = 'http://www.reduxframework.com/';
|
145 |
public static $instance = null;
|
146 |
public $admin_notices = array();
|
@@ -184,6 +180,8 @@
|
|
184 |
public $lang = "";
|
185 |
public $dev_mode_forced = false;
|
186 |
public $reload_fields = array();
|
|
|
|
|
187 |
|
188 |
/**
|
189 |
* Class Constructor. Defines the args for the theme options class
|
@@ -259,6 +257,8 @@
|
|
259 |
$this->args['save_defaults'] = false;
|
260 |
}
|
261 |
|
|
|
|
|
262 |
if ( ! empty ( $this->args['opt_name'] ) ) {
|
263 |
/**
|
264 |
* SHIM SECTION
|
@@ -412,13 +412,14 @@
|
|
412 |
|
413 |
if ( $this->args['dev_mode'] == true || Redux_Helpers::isLocalHost() == true ) {
|
414 |
require_once 'core/dashboard.php';
|
|
|
415 |
|
416 |
if ( ! isset ( $GLOBALS['redux_notice_check'] ) ) {
|
417 |
require_once 'core/newsflash.php';
|
418 |
|
419 |
$params = array(
|
420 |
'dir_name' => 'notice',
|
421 |
-
'server_file' => 'http://reduxframework.com/
|
422 |
'interval' => 3,
|
423 |
'cookie_id' => 'redux_blast',
|
424 |
);
|
@@ -443,7 +444,7 @@
|
|
443 |
private function set_redux_content() {
|
444 |
$upload_dir = wp_upload_dir();
|
445 |
self::$_upload_dir = $upload_dir['basedir'] . '/redux/';
|
446 |
-
self::$_upload_url = $upload_dir['baseurl'] . '/redux/';
|
447 |
}
|
448 |
|
449 |
private function set_default_args() {
|
@@ -631,7 +632,7 @@
|
|
631 |
}
|
632 |
}
|
633 |
if ( ReduxFramework::$_is_plugin ) {
|
634 |
-
load_plugin_textdomain( 'redux-framework', self::$_dir . 'languages/' . $locale . '.mo' );
|
635 |
} else {
|
636 |
load_textdomain( 'redux-framework', self::$_dir . 'languages/' . $locale . '.mo' );
|
637 |
}
|
@@ -1065,7 +1066,16 @@
|
|
1065 |
$args = array( $args );
|
1066 |
}
|
1067 |
$data = call_user_func( $args[0] );
|
1068 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1069 |
//if
|
1070 |
}
|
1071 |
//if
|
@@ -1149,7 +1159,7 @@
|
|
1149 |
if ( is_array( $field['data'] ) && ! empty( $field['data'] ) ) {
|
1150 |
foreach ( $field['data'] as $key => $data ) {
|
1151 |
if ( ! empty( $data ) ) {
|
1152 |
-
if ( ! isset ( $
|
1153 |
$field['args'][ $key ] = array();
|
1154 |
}
|
1155 |
$field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] );
|
@@ -1510,6 +1520,10 @@
|
|
1510 |
// Let's deal with external links
|
1511 |
if ( isset ( $this->args['admin_bar_links'] ) ) {
|
1512 |
|
|
|
|
|
|
|
|
|
1513 |
// Group for Main Root Menu (External Group)
|
1514 |
$wp_admin_bar->add_node( array(
|
1515 |
'id' => $this->args["page_slug"] . '-external',
|
@@ -1728,7 +1742,7 @@
|
|
1728 |
|
1729 |
$curTab = '0';
|
1730 |
if ( isset ( $_GET['tab'] ) ) {
|
1731 |
-
$curTab = $_GET['tab'];
|
1732 |
}
|
1733 |
|
1734 |
// Default url values for enabling hints.
|
@@ -1910,9 +1924,11 @@
|
|
1910 |
// Set show_hints flag to true, so helptab will be displayed.
|
1911 |
$this->show_hints = true;
|
1912 |
|
|
|
|
|
1913 |
// Get user pref for displaying hints.
|
1914 |
$metaVal = get_user_meta( $current_user->ID, 'ignore_hints', true );
|
1915 |
-
if ( 'true' == $metaVal || empty ( $metaVal ) ) {
|
1916 |
|
1917 |
// Set hand cursor for clickable hints
|
1918 |
$pointer = '';
|
@@ -2445,11 +2461,12 @@
|
|
2445 |
$class_file = apply_filters( "redux/extension/{$this->args['opt_name']}/$folder", "$path/$folder/extension_{$folder}.php", $class_file );
|
2446 |
|
2447 |
if ( $class_file ) {
|
|
|
2448 |
if ( file_exists( $class_file ) ) {
|
2449 |
require_once $class_file;
|
|
|
|
|
2450 |
}
|
2451 |
-
|
2452 |
-
$this->extensions[ $folder ] = new $extension_class ( $this );
|
2453 |
}
|
2454 |
}
|
2455 |
|
@@ -3931,6 +3948,64 @@
|
|
3931 |
|
3932 |
return $merged;
|
3933 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3934 |
}
|
3935 |
|
3936 |
// ReduxFramework
|
20 |
exit;
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
if ( ! class_exists( 'ReduxFrameworkInstances' ) ) {
|
24 |
// Instance Container
|
25 |
require_once dirname( __FILE__ ) . '/inc/class.redux_instances.php';
|
46 |
require_once dirname( __FILE__ ) . '/inc/class.redux_functions.php';
|
47 |
require_once dirname( __FILE__ ) . '/inc/class.p.php';
|
48 |
|
49 |
+
require_once dirname( __FILE__ ) . '/inc/class.thirdparty.fixes.php';
|
50 |
+
|
51 |
require_once dirname( __FILE__ ) . '/inc/class.redux_filesystem.php';
|
52 |
|
53 |
require_once dirname( __FILE__ ) . '/inc/class.redux_admin_notices.php';
|
69 |
// Please update the build number with each push, no matter how small.
|
70 |
// This will make for easier support when we ask users what version they are using.
|
71 |
|
72 |
+
public static $_version = '3.5.9';
|
73 |
public static $_dir;
|
74 |
public static $_url;
|
75 |
public static $_upload_dir;
|
133 |
|
134 |
// ::init()
|
135 |
|
136 |
+
public static function christine() {
|
137 |
+
return;
|
138 |
+
}
|
139 |
+
|
140 |
public $framework_url = 'http://www.reduxframework.com/';
|
141 |
public static $instance = null;
|
142 |
public $admin_notices = array();
|
180 |
public $lang = "";
|
181 |
public $dev_mode_forced = false;
|
182 |
public $reload_fields = array();
|
183 |
+
public $omit_share_icons = false;
|
184 |
+
public $omit_admin_items = false;
|
185 |
|
186 |
/**
|
187 |
* Class Constructor. Defines the args for the theme options class
|
257 |
$this->args['save_defaults'] = false;
|
258 |
}
|
259 |
|
260 |
+
$this->change_demo_defaults();
|
261 |
+
|
262 |
if ( ! empty ( $this->args['opt_name'] ) ) {
|
263 |
/**
|
264 |
* SHIM SECTION
|
412 |
|
413 |
if ( $this->args['dev_mode'] == true || Redux_Helpers::isLocalHost() == true ) {
|
414 |
require_once 'core/dashboard.php';
|
415 |
+
new reduxDashboardWidget($this);
|
416 |
|
417 |
if ( ! isset ( $GLOBALS['redux_notice_check'] ) ) {
|
418 |
require_once 'core/newsflash.php';
|
419 |
|
420 |
$params = array(
|
421 |
'dir_name' => 'notice',
|
422 |
+
'server_file' => 'http://reduxframework.com/wp-content/uploads/redux/redux_notice.json',
|
423 |
'interval' => 3,
|
424 |
'cookie_id' => 'redux_blast',
|
425 |
);
|
444 |
private function set_redux_content() {
|
445 |
$upload_dir = wp_upload_dir();
|
446 |
self::$_upload_dir = $upload_dir['basedir'] . '/redux/';
|
447 |
+
self::$_upload_url = str_replace( array( 'https://', 'http://' ), '//', $upload_dir['baseurl'] . '/redux/' );
|
448 |
}
|
449 |
|
450 |
private function set_default_args() {
|
632 |
}
|
633 |
}
|
634 |
if ( ReduxFramework::$_is_plugin ) {
|
635 |
+
load_plugin_textdomain( 'redux-framework', '', self::$_dir . 'languages/' . $locale . '.mo' );
|
636 |
} else {
|
637 |
load_textdomain( 'redux-framework', self::$_dir . 'languages/' . $locale . '.mo' );
|
638 |
}
|
1066 |
$args = array( $args );
|
1067 |
}
|
1068 |
$data = call_user_func( $args[0] );
|
1069 |
+
} else if ( $type == "users" || $type == "users" ) {
|
1070 |
+
$users = get_users( $args );
|
1071 |
+
if ( ! empty ( $users ) ) {
|
1072 |
+
foreach ( $users as $user ) {
|
1073 |
+
$data[ $user->ID ] = $user->display_name;
|
1074 |
+
}
|
1075 |
+
//foreach
|
1076 |
+
}
|
1077 |
+
//if
|
1078 |
+
}
|
1079 |
//if
|
1080 |
}
|
1081 |
//if
|
1159 |
if ( is_array( $field['data'] ) && ! empty( $field['data'] ) ) {
|
1160 |
foreach ( $field['data'] as $key => $data ) {
|
1161 |
if ( ! empty( $data ) ) {
|
1162 |
+
if ( ! isset ( $field['args'][ $key ] ) ) {
|
1163 |
$field['args'][ $key ] = array();
|
1164 |
}
|
1165 |
$field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] );
|
1520 |
// Let's deal with external links
|
1521 |
if ( isset ( $this->args['admin_bar_links'] ) ) {
|
1522 |
|
1523 |
+
if (!$this->args['dev_mode'] && $this->omit_admin_items) {
|
1524 |
+
return;
|
1525 |
+
}
|
1526 |
+
|
1527 |
// Group for Main Root Menu (External Group)
|
1528 |
$wp_admin_bar->add_node( array(
|
1529 |
'id' => $this->args["page_slug"] . '-external',
|
1742 |
|
1743 |
$curTab = '0';
|
1744 |
if ( isset ( $_GET['tab'] ) ) {
|
1745 |
+
$curTab = esc_attr($_GET['tab']);
|
1746 |
}
|
1747 |
|
1748 |
// Default url values for enabling hints.
|
1924 |
// Set show_hints flag to true, so helptab will be displayed.
|
1925 |
$this->show_hints = true;
|
1926 |
|
1927 |
+
$hint = apply_filters( 'redux/hints/html', $hint, $field, $this->args );
|
1928 |
+
|
1929 |
// Get user pref for displaying hints.
|
1930 |
$metaVal = get_user_meta( $current_user->ID, 'ignore_hints', true );
|
1931 |
+
if ( 'true' == $metaVal || empty ( $metaVal ) && empty( $hint ) ) {
|
1932 |
|
1933 |
// Set hand cursor for clickable hints
|
1934 |
$pointer = '';
|
2461 |
$class_file = apply_filters( "redux/extension/{$this->args['opt_name']}/$folder", "$path/$folder/extension_{$folder}.php", $class_file );
|
2462 |
|
2463 |
if ( $class_file ) {
|
2464 |
+
|
2465 |
if ( file_exists( $class_file ) ) {
|
2466 |
require_once $class_file;
|
2467 |
+
|
2468 |
+
$this->extensions[ $folder ] = new $extension_class ( $this );
|
2469 |
}
|
|
|
|
|
2470 |
}
|
2471 |
}
|
2472 |
|
3948 |
|
3949 |
return $merged;
|
3950 |
}
|
3951 |
+
|
3952 |
+
private function change_demo_defaults() {
|
3953 |
+
if ($this->args['dev_mode'] == true || Redux_Helpers::isLocalHost() == true) {
|
3954 |
+
if (!empty($this->args['admin_bar_links'])) {
|
3955 |
+
foreach($this->args['admin_bar_links'] as $idx => $arr) {
|
3956 |
+
if (is_array($arr) && !empty($arr)) {
|
3957 |
+
foreach($arr as $x => $y) {
|
3958 |
+
if (strpos(strtolower($y), 'redux') >= 0) {
|
3959 |
+
$msg = __('<strong>Redux Framework Notice: </strong>There are references to the Redux Framework support site in your config\'s <code>admin_bar_links</code> argument. This is sample data. Please change or remove this data before shipping your product.', 'redux-framework');
|
3960 |
+
$this->display_arg_change_notice('admin', $msg);
|
3961 |
+
$this->omit_admin_items = true;
|
3962 |
+
continue;
|
3963 |
+
}
|
3964 |
+
}
|
3965 |
+
}
|
3966 |
+
}
|
3967 |
+
}
|
3968 |
+
|
3969 |
+
if (!empty($this->args['share_icons'])) {
|
3970 |
+
foreach($this->args['share_icons'] as $idx => $arr) {
|
3971 |
+
if (is_array($arr) && !empty($arr)) {
|
3972 |
+
foreach($arr as $x => $y) {
|
3973 |
+
if (strpos(strtolower($y), 'redux') >= 0) {
|
3974 |
+
$msg = __('<strong>Redux Framework Notice: </strong>There are references to the Redux Framework support site in your config\'s <code>share_icons</code> argument. This is sample data. Please change or remove this data before shipping your product.', 'redux-framework');
|
3975 |
+
$this->display_arg_change_notice('share', $msg);
|
3976 |
+
$this->omit_share_icons = true;
|
3977 |
+
}
|
3978 |
+
}
|
3979 |
+
}
|
3980 |
+
}
|
3981 |
+
}
|
3982 |
+
|
3983 |
+
}
|
3984 |
+
}
|
3985 |
+
|
3986 |
+
private function display_arg_change_notice($mode, $msg = '') {
|
3987 |
+
if ($mode == 'admin') {
|
3988 |
+
if (!$this->omit_admin_items) {
|
3989 |
+
$this->admin_notices[] = array(
|
3990 |
+
'type' => 'error',
|
3991 |
+
'msg' => $msg,
|
3992 |
+
'id' => 'admin_config',
|
3993 |
+
'dismiss' => true,
|
3994 |
+
);
|
3995 |
+
}
|
3996 |
+
}
|
3997 |
+
|
3998 |
+
if ($mode == 'share') {
|
3999 |
+
if (!$this->omit_share_icons) {
|
4000 |
+
$this->admin_notices[] = array(
|
4001 |
+
'type' => 'error',
|
4002 |
+
'msg' => $msg,
|
4003 |
+
'id' => 'share_config',
|
4004 |
+
'dismiss' => true,
|
4005 |
+
);
|
4006 |
+
}
|
4007 |
+
}
|
4008 |
+
}
|
4009 |
}
|
4010 |
|
4011 |
// ReduxFramework
|
ReduxCore/inc/browser.php
CHANGED
@@ -1,1194 +1,1282 @@
|
|
1 |
<?php
|
2 |
-
/**
|
3 |
-
* Browser detection class
|
4 |
-
*
|
5 |
-
* @author Original Author: Chris Schuld (http://chrisschuld.com/)
|
6 |
-
* @author Modifications for EDD: Chris Christoff
|
7 |
-
* @version 1.9
|
8 |
-
* Usage:
|
9 |
-
* $browser = new Browser();
|
10 |
-
* if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
|
11 |
-
* echo 'You have Firefox version 2 or greater';
|
12 |
-
* }
|
13 |
-
* User agents sampled from: http://www.useragentstring.com/
|
14 |
-
* Based on original work from Gary White (http://apptools.com/phptools/browser/
|
15 |
-
* CHANGELOG:
|
16 |
-
* 2012-12-26 (v1.9c by Chris Christoff):
|
17 |
-
* + Changed vars to publics
|
18 |
-
* 2012-12-23 (v1.9b by Chris Christoff):
|
19 |
-
* + Removed the browser string return and added spacing.
|
20 |
-
* + Also removed return HTML formatting.
|
21 |
-
* 2012-12-23 (v1.9a by Chris Christoff):
|
22 |
-
* + Split user string and add formatting so we can print a nicely
|
23 |
-
* formatted user agent string
|
24 |
-
* 2010-08-20 (v1.9):
|
25 |
-
* + Added MSN Explorer Browser (legacy)
|
26 |
-
* + Added Bing/MSN Robot (Thanks Rob MacDonald)
|
27 |
-
* + Added the Android Platform (PLATFORM_ANDROID)
|
28 |
-
* + Fixed issue with Android 1.6/2.2 (Thanks Tom Hirashima)
|
29 |
-
* 2010-04-27 (v1.8):
|
30 |
-
* + Added iPad Support
|
31 |
-
* 2010-03-07 (v1.7):
|
32 |
-
* + *MAJOR* Rebuild (preg_match and other "slow" routine removal(s))
|
33 |
-
* + Almost allof Gary's original code has been replaced
|
34 |
-
* + Large PHPUNIT testing environment created to validate new releases and additions
|
35 |
-
* + Added FreeBSD Platform
|
36 |
-
* + Added OpenBSD Platform
|
37 |
-
* + Added NetBSD Platform
|
38 |
-
* + Added SunOS Platform
|
39 |
-
* + Added OpenSolaris Platform
|
40 |
-
* + Added support of the Iceweazel Browser
|
41 |
-
* + Added isChromeFrame() call to check if chromeframe is in use
|
42 |
-
* + Moved the Opera check in front of the Firefox check due to legacy Opera User Agents
|
43 |
-
* + Added the __toString() method (Thanks Deano)
|
44 |
-
* 2009-11-15:
|
45 |
-
* + Updated the checkes for Firefox
|
46 |
-
* + Added the NOKIA platform
|
47 |
-
* + Added Checks for the NOKIA brower(s)
|
48 |
-
* 2009-11-08:
|
49 |
-
* + PHP 5.3 Support
|
50 |
-
* + Added support for BlackBerry OS and BlackBerry browser
|
51 |
-
* + Added support for the Opera Mini browser
|
52 |
-
* + Added additional documenation
|
53 |
-
* + Added support for isRobot() and isMobile()
|
54 |
-
* + Added support for Opera version 10
|
55 |
-
* + Added support for deprecated Netscape Navigator version 9
|
56 |
-
* + Added support for IceCat
|
57 |
-
* + Added support for Shiretoko
|
58 |
-
* 2010-04-27 (v1.8):
|
59 |
-
* + Added iPad Support
|
60 |
-
* 2009-08-18:
|
61 |
-
* + Updated to support PHP 5.3 - removed all deprecated function calls
|
62 |
-
* + Updated to remove all double quotes (") -- converted to single quotes (')
|
63 |
-
* 2009-04-27:
|
64 |
-
* + Updated the IE check to remove a typo and bug (thanks John)
|
65 |
-
* 2009-04-22:
|
66 |
-
* + Added detection for GoogleBot
|
67 |
-
* + Added detection for the W3C Validator.
|
68 |
-
* + Added detection for Yahoo! Slurp
|
69 |
-
* 2009-03-14:
|
70 |
-
* + Added detection for iPods.
|
71 |
-
* + Added Platform detection for iPhones
|
72 |
-
* + Added Platform detection for iPods
|
73 |
-
* 2009-02-16: (Rick Hale)
|
74 |
-
* + Added version detection for Android phones.
|
75 |
-
* 2008-12-09:
|
76 |
-
* + Removed unused constant
|
77 |
-
* 2008-11-07:
|
78 |
-
* + Added Google's Chrome to the detection list
|
79 |
-
* + Added isBrowser(string) to the list of functions special thanks to
|
80 |
-
* Daniel 'mavrick' Lang for the function concept (http://mavrick.id.au)
|
81 |
-
* Gary White noted: "Since browser detection is so unreliable, I am
|
82 |
-
* no longer maintaining this script. You are free to use and or
|
83 |
-
* modify/update it as you want, however the author assumes no
|
84 |
-
* responsibility for the accuracy of the detected values."
|
85 |
-
* Anyone experienced with Gary's script might be interested in these notes:
|
86 |
-
* Added class constants
|
87 |
-
* Added detection and version detection for Google's Chrome
|
88 |
-
* Updated the version detection for Amaya
|
89 |
-
* Updated the version detection for Firefox
|
90 |
-
* Updated the version detection for Lynx
|
91 |
-
* Updated the version detection for WebTV
|
92 |
-
* Updated the version detection for NetPositive
|
93 |
-
* Updated the version detection for IE
|
94 |
-
* Updated the version detection for OmniWeb
|
95 |
-
* Updated the version detection for iCab
|
96 |
-
* Updated the version detection for Safari
|
97 |
-
* Updated Safari to remove mobile devices (iPhone)
|
98 |
-
* Added detection for iPhone
|
99 |
-
* Added detection for robots
|
100 |
-
* Added detection for mobile devices
|
101 |
-
* Added detection for BlackBerry
|
102 |
-
* Removed Netscape checks (matches heavily with firefox & mozilla)
|
103 |
-
*/
|
104 |
-
|
105 |
-
|
106 |
-
// Exit if accessed directly
|
107 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
108 |
-
exit;
|
109 |
-
}
|
110 |
-
|
111 |
-
if ( ! class_exists( 'Browser' ) ) {
|
112 |
-
|
113 |
-
/**
|
114 |
-
* Browser detection class
|
115 |
-
*
|
116 |
-
* @author Chris Schuld
|
117 |
-
* @since 1.0
|
118 |
-
*/
|
119 |
-
class Browser {
|
120 |
-
public $_agent = '';
|
121 |
-
public $_browser_name = '';
|
122 |
-
public $_version = '';
|
123 |
-
public $_platform = '';
|
124 |
-
public $_os = '';
|
125 |
-
public $_is_aol = false;
|
126 |
-
public $_is_mobile = false;
|
127 |
-
public $_is_robot = false;
|
128 |
-
public $_aol_version = '';
|
129 |
-
|
130 |
-
public $BROWSER_UNKNOWN = 'unknown';
|
131 |
-
public $VERSION_UNKNOWN = 'unknown';
|
132 |
-
|
133 |
-
public $BROWSER_OPERA = 'Opera'; // Http://www.opera.com/
|
134 |
-
public $BROWSER_OPERA_MINI = 'Opera Mini'; // Http://www.opera.com/mini/
|
135 |
-
public $BROWSER_WEBTV = 'WebTV'; // Http://www.webtv.net/pc/
|
136 |
-
public $BROWSER_IE = 'Internet Explorer'; // Http://www.microsoft.com/ie/
|
137 |
-
public $BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // Http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
|
138 |
-
public $BROWSER_KONQUEROR = 'Konqueror'; // Http://www.konqueror.org/
|
139 |
-
public $BROWSER_ICAB = 'iCab'; // Http://www.icab.de/
|
140 |
-
public $BROWSER_OMNIWEB = 'OmniWeb'; // Http://www.omnigroup.com/applications/omniweb/
|
141 |
-
public $BROWSER_FIREBIRD = 'Firebird'; // Http://www.ibphoenix.com/
|
142 |
-
public $BROWSER_FIREFOX = 'Firefox'; // Http://www.mozilla.com/en-US/firefox/firefox.html
|
143 |
-
public $BROWSER_ICEWEASEL = 'Iceweasel'; // Http://www.geticeweasel.org/
|
144 |
-
public $BROWSER_SHIRETOKO = 'Shiretoko'; // Http://wiki.mozilla.org/Projects/shiretoko
|
145 |
-
public $BROWSER_MOZILLA = 'Mozilla'; // Http://www.mozilla.com/en-US/
|
146 |
-
public $BROWSER_AMAYA = 'Amaya'; // Http://www.w3.org/Amaya/
|
147 |
-
public $BROWSER_LYNX = 'Lynx'; // Http://en.wikipedia.org/wiki/Lynx
|
148 |
-
public $BROWSER_SAFARI = 'Safari'; // Http://apple.com
|
149 |
-
public $BROWSER_IPHONE = 'iPhone'; // Http://apple.com
|
150 |
-
public $BROWSER_IPOD = 'iPod'; // Http://apple.com
|
151 |
-
public $BROWSER_IPAD = 'iPad'; // Http://apple.com
|
152 |
-
public $BROWSER_CHROME = 'Chrome'; // Http://www.google.com/chrome
|
153 |
-
public $BROWSER_ANDROID = 'Android'; // Http://www.android.com/
|
154 |
-
public $BROWSER_GOOGLEBOT = 'GoogleBot'; // Http://en.wikipedia.org/wiki/Googlebot
|
155 |
-
public $BROWSER_SLURP = 'Yahoo! Slurp'; // Http://en.wikipedia.org/wiki/Yahoo!_Slurp
|
156 |
-
public $BROWSER_W3CVALIDATOR = 'W3C Validator'; // Http://validator.w3.org/
|
157 |
-
public $BROWSER_BLACKBERRY = 'BlackBerry'; // Http://www.blackberry.com/
|
158 |
-
public $BROWSER_ICECAT = 'IceCat'; // Http://en.wikipedia.org/wiki/GNU_IceCat
|
159 |
-
public $BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // Http://en.wikipedia.org/wiki/Web_Browser_for_S60
|
160 |
-
public $BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform
|
161 |
-
public $BROWSER_MSN = 'MSN Browser'; // Http://explorer.msn.com/
|
162 |
-
public $BROWSER_MSNBOT = 'MSN Bot'; // Http://search.msn.com/msnbot.htm
|
163 |
-
// Http://en.wikipedia.org/wiki/Msnbot (used for Bing as well)
|
164 |
-
|
165 |
-
public $BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // Http://browser.netscape.com/ (DEPRECATED)
|
166 |
-
public $BROWSER_GALEON = 'Galeon'; // Http://galeon.sourceforge.net/ (DEPRECATED)
|
167 |
-
public $BROWSER_NETPOSITIVE = 'NetPositive'; // Http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
|
168 |
-
public $BROWSER_PHOENIX = 'Phoenix'; // Http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)
|
169 |
-
|
170 |
-
public $PLATFORM_UNKNOWN = 'unknown';
|
171 |
-
public $PLATFORM_WINDOWS = 'Windows';
|
172 |
-
public $PLATFORM_WINDOWS_CE = 'Windows CE';
|
173 |
-
public $PLATFORM_APPLE = 'Apple';
|
174 |
-
public $PLATFORM_LINUX = 'Linux';
|
175 |
-
public $PLATFORM_OS2 = 'OS/2';
|
176 |
-
public $PLATFORM_BEOS = 'BeOS';
|
177 |
-
public $PLATFORM_IPHONE = 'iPhone';
|
178 |
-
public $PLATFORM_IPOD = 'iPod';
|
179 |
-
public $PLATFORM_IPAD = 'iPad';
|
180 |
-
public $PLATFORM_BLACKBERRY = 'BlackBerry';
|
181 |
-
public $PLATFORM_NOKIA = 'Nokia';
|
182 |
-
public $PLATFORM_FREEBSD = 'FreeBSD';
|
183 |
-
public $PLATFORM_OPENBSD = 'OpenBSD';
|
184 |
-
public $PLATFORM_NETBSD = 'NetBSD';
|
185 |
-
public $PLATFORM_SUNOS = 'SunOS';
|
186 |
-
public $PLATFORM_OPENSOLARIS = 'OpenSolaris';
|
187 |
-
public $PLATFORM_ANDROID = 'Android';
|
188 |
-
|
189 |
-
public $OPERATING_SYSTEM_UNKNOWN = 'unknown';
|
190 |
-
|
191 |
-
function Browser( $useragent = '' ) {
|
192 |
-
$this->reset();
|
193 |
-
|
194 |
-
if ( $useragent != '' ) {
|
195 |
-
$this->setUserAgent( $useragent );
|
196 |
-
} else {
|
197 |
-
$this->determine();
|
198 |
-
}
|
199 |
-
}
|
200 |
-
|
201 |
-
/**
|
202 |
-
* Reset all properties
|
203 |
-
*/
|
204 |
-
function reset() {
|
205 |
-
$this->_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
|
206 |
-
$this->_browser_name = $this->BROWSER_UNKNOWN;
|
207 |
-
$this->_version = $this->VERSION_UNKNOWN;
|
208 |
-
$this->_platform = $this->PLATFORM_UNKNOWN;
|
209 |
-
$this->_os = $this->OPERATING_SYSTEM_UNKNOWN;
|
210 |
-
$this->_is_aol = false;
|
211 |
-
$this->_is_mobile = false;
|
212 |
-
$this->_is_robot = false;
|
213 |
-
$this->_aol_version = $this->VERSION_UNKNOWN;
|
214 |
-
}
|
215 |
-
|
216 |
-
/**
|
217 |
-
* Check to see if the specific browser is valid
|
218 |
-
*
|
219 |
-
* @param string $browserName
|
220 |
-
*
|
221 |
-
* @return True if the browser is the specified browser
|
222 |
-
*/
|
223 |
-
function isBrowser( $browserName ) {
|
224 |
-
return ( 0 == strcasecmp( $this->_browser_name, trim( $browserName ) ) );
|
225 |
-
}
|
226 |
-
|
227 |
-
/**
|
228 |
-
* The name of the browser. All return types are from the class contants
|
229 |
-
*
|
230 |
-
* @return string Name of the browser
|
231 |
-
*/
|
232 |
-
function getBrowser() {
|
233 |
-
return $this->_browser_name;
|
234 |
-
}
|
235 |
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
|
|
262 |
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
$this->determine();
|
371 |
-
}
|
372 |
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
}
|
382 |
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
$text2 = $this->getUserAgent(); // Now we grab it again and save it to a string
|
392 |
-
$towrapUA = str_replace( $UAline1, '', $text2 ); // The rest of the printoff (other than first line) is equivalent
|
393 |
-
// to the whole string minus the part we printed off. IE
|
394 |
-
// User Agent: thefirst32charactersfromUAline1
|
395 |
-
// the rest of it is now stored in
|
396 |
-
// $text2 to be printed off
|
397 |
-
// But we need to add spaces before each line that is split other than line 1
|
398 |
-
$space = '';
|
399 |
-
for ( $i = 0; $i < 25; $i ++ ) {
|
400 |
-
$space .= ' ';
|
401 |
-
}
|
402 |
|
403 |
-
|
404 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
405 |
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
|
|
|
|
412 |
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
// Special Notes:
|
431 |
-
// (1) Opera must be checked before FireFox due to the odd
|
432 |
-
// user agents used in some older versions of Opera
|
433 |
-
// (2) WebTV is strapped onto Internet Explorer so we must
|
434 |
-
// check for WebTV before IE
|
435 |
-
// (3) (deprecated) Galeon is based on Firefox and needs to be
|
436 |
-
// tested before Firefox is tested
|
437 |
-
// (4) OmniWeb is based on Safari so OmniWeb check must occur
|
438 |
-
// before Safari
|
439 |
-
// (5) Netscape 9+ is based on Firefox so Netscape checks
|
440 |
-
// before FireFox are necessary
|
441 |
-
$this->checkBrowserWebTv() ||
|
442 |
-
$this->checkBrowserInternetExplorer() ||
|
443 |
-
$this->checkBrowserOpera() ||
|
444 |
-
$this->checkBrowserGaleon() ||
|
445 |
-
$this->checkBrowserNetscapeNavigator9Plus() ||
|
446 |
-
$this->checkBrowserFirefox() ||
|
447 |
-
$this->checkBrowserChrome() ||
|
448 |
-
$this->checkBrowserOmniWeb() ||
|
449 |
-
|
450 |
-
// Common mobile
|
451 |
-
$this->checkBrowserAndroid() ||
|
452 |
-
$this->checkBrowseriPad() ||
|
453 |
-
$this->checkBrowseriPod() ||
|
454 |
-
$this->checkBrowseriPhone() ||
|
455 |
-
$this->checkBrowserBlackBerry() ||
|
456 |
-
$this->checkBrowserNokia() ||
|
457 |
-
|
458 |
-
// Common bots
|
459 |
-
$this->checkBrowserGoogleBot() ||
|
460 |
-
$this->checkBrowserMSNBot() ||
|
461 |
-
$this->checkBrowserSlurp() ||
|
462 |
-
|
463 |
-
// WebKit base check (post mobile and others)
|
464 |
-
$this->checkBrowserSafari() ||
|
465 |
-
|
466 |
-
// Everyone else
|
467 |
-
$this->checkBrowserNetPositive() ||
|
468 |
-
$this->checkBrowserFirebird() ||
|
469 |
-
$this->checkBrowserKonqueror() ||
|
470 |
-
$this->checkBrowserIcab() ||
|
471 |
-
$this->checkBrowserPhoenix() ||
|
472 |
-
$this->checkBrowserAmaya() ||
|
473 |
-
$this->checkBrowserLynx() ||
|
474 |
-
|
475 |
-
$this->checkBrowserShiretoko() ||
|
476 |
-
$this->checkBrowserIceCat() ||
|
477 |
-
$this->checkBrowserW3CValidator() ||
|
478 |
-
$this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
|
479 |
-
);
|
480 |
-
}
|
481 |
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
$aversion = explode( ' ', $aresult[1] );
|
491 |
-
$this->setVersion( $aversion[0] );
|
492 |
-
$this->_browser_name = $this->BROWSER_BLACKBERRY;
|
493 |
-
$this->setMobile( true );
|
494 |
|
495 |
-
|
496 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
497 |
|
498 |
-
|
499 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
500 |
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
|
|
|
|
|
|
509 |
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
|
|
|
|
|
|
|
|
|
|
514 |
|
515 |
-
|
516 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
517 |
|
518 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
519 |
}
|
|
|
|
|
|
|
520 |
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
return false;
|
538 |
}
|
|
|
|
|
|
|
539 |
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
}
|
555 |
-
|
556 |
-
return false;
|
557 |
}
|
|
|
|
|
|
|
558 |
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
// Some of the Validator versions do not delineate w/ a slash - add it back in
|
574 |
-
$ua = str_replace( "W3C_Validator ", "W3C_Validator/", $this->_agent );
|
575 |
-
$aresult = explode( '/', stristr( $ua, 'W3C_Validator' ) );
|
576 |
-
$aversion = explode( ' ', $aresult[1] );
|
577 |
-
$this->setVersion( $aversion[0] );
|
578 |
-
$this->_browser_name = $this->BROWSER_W3CVALIDATOR;
|
579 |
-
|
580 |
-
return true;
|
581 |
-
}
|
582 |
-
|
583 |
-
return false;
|
584 |
}
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
return false;
|
604 |
}
|
|
|
|
|
|
|
605 |
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
$this->setVersion( '1.5' );
|
620 |
-
}
|
621 |
-
|
622 |
-
return true;
|
623 |
-
// Test for versions > 1.5
|
624 |
-
} else if ( stripos( $this->_agent, 'msie' ) !== false && stripos( $this->_agent, 'opera' ) === false ) {
|
625 |
-
// See if the browser is the odd MSN Explorer
|
626 |
-
if ( stripos( $this->_agent, 'msnb' ) !== false ) {
|
627 |
-
$aresult = explode( ' ', stristr( str_replace( ';', '; ', $this->_agent ), 'MSN' ) );
|
628 |
-
$this->setBrowser( $this->BROWSER_MSN );
|
629 |
-
$this->setVersion( str_replace( array( '(', ')', ';' ), '', $aresult[1] ) );
|
630 |
-
|
631 |
-
return true;
|
632 |
-
}
|
633 |
-
$aresult = explode( ' ', stristr( str_replace( ';', '; ', $this->_agent ), 'msie' ) );
|
634 |
-
$this->setBrowser( $this->BROWSER_IE );
|
635 |
-
$this->setVersion( str_replace( array( '(', ')', ';' ), '', $aresult[1] ) );
|
636 |
-
|
637 |
-
return true;
|
638 |
-
// Test for Pocket IE
|
639 |
-
} else if ( stripos( $this->_agent, 'mspie' ) !== false || stripos( $this->_agent, 'pocket' ) !== false ) {
|
640 |
-
$aresult = explode( ' ', stristr( $this->_agent, 'mspie' ) );
|
641 |
-
$this->setPlatform( $this->PLATFORM_WINDOWS_CE );
|
642 |
-
$this->setBrowser( $this->BROWSER_POCKET_IE );
|
643 |
-
$this->setMobile( true );
|
644 |
-
|
645 |
-
if ( stripos( $this->_agent, 'mspie' ) !== false ) {
|
646 |
-
$this->setVersion( $aresult[1] );
|
647 |
-
} else {
|
648 |
-
$aversion = explode( '/', $this->_agent );
|
649 |
-
$this->setVersion( $aversion[1] );
|
650 |
-
}
|
651 |
-
|
652 |
-
return true;
|
653 |
-
}
|
654 |
-
|
655 |
-
return false;
|
656 |
}
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
if ( preg_match( '/\//', $resultant ) ) {
|
667 |
-
$aresult = explode( '/', $resultant );
|
668 |
-
$aversion = explode( ' ', $aresult[1] );
|
669 |
-
$this->setVersion( $aversion[0] );
|
670 |
-
} else {
|
671 |
-
$aversion = explode( ' ', stristr( $resultant, 'opera mini' ) );
|
672 |
-
$this->setVersion( $aversion[1] );
|
673 |
-
}
|
674 |
-
$this->_browser_name = $this->BROWSER_OPERA_MINI;
|
675 |
-
$this->setMobile( true );
|
676 |
-
|
677 |
-
return true;
|
678 |
-
} else if ( stripos( $this->_agent, 'opera' ) !== false ) {
|
679 |
-
$resultant = stristr( $this->_agent, 'opera' );
|
680 |
-
if ( preg_match( '/Version\/(10.*)$/', $resultant, $matches ) ) {
|
681 |
-
$this->setVersion( $matches[1] );
|
682 |
-
} else if ( preg_match( '/\//', $resultant ) ) {
|
683 |
-
$aresult = explode( '/', str_replace( "(", " ", $resultant ) );
|
684 |
-
$aversion = explode( ' ', $aresult[1] );
|
685 |
-
$this->setVersion( $aversion[0] );
|
686 |
-
} else {
|
687 |
-
$aversion = explode( ' ', stristr( $resultant, 'opera' ) );
|
688 |
-
$this->setVersion( isset( $aversion[1] ) ? $aversion[1] : "" );
|
689 |
-
}
|
690 |
-
$this->_browser_name = $this->BROWSER_OPERA;
|
691 |
-
|
692 |
-
return true;
|
693 |
-
}
|
694 |
-
|
695 |
-
return false;
|
696 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
697 |
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
return false;
|
714 |
}
|
|
|
|
|
|
|
715 |
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
|
|
|
|
733 |
}
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
$
|
743 |
-
$aversion = explode( ' ', $aresult[1] );
|
744 |
-
$this->setVersion( str_replace( array( '(', ')', ';' ), '', $aversion[0] ) );
|
745 |
-
$this->setBrowser( $this->BROWSER_NETPOSITIVE );
|
746 |
-
|
747 |
return true;
|
748 |
}
|
749 |
-
|
750 |
-
return false;
|
751 |
}
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
if ( stripos( $this->_agent, 'galeon' ) !== false ) {
|
760 |
-
$aresult = explode( ' ', stristr( $this->_agent, 'galeon' ) );
|
761 |
-
$aversion = explode( '/', $aresult[0] );
|
762 |
-
$this->setVersion( $aversion[1] );
|
763 |
-
$this->setBrowser( $this->BROWSER_GALEON );
|
764 |
-
|
765 |
-
return true;
|
766 |
}
|
767 |
-
|
768 |
-
return false;
|
769 |
}
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
if ( stripos( $this->_agent, 'Konqueror' ) !== false ) {
|
778 |
-
$aresult = explode( ' ', stristr( $this->_agent, 'Konqueror' ) );
|
779 |
-
$aversion = explode( '/', $aresult[0] );
|
780 |
-
$this->setVersion( $aversion[1] );
|
781 |
-
$this->setBrowser( $this->BROWSER_KONQUEROR );
|
782 |
-
|
783 |
-
return true;
|
784 |
-
}
|
785 |
-
|
786 |
-
return false;
|
787 |
}
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
$this->setVersion(
|
798 |
-
|
799 |
-
|
800 |
-
|
|
|
|
|
801 |
}
|
802 |
-
|
803 |
-
return false;
|
804 |
}
|
|
|
|
|
|
|
805 |
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
}
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
/**
|
825 |
-
* Determine if the browser is Phoenix or not (last updated 1.7)
|
826 |
-
*
|
827 |
-
* @return boolean True if the browser is Phoenix otherwise false
|
828 |
-
*/
|
829 |
-
function checkBrowserPhoenix() {
|
830 |
-
if ( stripos( $this->_agent, 'Phoenix' ) !== false ) {
|
831 |
-
$aversion = explode( '/', stristr( $this->_agent, 'Phoenix' ) );
|
832 |
-
$this->setVersion( $aversion[1] );
|
833 |
-
$this->setBrowser( $this->BROWSER_PHOENIX );
|
834 |
-
|
835 |
-
return true;
|
836 |
}
|
837 |
-
|
838 |
-
return false;
|
839 |
}
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
$
|
851 |
-
|
852 |
-
return true;
|
853 |
}
|
854 |
-
|
855 |
-
|
|
|
856 |
}
|
857 |
-
|
858 |
-
|
859 |
-
* Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
|
860 |
-
* NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
|
861 |
-
*
|
862 |
-
* @return boolean True if the browser is Netscape Navigator 9+ otherwise false
|
863 |
-
*/
|
864 |
-
function checkBrowserNetscapeNavigator9Plus() {
|
865 |
-
if ( stripos( $this->_agent, 'Firefox' ) !== false && preg_match( '/Navigator\/([^ ]*)/i', $this->_agent, $matches ) ) {
|
866 |
-
$this->setVersion( $matches[1] );
|
867 |
-
$this->setBrowser( $this->BROWSER_NETSCAPE_NAVIGATOR );
|
868 |
-
|
869 |
-
return true;
|
870 |
-
} else if ( stripos( $this->_agent, 'Firefox' ) === false && preg_match( '/Netscape6?\/([^ ]*)/i', $this->_agent, $matches ) ) {
|
871 |
-
$this->setVersion( $matches[1] );
|
872 |
-
$this->setBrowser( $this->BROWSER_NETSCAPE_NAVIGATOR );
|
873 |
-
|
874 |
-
return true;
|
875 |
-
}
|
876 |
-
|
877 |
-
return false;
|
878 |
}
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
$this->setVersion(
|
888 |
-
$this->setBrowser( $this->BROWSER_SHIRETOKO );
|
889 |
-
|
890 |
-
return true;
|
891 |
}
|
892 |
-
|
893 |
-
return false;
|
894 |
}
|
895 |
-
|
896 |
-
|
897 |
-
* Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
|
898 |
-
*
|
899 |
-
* @return boolean True if the browser is Ice Cat otherwise false
|
900 |
-
*/
|
901 |
-
function checkBrowserIceCat() {
|
902 |
-
if ( stripos( $this->_agent, 'Mozilla' ) !== false && preg_match( '/IceCat\/([^ ]*)/i', $this->_agent, $matches ) ) {
|
903 |
-
$this->setVersion( $matches[1] );
|
904 |
-
$this->setBrowser( $this->BROWSER_ICECAT );
|
905 |
-
|
906 |
-
return true;
|
907 |
-
}
|
908 |
-
|
909 |
-
return false;
|
910 |
}
|
|
|
|
|
|
|
|
|
|
|
911 |
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
922 |
} else {
|
923 |
-
$this->
|
924 |
}
|
925 |
-
$this->setMobile( true );
|
926 |
-
|
927 |
-
return true;
|
928 |
}
|
929 |
-
|
930 |
-
return false;
|
931 |
}
|
|
|
|
|
|
|
932 |
|
933 |
-
/**
|
934 |
-
* Determine if the browser is Firefox or not (last updated 1.7)
|
935 |
-
*
|
936 |
-
* @return boolean True if the browser is Firefox otherwise false
|
937 |
-
*/
|
938 |
-
function checkBrowserFirefox() {
|
939 |
-
if ( stripos( $this->_agent, 'safari' ) === false ) {
|
940 |
-
if ( preg_match( "/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches ) ) {
|
941 |
-
$this->setVersion( $matches[1] );
|
942 |
-
$this->setBrowser( $this->BROWSER_FIREFOX );
|
943 |
-
|
944 |
-
return true;
|
945 |
-
} else if ( preg_match( "/Firefox$/i", $this->_agent, $matches ) ) {
|
946 |
-
$this->setVersion( "" );
|
947 |
-
$this->setBrowser( $this->BROWSER_FIREFOX );
|
948 |
-
|
949 |
-
return true;
|
950 |
-
}
|
951 |
-
}
|
952 |
|
953 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
954 |
}
|
|
|
|
|
|
|
955 |
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
}
|
970 |
-
|
971 |
-
return false;
|
972 |
}
|
|
|
|
|
|
|
973 |
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
return true;
|
993 |
-
} else if ( stripos( $this->_agent, 'mozilla' ) !== false && preg_match( '/mozilla\/([^ ]*)/i', $this->_agent, $matches ) && stripos( $this->_agent, 'netscape' ) === false ) {
|
994 |
-
$this->setVersion( $matches[1] );
|
995 |
-
$this->setBrowser( $this->BROWSER_MOZILLA );
|
996 |
|
997 |
-
|
998 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
999 |
|
1000 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1001 |
}
|
|
|
|
|
|
|
1002 |
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
|
|
|
|
|
|
|
|
1014 |
|
1015 |
-
|
1016 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1017 |
|
1018 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1019 |
}
|
|
|
|
|
|
|
1020 |
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1032 |
|
1033 |
-
|
1034 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1035 |
|
1036 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1037 |
}
|
|
|
|
|
|
|
|
|
|
|
1038 |
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
|
|
|
|
|
|
1050 |
} else {
|
1051 |
-
$this->
|
1052 |
}
|
1053 |
-
$this->setBrowser( $this->BROWSER_SAFARI );
|
1054 |
-
|
1055 |
-
return true;
|
1056 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1057 |
|
1058 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1059 |
}
|
|
|
|
|
|
|
1060 |
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1077 |
|
1078 |
-
|
1079 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1080 |
|
1081 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1082 |
}
|
|
|
|
|
|
|
1083 |
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1100 |
|
1101 |
-
|
1102 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1103 |
|
1104 |
-
|
1105 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1106 |
|
1107 |
-
|
1108 |
-
|
1109 |
-
|
1110 |
-
|
1111 |
-
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
1115 |
-
|
1116 |
-
|
1117 |
-
|
1118 |
-
|
1119 |
-
|
1120 |
-
|
1121 |
-
|
1122 |
-
$this->setBrowser( $this->BROWSER_IPOD );
|
1123 |
|
1124 |
-
|
1125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1126 |
|
1127 |
-
|
1128 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1129 |
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
|
1147 |
-
|
1148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1149 |
|
1150 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1151 |
}
|
1152 |
-
|
1153 |
-
|
1154 |
-
|
1155 |
-
|
1156 |
-
function checkPlatform() {
|
1157 |
-
if ( stripos( $this->_agent, 'windows' ) !== false ) {
|
1158 |
-
$this->_platform = $this->PLATFORM_WINDOWS;
|
1159 |
-
} elseif ( stripos( $this->_agent, 'iPad' ) !== false ) {
|
1160 |
-
$this->_platform = $this->PLATFORM_IPAD;
|
1161 |
-
} elseif ( stripos( $this->_agent, 'iPod' ) !== false ) {
|
1162 |
-
$this->_platform = $this->PLATFORM_IPOD;
|
1163 |
-
} elseif ( stripos( $this->_agent, 'iPhone' ) !== false ) {
|
1164 |
-
$this->_platform = $this->PLATFORM_IPHONE;
|
1165 |
-
} elseif ( stripos( $this->_agent, 'mac' ) !== false ) {
|
1166 |
-
$this->_platform = $this->PLATFORM_APPLE;
|
1167 |
-
} elseif ( stripos( $this->_agent, 'android' ) !== false ) {
|
1168 |
-
$this->_platform = $this->PLATFORM_ANDROID;
|
1169 |
-
} elseif ( stripos( $this->_agent, 'linux' ) !== false ) {
|
1170 |
-
$this->_platform = $this->PLATFORM_LINUX;
|
1171 |
-
} elseif ( stripos( $this->_agent, 'Nokia' ) !== false ) {
|
1172 |
-
$this->_platform = $this->PLATFORM_NOKIA;
|
1173 |
-
} elseif ( stripos( $this->_agent, 'BlackBerry' ) !== false ) {
|
1174 |
-
$this->_platform = $this->PLATFORM_BLACKBERRY;
|
1175 |
-
} elseif ( stripos( $this->_agent, 'FreeBSD' ) !== false ) {
|
1176 |
-
$this->_platform = $this->PLATFORM_FREEBSD;
|
1177 |
-
} elseif ( stripos( $this->_agent, 'OpenBSD' ) !== false ) {
|
1178 |
-
$this->_platform = $this->PLATFORM_OPENBSD;
|
1179 |
-
} elseif ( stripos( $this->_agent, 'NetBSD' ) !== false ) {
|
1180 |
-
$this->_platform = $this->PLATFORM_NETBSD;
|
1181 |
-
} elseif ( stripos( $this->_agent, 'OpenSolaris' ) !== false ) {
|
1182 |
-
$this->_platform = $this->PLATFORM_OPENSOLARIS;
|
1183 |
-
} elseif ( stripos( $this->_agent, 'SunOS' ) !== false ) {
|
1184 |
-
$this->_platform = $this->PLATFORM_SUNOS;
|
1185 |
-
} elseif ( stripos( $this->_agent, 'OS\/2' ) !== false ) {
|
1186 |
-
$this->_platform = $this->PLATFORM_OS2;
|
1187 |
-
} elseif ( stripos( $this->_agent, 'BeOS' ) !== false ) {
|
1188 |
-
$this->_platform = $this->PLATFORM_BEOS;
|
1189 |
-
} elseif ( stripos( $this->_agent, 'win' ) !== false ) {
|
1190 |
-
$this->_platform = $this->PLATFORM_WINDOWS;
|
1191 |
-
}
|
1192 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1193 |
}
|
1194 |
-
|
|
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
+
/**
|
4 |
+
* File: Browser.php
|
5 |
+
* Author: Chris Schuld (http://chrisschuld.com/)
|
6 |
+
* Last Modified: July 4th, 2014
|
7 |
+
* @version 1.9
|
8 |
+
* @package PegasusPHP
|
9 |
+
*
|
10 |
+
* Copyright (C) 2008-2010 Chris Schuld (chris@chrisschuld.com)
|
11 |
+
*
|
12 |
+
* This program is free software; you can redistribute it and/or
|
13 |
+
* modify it under the terms of the GNU General Public License as
|
14 |
+
* published by the Free Software Foundation; either version 2 of
|
15 |
+
* the License, or (at your option) any later version.
|
16 |
+
*
|
17 |
+
* This program is distributed in the hope that it will be useful,
|
18 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
19 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
20 |
+
* GNU General Public License for more details at:
|
21 |
+
* http://www.gnu.org/copyleft/gpl.html
|
22 |
+
*
|
23 |
+
*
|
24 |
+
* Typical Usage:
|
25 |
+
*
|
26 |
+
* $browser = new Browser();
|
27 |
+
* if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
|
28 |
+
* echo 'You have FireFox version 2 or greater';
|
29 |
+
* }
|
30 |
+
*
|
31 |
+
* User Agents Sampled from: http://www.useragentstring.com/
|
32 |
+
*
|
33 |
+
* This implementation is based on the original work from Gary White
|
34 |
+
* http://apptools.com/phptools/browser/
|
35 |
+
*
|
36 |
+
*/
|
37 |
+
|
38 |
+
class Browser
|
39 |
+
{
|
40 |
+
private $_agent = '';
|
41 |
+
private $_browser_name = '';
|
42 |
+
private $_version = '';
|
43 |
+
private $_platform = '';
|
44 |
+
private $_os = '';
|
45 |
+
private $_is_aol = false;
|
46 |
+
private $_is_mobile = false;
|
47 |
+
private $_is_tablet = false;
|
48 |
+
private $_is_robot = false;
|
49 |
+
private $_is_facebook = false;
|
50 |
+
private $_aol_version = '';
|
51 |
+
|
52 |
+
const BROWSER_UNKNOWN = 'unknown';
|
53 |
+
const VERSION_UNKNOWN = 'unknown';
|
54 |
+
|
55 |
+
const BROWSER_OPERA = 'Opera'; // http://www.opera.com/
|
56 |
+
const BROWSER_OPERA_MINI = 'Opera Mini'; // http://www.opera.com/mini/
|
57 |
+
const BROWSER_WEBTV = 'WebTV'; // http://www.webtv.net/pc/
|
58 |
+
const BROWSER_IE = 'Internet Explorer'; // http://www.microsoft.com/ie/
|
59 |
+
const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
|
60 |
+
const BROWSER_KONQUEROR = 'Konqueror'; // http://www.konqueror.org/
|
61 |
+
const BROWSER_ICAB = 'iCab'; // http://www.icab.de/
|
62 |
+
const BROWSER_OMNIWEB = 'OmniWeb'; // http://www.omnigroup.com/applications/omniweb/
|
63 |
+
const BROWSER_FIREBIRD = 'Firebird'; // http://www.ibphoenix.com/
|
64 |
+
const BROWSER_FIREFOX = 'Firefox'; // http://www.mozilla.com/en-US/firefox/firefox.html
|
65 |
+
const BROWSER_ICEWEASEL = 'Iceweasel'; // http://www.geticeweasel.org/
|
66 |
+
const BROWSER_SHIRETOKO = 'Shiretoko'; // http://wiki.mozilla.org/Projects/shiretoko
|
67 |
+
const BROWSER_MOZILLA = 'Mozilla'; // http://www.mozilla.com/en-US/
|
68 |
+
const BROWSER_AMAYA = 'Amaya'; // http://www.w3.org/Amaya/
|
69 |
+
const BROWSER_LYNX = 'Lynx'; // http://en.wikipedia.org/wiki/Lynx
|
70 |
+
const BROWSER_SAFARI = 'Safari'; // http://apple.com
|
71 |
+
const BROWSER_IPHONE = 'iPhone'; // http://apple.com
|
72 |
+
const BROWSER_IPOD = 'iPod'; // http://apple.com
|
73 |
+
const BROWSER_IPAD = 'iPad'; // http://apple.com
|
74 |
+
const BROWSER_CHROME = 'Chrome'; // http://www.google.com/chrome
|
75 |
+
const BROWSER_ANDROID = 'Android'; // http://www.android.com/
|
76 |
+
const BROWSER_GOOGLEBOT = 'GoogleBot'; // http://en.wikipedia.org/wiki/Googlebot
|
77 |
+
const BROWSER_SLURP = 'Yahoo! Slurp'; // http://en.wikipedia.org/wiki/Yahoo!_Slurp
|
78 |
+
const BROWSER_W3CVALIDATOR = 'W3C Validator'; // http://validator.w3.org/
|
79 |
+
const BROWSER_BLACKBERRY = 'BlackBerry'; // http://www.blackberry.com/
|
80 |
+
const BROWSER_ICECAT = 'IceCat'; // http://en.wikipedia.org/wiki/GNU_IceCat
|
81 |
+
const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // http://en.wikipedia.org/wiki/Web_Browser_for_S60
|
82 |
+
const BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform
|
83 |
+
const BROWSER_MSN = 'MSN Browser'; // http://explorer.msn.com/
|
84 |
+
const BROWSER_MSNBOT = 'MSN Bot'; // http://search.msn.com/msnbot.htm
|
85 |
+
const BROWSER_BINGBOT = 'Bing Bot'; // http://en.wikipedia.org/wiki/Bingbot
|
86 |
+
|
87 |
+
const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // http://browser.netscape.com/ (DEPRECATED)
|
88 |
+
const BROWSER_GALEON = 'Galeon'; // http://galeon.sourceforge.net/ (DEPRECATED)
|
89 |
+
const BROWSER_NETPOSITIVE = 'NetPositive'; // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
|
90 |
+
const BROWSER_PHOENIX = 'Phoenix'; // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)
|
91 |
+
|
92 |
+
const PLATFORM_UNKNOWN = 'unknown';
|
93 |
+
const PLATFORM_WINDOWS = 'Windows';
|
94 |
+
const PLATFORM_WINDOWS_CE = 'Windows CE';
|
95 |
+
const PLATFORM_APPLE = 'Apple';
|
96 |
+
const PLATFORM_LINUX = 'Linux';
|
97 |
+
const PLATFORM_OS2 = 'OS/2';
|
98 |
+
const PLATFORM_BEOS = 'BeOS';
|
99 |
+
const PLATFORM_IPHONE = 'iPhone';
|
100 |
+
const PLATFORM_IPOD = 'iPod';
|
101 |
+
const PLATFORM_IPAD = 'iPad';
|
102 |
+
const PLATFORM_BLACKBERRY = 'BlackBerry';
|
103 |
+
const PLATFORM_NOKIA = 'Nokia';
|
104 |
+
const PLATFORM_FREEBSD = 'FreeBSD';
|
105 |
+
const PLATFORM_OPENBSD = 'OpenBSD';
|
106 |
+
const PLATFORM_NETBSD = 'NetBSD';
|
107 |
+
const PLATFORM_SUNOS = 'SunOS';
|
108 |
+
const PLATFORM_OPENSOLARIS = 'OpenSolaris';
|
109 |
+
const PLATFORM_ANDROID = 'Android';
|
110 |
+
|
111 |
+
const OPERATING_SYSTEM_UNKNOWN = 'unknown';
|
112 |
+
|
113 |
+
public function Browser($userAgent = "")
|
114 |
+
{
|
115 |
+
$this->reset();
|
116 |
+
if ($userAgent != "") {
|
117 |
+
$this->setUserAgent($userAgent);
|
118 |
+
} else {
|
119 |
+
$this->determine();
|
120 |
+
}
|
121 |
+
}
|
122 |
|
123 |
+
/**
|
124 |
+
* Reset all properties
|
125 |
+
*/
|
126 |
+
public function reset()
|
127 |
+
{
|
128 |
+
$this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
|
129 |
+
$this->_browser_name = self::BROWSER_UNKNOWN;
|
130 |
+
$this->_version = self::VERSION_UNKNOWN;
|
131 |
+
$this->_platform = self::PLATFORM_UNKNOWN;
|
132 |
+
$this->_os = self::OPERATING_SYSTEM_UNKNOWN;
|
133 |
+
$this->_is_aol = false;
|
134 |
+
$this->_is_mobile = false;
|
135 |
+
$this->_is_tablet = false;
|
136 |
+
$this->_is_robot = false;
|
137 |
+
$this->_is_facebook = false;
|
138 |
+
$this->_aol_version = self::VERSION_UNKNOWN;
|
139 |
+
}
|
140 |
|
141 |
+
/**
|
142 |
+
* Check to see if the specific browser is valid
|
143 |
+
* @param string $browserName
|
144 |
+
* @return bool True if the browser is the specified browser
|
145 |
+
*/
|
146 |
+
function isBrowser($browserName)
|
147 |
+
{
|
148 |
+
return (0 == strcasecmp($this->_browser_name, trim($browserName)));
|
149 |
+
}
|
150 |
|
151 |
+
/**
|
152 |
+
* The name of the browser. All return types are from the class contants
|
153 |
+
* @return string Name of the browser
|
154 |
+
*/
|
155 |
+
public function getBrowser()
|
156 |
+
{
|
157 |
+
return $this->_browser_name;
|
158 |
+
}
|
159 |
|
160 |
+
/**
|
161 |
+
* Set the name of the browser
|
162 |
+
* @param $browser string The name of the Browser
|
163 |
+
*/
|
164 |
+
public function setBrowser($browser)
|
165 |
+
{
|
166 |
+
$this->_browser_name = $browser;
|
167 |
+
}
|
168 |
|
169 |
+
/**
|
170 |
+
* The name of the platform. All return types are from the class contants
|
171 |
+
* @return string Name of the browser
|
172 |
+
*/
|
173 |
+
public function getPlatform()
|
174 |
+
{
|
175 |
+
return $this->_platform;
|
176 |
+
}
|
177 |
|
178 |
+
/**
|
179 |
+
* Set the name of the platform
|
180 |
+
* @param string $platform The name of the Platform
|
181 |
+
*/
|
182 |
+
public function setPlatform($platform)
|
183 |
+
{
|
184 |
+
$this->_platform = $platform;
|
185 |
+
}
|
186 |
|
187 |
+
/**
|
188 |
+
* The version of the browser.
|
189 |
+
* @return string Version of the browser (will only contain alpha-numeric characters and a period)
|
190 |
+
*/
|
191 |
+
public function getVersion()
|
192 |
+
{
|
193 |
+
return $this->_version;
|
194 |
+
}
|
195 |
|
196 |
+
/**
|
197 |
+
* Set the version of the browser
|
198 |
+
* @param string $version The version of the Browser
|
199 |
+
*/
|
200 |
+
public function setVersion($version)
|
201 |
+
{
|
202 |
+
$this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/', '', $version);
|
203 |
+
}
|
204 |
|
205 |
+
/**
|
206 |
+
* The version of AOL.
|
207 |
+
* @return string Version of AOL (will only contain alpha-numeric characters and a period)
|
208 |
+
*/
|
209 |
+
public function getAolVersion()
|
210 |
+
{
|
211 |
+
return $this->_aol_version;
|
212 |
+
}
|
213 |
|
214 |
+
/**
|
215 |
+
* Set the version of AOL
|
216 |
+
* @param string $version The version of AOL
|
217 |
+
*/
|
218 |
+
public function setAolVersion($version)
|
219 |
+
{
|
220 |
+
$this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/', '', $version);
|
221 |
+
}
|
222 |
|
223 |
+
/**
|
224 |
+
* Is the browser from AOL?
|
225 |
+
* @return boolean True if the browser is from AOL otherwise false
|
226 |
+
*/
|
227 |
+
public function isAol()
|
228 |
+
{
|
229 |
+
return $this->_is_aol;
|
230 |
+
}
|
231 |
|
232 |
+
/**
|
233 |
+
* Is the browser from a mobile device?
|
234 |
+
* @return boolean True if the browser is from a mobile device otherwise false
|
235 |
+
*/
|
236 |
+
public function isMobile()
|
237 |
+
{
|
238 |
+
return $this->_is_mobile;
|
239 |
+
}
|
240 |
|
241 |
+
/**
|
242 |
+
* Is the browser from a tablet device?
|
243 |
+
* @return boolean True if the browser is from a tablet device otherwise false
|
244 |
+
*/
|
245 |
+
public function isTablet()
|
246 |
+
{
|
247 |
+
return $this->_is_tablet;
|
248 |
+
}
|
249 |
|
250 |
+
/**
|
251 |
+
* Is the browser from a robot (ex Slurp,GoogleBot)?
|
252 |
+
* @return boolean True if the browser is from a robot otherwise false
|
253 |
+
*/
|
254 |
+
public function isRobot()
|
255 |
+
{
|
256 |
+
return $this->_is_robot;
|
257 |
+
}
|
|
|
|
|
258 |
|
259 |
+
/**
|
260 |
+
* Is the browser from facebook?
|
261 |
+
* @return boolean True if the browser is from facebook otherwise false
|
262 |
+
*/
|
263 |
+
public function isFacebook()
|
264 |
+
{
|
265 |
+
return $this->_is_facebook;
|
266 |
+
}
|
|
|
267 |
|
268 |
+
/**
|
269 |
+
* Set the browser to be from AOL
|
270 |
+
* @param $isAol
|
271 |
+
*/
|
272 |
+
public function setAol($isAol)
|
273 |
+
{
|
274 |
+
$this->_is_aol = $isAol;
|
275 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
276 |
|
277 |
+
/**
|
278 |
+
* Set the Browser to be mobile
|
279 |
+
* @param boolean $value is the browser a mobile browser or not
|
280 |
+
*/
|
281 |
+
protected function setMobile($value = true)
|
282 |
+
{
|
283 |
+
$this->_is_mobile = $value;
|
284 |
+
}
|
285 |
|
286 |
+
/**
|
287 |
+
* Set the Browser to be tablet
|
288 |
+
* @param boolean $value is the browser a tablet browser or not
|
289 |
+
*/
|
290 |
+
protected function setTablet($value = true)
|
291 |
+
{
|
292 |
+
$this->_is_tablet = $value;
|
293 |
+
}
|
294 |
|
295 |
+
/**
|
296 |
+
* Set the Browser to be a robot
|
297 |
+
* @param boolean $value is the browser a robot or not
|
298 |
+
*/
|
299 |
+
protected function setRobot($value = true)
|
300 |
+
{
|
301 |
+
$this->_is_robot = $value;
|
302 |
+
}
|
303 |
|
304 |
+
/**
|
305 |
+
* Set the Browser to be a Facebook request
|
306 |
+
* @param boolean $value is the browser a robot or not
|
307 |
+
*/
|
308 |
+
protected function setFacebook($value = true)
|
309 |
+
{
|
310 |
+
$this->_is_facebook = $value;
|
311 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
312 |
|
313 |
+
/**
|
314 |
+
* Get the user agent value in use to determine the browser
|
315 |
+
* @return string The user agent from the HTTP header
|
316 |
+
*/
|
317 |
+
public function getUserAgent()
|
318 |
+
{
|
319 |
+
return $this->_agent;
|
320 |
+
}
|
|
|
|
|
|
|
|
|
321 |
|
322 |
+
/**
|
323 |
+
* Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
|
324 |
+
* @param string $agent_string The value for the User Agent
|
325 |
+
*/
|
326 |
+
public function setUserAgent($agent_string)
|
327 |
+
{
|
328 |
+
$this->reset();
|
329 |
+
$this->_agent = $agent_string;
|
330 |
+
$this->determine();
|
331 |
+
}
|
332 |
|
333 |
+
/**
|
334 |
+
* Used to determine if the browser is actually "chromeframe"
|
335 |
+
* @since 1.7
|
336 |
+
* @return boolean True if the browser is using chromeframe
|
337 |
+
*/
|
338 |
+
public function isChromeFrame()
|
339 |
+
{
|
340 |
+
return (strpos($this->_agent, "chromeframe") !== false);
|
341 |
+
}
|
342 |
|
343 |
+
/**
|
344 |
+
* Returns a formatted string with a summary of the details of the browser.
|
345 |
+
* @return string formatted string with a summary of the browser
|
346 |
+
*/
|
347 |
+
public function __toString()
|
348 |
+
{
|
349 |
+
return "<strong>Browser Name:</strong> {$this->getBrowser()}<br/>\n" .
|
350 |
+
"<strong>Browser Version:</strong> {$this->getVersion()}<br/>\n" .
|
351 |
+
"<strong>Browser User Agent String:</strong> {$this->getUserAgent()}<br/>\n" .
|
352 |
+
"<strong>Platform:</strong> {$this->getPlatform()}<br/>";
|
353 |
+
}
|
354 |
|
355 |
+
/**
|
356 |
+
* Protected routine to calculate and determine what the browser is in use (including platform)
|
357 |
+
*/
|
358 |
+
protected function determine()
|
359 |
+
{
|
360 |
+
$this->checkPlatform();
|
361 |
+
$this->checkBrowsers();
|
362 |
+
$this->checkForAol();
|
363 |
+
}
|
364 |
|
365 |
+
/**
|
366 |
+
* Protected routine to determine the browser type
|
367 |
+
* @return boolean True if the browser was detected otherwise false
|
368 |
+
*/
|
369 |
+
protected function checkBrowsers()
|
370 |
+
{
|
371 |
+
return (
|
372 |
+
// well-known, well-used
|
373 |
+
// Special Notes:
|
374 |
+
// (1) Opera must be checked before FireFox due to the odd
|
375 |
+
// user agents used in some older versions of Opera
|
376 |
+
// (2) WebTV is strapped onto Internet Explorer so we must
|
377 |
+
// check for WebTV before IE
|
378 |
+
// (3) (deprecated) Galeon is based on Firefox and needs to be
|
379 |
+
// tested before Firefox is tested
|
380 |
+
// (4) OmniWeb is based on Safari so OmniWeb check must occur
|
381 |
+
// before Safari
|
382 |
+
// (5) Netscape 9+ is based on Firefox so Netscape checks
|
383 |
+
// before FireFox are necessary
|
384 |
+
$this->checkBrowserWebTv() ||
|
385 |
+
$this->checkBrowserInternetExplorer() ||
|
386 |
+
$this->checkBrowserOpera() ||
|
387 |
+
$this->checkBrowserGaleon() ||
|
388 |
+
$this->checkBrowserNetscapeNavigator9Plus() ||
|
389 |
+
$this->checkBrowserFirefox() ||
|
390 |
+
$this->checkBrowserChrome() ||
|
391 |
+
$this->checkBrowserOmniWeb() ||
|
392 |
+
|
393 |
+
// common mobile
|
394 |
+
$this->checkBrowserAndroid() ||
|
395 |
+
$this->checkBrowseriPad() ||
|
396 |
+
$this->checkBrowseriPod() ||
|
397 |
+
$this->checkBrowseriPhone() ||
|
398 |
+
$this->checkBrowserBlackBerry() ||
|
399 |
+
$this->checkBrowserNokia() ||
|
400 |
+
|
401 |
+
// common bots
|
402 |
+
$this->checkBrowserGoogleBot() ||
|
403 |
+
$this->checkBrowserMSNBot() ||
|
404 |
+
$this->checkBrowserBingBot() ||
|
405 |
+
$this->checkBrowserSlurp() ||
|
406 |
+
|
407 |
+
// check for facebook external hit when loading URL
|
408 |
+
$this->checkFacebookExternalHit() ||
|
409 |
+
|
410 |
+
// WebKit base check (post mobile and others)
|
411 |
+
$this->checkBrowserSafari() ||
|
412 |
+
|
413 |
+
// everyone else
|
414 |
+
$this->checkBrowserNetPositive() ||
|
415 |
+
$this->checkBrowserFirebird() ||
|
416 |
+
$this->checkBrowserKonqueror() ||
|
417 |
+
$this->checkBrowserIcab() ||
|
418 |
+
$this->checkBrowserPhoenix() ||
|
419 |
+
$this->checkBrowserAmaya() ||
|
420 |
+
$this->checkBrowserLynx() ||
|
421 |
+
$this->checkBrowserShiretoko() ||
|
422 |
+
$this->checkBrowserIceCat() ||
|
423 |
+
$this->checkBrowserIceweasel() ||
|
424 |
+
$this->checkBrowserW3CValidator() ||
|
425 |
+
$this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
|
426 |
+
);
|
427 |
+
}
|
428 |
|
429 |
+
/**
|
430 |
+
* Determine if the user is using a BlackBerry (last updated 1.7)
|
431 |
+
* @return boolean True if the browser is the BlackBerry browser otherwise false
|
432 |
+
*/
|
433 |
+
protected function checkBrowserBlackBerry()
|
434 |
+
{
|
435 |
+
if (stripos($this->_agent, 'blackberry') !== false) {
|
436 |
+
$aresult = explode("/", stristr($this->_agent, "BlackBerry"));
|
437 |
+
if (isset($aresult[1])) {
|
438 |
+
$aversion = explode(' ', $aresult[1]);
|
439 |
+
$this->setVersion($aversion[0]);
|
440 |
+
$this->_browser_name = self::BROWSER_BLACKBERRY;
|
441 |
+
$this->setMobile(true);
|
442 |
+
return true;
|
443 |
}
|
444 |
+
}
|
445 |
+
return false;
|
446 |
+
}
|
447 |
|
448 |
+
/**
|
449 |
+
* Determine if the user is using an AOL User Agent (last updated 1.7)
|
450 |
+
* @return boolean True if the browser is from AOL otherwise false
|
451 |
+
*/
|
452 |
+
protected function checkForAol()
|
453 |
+
{
|
454 |
+
$this->setAol(false);
|
455 |
+
$this->setAolVersion(self::VERSION_UNKNOWN);
|
456 |
+
|
457 |
+
if (stripos($this->_agent, 'aol') !== false) {
|
458 |
+
$aversion = explode(' ', stristr($this->_agent, 'AOL'));
|
459 |
+
if (isset($aversion[1])) {
|
460 |
+
$this->setAol(true);
|
461 |
+
$this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));
|
462 |
+
return true;
|
|
|
|
|
463 |
}
|
464 |
+
}
|
465 |
+
return false;
|
466 |
+
}
|
467 |
|
468 |
+
/**
|
469 |
+
* Determine if the browser is the GoogleBot or not (last updated 1.7)
|
470 |
+
* @return boolean True if the browser is the GoogletBot otherwise false
|
471 |
+
*/
|
472 |
+
protected function checkBrowserGoogleBot()
|
473 |
+
{
|
474 |
+
if (stripos($this->_agent, 'googlebot') !== false) {
|
475 |
+
$aresult = explode('/', stristr($this->_agent, 'googlebot'));
|
476 |
+
if (isset($aresult[1])) {
|
477 |
+
$aversion = explode(' ', $aresult[1]);
|
478 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
479 |
+
$this->_browser_name = self::BROWSER_GOOGLEBOT;
|
480 |
+
$this->setRobot(true);
|
481 |
+
return true;
|
|
|
|
|
|
|
482 |
}
|
483 |
+
}
|
484 |
+
return false;
|
485 |
+
}
|
486 |
|
487 |
+
/**
|
488 |
+
* Determine if the browser is the MSNBot or not (last updated 1.9)
|
489 |
+
* @return boolean True if the browser is the MSNBot otherwise false
|
490 |
+
*/
|
491 |
+
protected function checkBrowserMSNBot()
|
492 |
+
{
|
493 |
+
if (stripos($this->_agent, "msnbot") !== false) {
|
494 |
+
$aresult = explode("/", stristr($this->_agent, "msnbot"));
|
495 |
+
if (isset($aresult[1])) {
|
496 |
+
$aversion = explode(" ", $aresult[1]);
|
497 |
+
$this->setVersion(str_replace(";", "", $aversion[0]));
|
498 |
+
$this->_browser_name = self::BROWSER_MSNBOT;
|
499 |
+
$this->setRobot(true);
|
500 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
501 |
}
|
502 |
+
}
|
503 |
+
return false;
|
504 |
+
}
|
505 |
+
|
506 |
+
/**
|
507 |
+
* Determine if the browser is the BingBot or not (last updated 1.9)
|
508 |
+
* @return boolean True if the browser is the BingBot otherwise false
|
509 |
+
*/
|
510 |
+
protected function checkBrowserBingBot()
|
511 |
+
{
|
512 |
+
if (stripos($this->_agent, "bingbot") !== false) {
|
513 |
+
$aresult = explode("/", stristr($this->_agent, "bingbot"));
|
514 |
+
if (isset($aresult[1])) {
|
515 |
+
$aversion = explode(" ", $aresult[1]);
|
516 |
+
$this->setVersion(str_replace(";", "", $aversion[0]));
|
517 |
+
$this->_browser_name = self::BROWSER_BINGBOT;
|
518 |
+
$this->setRobot(true);
|
519 |
+
return true;
|
|
|
520 |
}
|
521 |
+
}
|
522 |
+
return false;
|
523 |
+
}
|
524 |
|
525 |
+
/**
|
526 |
+
* Determine if the browser is the W3C Validator or not (last updated 1.7)
|
527 |
+
* @return boolean True if the browser is the W3C Validator otherwise false
|
528 |
+
*/
|
529 |
+
protected function checkBrowserW3CValidator()
|
530 |
+
{
|
531 |
+
if (stripos($this->_agent, 'W3C-checklink') !== false) {
|
532 |
+
$aresult = explode('/', stristr($this->_agent, 'W3C-checklink'));
|
533 |
+
if (isset($aresult[1])) {
|
534 |
+
$aversion = explode(' ', $aresult[1]);
|
535 |
+
$this->setVersion($aversion[0]);
|
536 |
+
$this->_browser_name = self::BROWSER_W3CVALIDATOR;
|
537 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
538 |
}
|
539 |
+
} else if (stripos($this->_agent, 'W3C_Validator') !== false) {
|
540 |
+
// Some of the Validator versions do not delineate w/ a slash - add it back in
|
541 |
+
$ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);
|
542 |
+
$aresult = explode('/', stristr($ua, 'W3C_Validator'));
|
543 |
+
if (isset($aresult[1])) {
|
544 |
+
$aversion = explode(' ', $aresult[1]);
|
545 |
+
$this->setVersion($aversion[0]);
|
546 |
+
$this->_browser_name = self::BROWSER_W3CVALIDATOR;
|
547 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
548 |
}
|
549 |
+
} else if (stripos($this->_agent, 'W3C-mobileOK') !== false) {
|
550 |
+
$this->_browser_name = self::BROWSER_W3CVALIDATOR;
|
551 |
+
$this->setMobile(true);
|
552 |
+
return true;
|
553 |
+
}
|
554 |
+
return false;
|
555 |
+
}
|
556 |
|
557 |
+
/**
|
558 |
+
* Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)
|
559 |
+
* @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false
|
560 |
+
*/
|
561 |
+
protected function checkBrowserSlurp()
|
562 |
+
{
|
563 |
+
if (stripos($this->_agent, 'slurp') !== false) {
|
564 |
+
$aresult = explode('/', stristr($this->_agent, 'Slurp'));
|
565 |
+
if (isset($aresult[1])) {
|
566 |
+
$aversion = explode(' ', $aresult[1]);
|
567 |
+
$this->setVersion($aversion[0]);
|
568 |
+
$this->_browser_name = self::BROWSER_SLURP;
|
569 |
+
$this->setRobot(true);
|
570 |
+
$this->setMobile(false);
|
571 |
+
return true;
|
|
|
572 |
}
|
573 |
+
}
|
574 |
+
return false;
|
575 |
+
}
|
576 |
|
577 |
+
/**
|
578 |
+
* Determine if the browser is Internet Explorer or not (last updated 1.7)
|
579 |
+
* @return boolean True if the browser is Internet Explorer otherwise false
|
580 |
+
*/
|
581 |
+
protected function checkBrowserInternetExplorer()
|
582 |
+
{
|
583 |
+
// Test for IE11
|
584 |
+
if( stripos($this->_agent,'Trident/7.0; rv:11.0') !== false ) {
|
585 |
+
$this->setBrowser(self::BROWSER_IE);
|
586 |
+
$this->setVersion('11.0');
|
587 |
+
return true;
|
588 |
+
}
|
589 |
+
// Test for v1 - v1.5 IE
|
590 |
+
else if (stripos($this->_agent, 'microsoft internet explorer') !== false) {
|
591 |
+
$this->setBrowser(self::BROWSER_IE);
|
592 |
+
$this->setVersion('1.0');
|
593 |
+
$aresult = stristr($this->_agent, '/');
|
594 |
+
if (preg_match('/308|425|426|474|0b1/i', $aresult)) {
|
595 |
+
$this->setVersion('1.5');
|
596 |
}
|
597 |
+
return true;
|
598 |
+
} // Test for versions > 1.5
|
599 |
+
else if (stripos($this->_agent, 'msie') !== false && stripos($this->_agent, 'opera') === false) {
|
600 |
+
// See if the browser is the odd MSN Explorer
|
601 |
+
if (stripos($this->_agent, 'msnb') !== false) {
|
602 |
+
$aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'MSN'));
|
603 |
+
if (isset($aresult[1])) {
|
604 |
+
$this->setBrowser(self::BROWSER_MSN);
|
605 |
+
$this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
|
|
|
|
|
|
|
|
|
606 |
return true;
|
607 |
}
|
|
|
|
|
608 |
}
|
609 |
+
$aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'msie'));
|
610 |
+
if (isset($aresult[1])) {
|
611 |
+
$this->setBrowser(self::BROWSER_IE);
|
612 |
+
$this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
|
613 |
+
if(stripos($this->_agent, 'IEMobile') !== false) {
|
614 |
+
$this->setBrowser(self::BROWSER_POCKET_IE);
|
615 |
+
$this->setMobile(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
616 |
}
|
617 |
+
return true;
|
|
|
618 |
}
|
619 |
+
} // Test for versions > IE 10
|
620 |
+
else if(stripos($this->_agent, 'trident') !== false) {
|
621 |
+
$this->setBrowser(self::BROWSER_IE);
|
622 |
+
$result = explode('rv:', $this->_agent);
|
623 |
+
if (isset($result[1])) {
|
624 |
+
$this->setVersion(preg_replace('/[^0-9.]+/', '', $result[1]));
|
625 |
+
$this->_agent = str_replace(array("Mozilla", "Gecko"), "MSIE", $this->_agent);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
626 |
}
|
627 |
+
} // Test for Pocket IE
|
628 |
+
else if (stripos($this->_agent, 'mspie') !== false || stripos($this->_agent, 'pocket') !== false) {
|
629 |
+
$aresult = explode(' ', stristr($this->_agent, 'mspie'));
|
630 |
+
if (isset($aresult[1])) {
|
631 |
+
$this->setPlatform(self::PLATFORM_WINDOWS_CE);
|
632 |
+
$this->setBrowser(self::BROWSER_POCKET_IE);
|
633 |
+
$this->setMobile(true);
|
634 |
+
|
635 |
+
if (stripos($this->_agent, 'mspie') !== false) {
|
636 |
+
$this->setVersion($aresult[1]);
|
637 |
+
} else {
|
638 |
+
$aversion = explode('/', $this->_agent);
|
639 |
+
if (isset($aversion[1])) {
|
640 |
+
$this->setVersion($aversion[1]);
|
641 |
+
}
|
642 |
}
|
643 |
+
return true;
|
|
|
644 |
}
|
645 |
+
}
|
646 |
+
return false;
|
647 |
+
}
|
648 |
|
649 |
+
/**
|
650 |
+
* Determine if the browser is Opera or not (last updated 1.7)
|
651 |
+
* @return boolean True if the browser is Opera otherwise false
|
652 |
+
*/
|
653 |
+
protected function checkBrowserOpera()
|
654 |
+
{
|
655 |
+
if (stripos($this->_agent, 'opera mini') !== false) {
|
656 |
+
$resultant = stristr($this->_agent, 'opera mini');
|
657 |
+
if (preg_match('/\//', $resultant)) {
|
658 |
+
$aresult = explode('/', $resultant);
|
659 |
+
if (isset($aresult[1])) {
|
660 |
+
$aversion = explode(' ', $aresult[1]);
|
661 |
+
$this->setVersion($aversion[0]);
|
662 |
}
|
663 |
+
} else {
|
664 |
+
$aversion = explode(' ', stristr($resultant, 'opera mini'));
|
665 |
+
if (isset($aversion[1])) {
|
666 |
+
$this->setVersion($aversion[1]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
667 |
}
|
|
|
|
|
668 |
}
|
669 |
+
$this->_browser_name = self::BROWSER_OPERA_MINI;
|
670 |
+
$this->setMobile(true);
|
671 |
+
return true;
|
672 |
+
} else if (stripos($this->_agent, 'opera') !== false) {
|
673 |
+
$resultant = stristr($this->_agent, 'opera');
|
674 |
+
if (preg_match('/Version\/(1*.*)$/', $resultant, $matches)) {
|
675 |
+
$this->setVersion($matches[1]);
|
676 |
+
} else if (preg_match('/\//', $resultant)) {
|
677 |
+
$aresult = explode('/', str_replace("(", " ", $resultant));
|
678 |
+
if (isset($aresult[1])) {
|
679 |
+
$aversion = explode(' ', $aresult[1]);
|
680 |
+
$this->setVersion($aversion[0]);
|
|
|
681 |
}
|
682 |
+
} else {
|
683 |
+
$aversion = explode(' ', stristr($resultant, 'opera'));
|
684 |
+
$this->setVersion(isset($aversion[1]) ? $aversion[1] : "");
|
685 |
}
|
686 |
+
if (stripos($this->_agent, 'Opera Mobi') !== false) {
|
687 |
+
$this->setMobile(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
688 |
}
|
689 |
+
$this->_browser_name = self::BROWSER_OPERA;
|
690 |
+
return true;
|
691 |
+
} else if (stripos($this->_agent, 'OPR') !== false) {
|
692 |
+
$resultant = stristr($this->_agent, 'OPR');
|
693 |
+
if (preg_match('/\//', $resultant)) {
|
694 |
+
$aresult = explode('/', str_replace("(", " ", $resultant));
|
695 |
+
if (isset($aresult[1])) {
|
696 |
+
$aversion = explode(' ', $aresult[1]);
|
697 |
+
$this->setVersion($aversion[0]);
|
|
|
|
|
|
|
698 |
}
|
|
|
|
|
699 |
}
|
700 |
+
if (stripos($this->_agent, 'Mobile') !== false) {
|
701 |
+
$this->setMobile(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
702 |
}
|
703 |
+
$this->_browser_name = self::BROWSER_OPERA;
|
704 |
+
return true;
|
705 |
+
}
|
706 |
+
return false;
|
707 |
+
}
|
708 |
|
709 |
+
/**
|
710 |
+
* Determine if the browser is Chrome or not (last updated 1.7)
|
711 |
+
* @return boolean True if the browser is Chrome otherwise false
|
712 |
+
*/
|
713 |
+
protected function checkBrowserChrome()
|
714 |
+
{
|
715 |
+
if (stripos($this->_agent, 'Chrome') !== false) {
|
716 |
+
$aresult = explode('/', stristr($this->_agent, 'Chrome'));
|
717 |
+
if (isset($aresult[1])) {
|
718 |
+
$aversion = explode(' ', $aresult[1]);
|
719 |
+
$this->setVersion($aversion[0]);
|
720 |
+
$this->setBrowser(self::BROWSER_CHROME);
|
721 |
+
//Chrome on Android
|
722 |
+
if (stripos($this->_agent, 'Android') !== false) {
|
723 |
+
if (stripos($this->_agent, 'Mobile') !== false) {
|
724 |
+
$this->setMobile(true);
|
725 |
} else {
|
726 |
+
$this->setTablet(true);
|
727 |
}
|
|
|
|
|
|
|
728 |
}
|
729 |
+
return true;
|
|
|
730 |
}
|
731 |
+
}
|
732 |
+
return false;
|
733 |
+
}
|
734 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
735 |
|
736 |
+
/**
|
737 |
+
* Determine if the browser is WebTv or not (last updated 1.7)
|
738 |
+
* @return boolean True if the browser is WebTv otherwise false
|
739 |
+
*/
|
740 |
+
protected function checkBrowserWebTv()
|
741 |
+
{
|
742 |
+
if (stripos($this->_agent, 'webtv') !== false) {
|
743 |
+
$aresult = explode('/', stristr($this->_agent, 'webtv'));
|
744 |
+
if (isset($aresult[1])) {
|
745 |
+
$aversion = explode(' ', $aresult[1]);
|
746 |
+
$this->setVersion($aversion[0]);
|
747 |
+
$this->setBrowser(self::BROWSER_WEBTV);
|
748 |
+
return true;
|
749 |
}
|
750 |
+
}
|
751 |
+
return false;
|
752 |
+
}
|
753 |
|
754 |
+
/**
|
755 |
+
* Determine if the browser is NetPositive or not (last updated 1.7)
|
756 |
+
* @return boolean True if the browser is NetPositive otherwise false
|
757 |
+
*/
|
758 |
+
protected function checkBrowserNetPositive()
|
759 |
+
{
|
760 |
+
if (stripos($this->_agent, 'NetPositive') !== false) {
|
761 |
+
$aresult = explode('/', stristr($this->_agent, 'NetPositive'));
|
762 |
+
if (isset($aresult[1])) {
|
763 |
+
$aversion = explode(' ', $aresult[1]);
|
764 |
+
$this->setVersion(str_replace(array('(', ')', ';'), '', $aversion[0]));
|
765 |
+
$this->setBrowser(self::BROWSER_NETPOSITIVE);
|
766 |
+
return true;
|
|
|
|
|
|
|
767 |
}
|
768 |
+
}
|
769 |
+
return false;
|
770 |
+
}
|
771 |
|
772 |
+
/**
|
773 |
+
* Determine if the browser is Galeon or not (last updated 1.7)
|
774 |
+
* @return boolean True if the browser is Galeon otherwise false
|
775 |
+
*/
|
776 |
+
protected function checkBrowserGaleon()
|
777 |
+
{
|
778 |
+
if (stripos($this->_agent, 'galeon') !== false) {
|
779 |
+
$aresult = explode(' ', stristr($this->_agent, 'galeon'));
|
780 |
+
$aversion = explode('/', $aresult[0]);
|
781 |
+
if (isset($aversion[1])) {
|
782 |
+
$this->setVersion($aversion[1]);
|
783 |
+
$this->setBrowser(self::BROWSER_GALEON);
|
784 |
+
return true;
|
785 |
+
}
|
786 |
+
}
|
787 |
+
return false;
|
788 |
+
}
|
|
|
|
|
|
|
|
|
|
|
789 |
|
790 |
+
/**
|
791 |
+
* Determine if the browser is Konqueror or not (last updated 1.7)
|
792 |
+
* @return boolean True if the browser is Konqueror otherwise false
|
793 |
+
*/
|
794 |
+
protected function checkBrowserKonqueror()
|
795 |
+
{
|
796 |
+
if (stripos($this->_agent, 'Konqueror') !== false) {
|
797 |
+
$aresult = explode(' ', stristr($this->_agent, 'Konqueror'));
|
798 |
+
$aversion = explode('/', $aresult[0]);
|
799 |
+
if (isset($aversion[1])) {
|
800 |
+
$this->setVersion($aversion[1]);
|
801 |
+
$this->setBrowser(self::BROWSER_KONQUEROR);
|
802 |
+
return true;
|
803 |
+
}
|
804 |
+
}
|
805 |
+
return false;
|
806 |
+
}
|
807 |
|
808 |
+
/**
|
809 |
+
* Determine if the browser is iCab or not (last updated 1.7)
|
810 |
+
* @return boolean True if the browser is iCab otherwise false
|
811 |
+
*/
|
812 |
+
protected function checkBrowserIcab()
|
813 |
+
{
|
814 |
+
if (stripos($this->_agent, 'icab') !== false) {
|
815 |
+
$aversion = explode(' ', stristr(str_replace('/', ' ', $this->_agent), 'icab'));
|
816 |
+
if (isset($aversion[1])) {
|
817 |
+
$this->setVersion($aversion[1]);
|
818 |
+
$this->setBrowser(self::BROWSER_ICAB);
|
819 |
+
return true;
|
820 |
}
|
821 |
+
}
|
822 |
+
return false;
|
823 |
+
}
|
824 |
|
825 |
+
/**
|
826 |
+
* Determine if the browser is OmniWeb or not (last updated 1.7)
|
827 |
+
* @return boolean True if the browser is OmniWeb otherwise false
|
828 |
+
*/
|
829 |
+
protected function checkBrowserOmniWeb()
|
830 |
+
{
|
831 |
+
if (stripos($this->_agent, 'omniweb') !== false) {
|
832 |
+
$aresult = explode('/', stristr($this->_agent, 'omniweb'));
|
833 |
+
$aversion = explode(' ', isset($aresult[1]) ? $aresult[1] : "");
|
834 |
+
$this->setVersion($aversion[0]);
|
835 |
+
$this->setBrowser(self::BROWSER_OMNIWEB);
|
836 |
+
return true;
|
837 |
+
}
|
838 |
+
return false;
|
839 |
+
}
|
840 |
|
841 |
+
/**
|
842 |
+
* Determine if the browser is Phoenix or not (last updated 1.7)
|
843 |
+
* @return boolean True if the browser is Phoenix otherwise false
|
844 |
+
*/
|
845 |
+
protected function checkBrowserPhoenix()
|
846 |
+
{
|
847 |
+
if (stripos($this->_agent, 'Phoenix') !== false) {
|
848 |
+
$aversion = explode('/', stristr($this->_agent, 'Phoenix'));
|
849 |
+
if (isset($aversion[1])) {
|
850 |
+
$this->setVersion($aversion[1]);
|
851 |
+
$this->setBrowser(self::BROWSER_PHOENIX);
|
852 |
+
return true;
|
853 |
+
}
|
854 |
+
}
|
855 |
+
return false;
|
856 |
+
}
|
857 |
|
858 |
+
/**
|
859 |
+
* Determine if the browser is Firebird or not (last updated 1.7)
|
860 |
+
* @return boolean True if the browser is Firebird otherwise false
|
861 |
+
*/
|
862 |
+
protected function checkBrowserFirebird()
|
863 |
+
{
|
864 |
+
if (stripos($this->_agent, 'Firebird') !== false) {
|
865 |
+
$aversion = explode('/', stristr($this->_agent, 'Firebird'));
|
866 |
+
if (isset($aversion[1])) {
|
867 |
+
$this->setVersion($aversion[1]);
|
868 |
+
$this->setBrowser(self::BROWSER_FIREBIRD);
|
869 |
+
return true;
|
870 |
}
|
871 |
+
}
|
872 |
+
return false;
|
873 |
+
}
|
874 |
|
875 |
+
/**
|
876 |
+
* Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
|
877 |
+
* NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
|
878 |
+
* @return boolean True if the browser is Netscape Navigator 9+ otherwise false
|
879 |
+
*/
|
880 |
+
protected function checkBrowserNetscapeNavigator9Plus()
|
881 |
+
{
|
882 |
+
if (stripos($this->_agent, 'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i', $this->_agent, $matches)) {
|
883 |
+
$this->setVersion($matches[1]);
|
884 |
+
$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
|
885 |
+
return true;
|
886 |
+
} else if (stripos($this->_agent, 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $this->_agent, $matches)) {
|
887 |
+
$this->setVersion($matches[1]);
|
888 |
+
$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
|
889 |
+
return true;
|
890 |
+
}
|
891 |
+
return false;
|
892 |
+
}
|
893 |
|
894 |
+
/**
|
895 |
+
* Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)
|
896 |
+
* @return boolean True if the browser is Shiretoko otherwise false
|
897 |
+
*/
|
898 |
+
protected function checkBrowserShiretoko()
|
899 |
+
{
|
900 |
+
if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i', $this->_agent, $matches)) {
|
901 |
+
$this->setVersion($matches[1]);
|
902 |
+
$this->setBrowser(self::BROWSER_SHIRETOKO);
|
903 |
+
return true;
|
904 |
+
}
|
905 |
+
return false;
|
906 |
+
}
|
907 |
+
|
908 |
+
/**
|
909 |
+
* Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
|
910 |
+
* @return boolean True if the browser is Ice Cat otherwise false
|
911 |
+
*/
|
912 |
+
protected function checkBrowserIceCat()
|
913 |
+
{
|
914 |
+
if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i', $this->_agent, $matches)) {
|
915 |
+
$this->setVersion($matches[1]);
|
916 |
+
$this->setBrowser(self::BROWSER_ICECAT);
|
917 |
+
return true;
|
918 |
+
}
|
919 |
+
return false;
|
920 |
+
}
|
921 |
|
922 |
+
/**
|
923 |
+
* Determine if the browser is Nokia or not (last updated 1.7)
|
924 |
+
* @return boolean True if the browser is Nokia otherwise false
|
925 |
+
*/
|
926 |
+
protected function checkBrowserNokia()
|
927 |
+
{
|
928 |
+
if (preg_match("/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches)) {
|
929 |
+
$this->setVersion($matches[2]);
|
930 |
+
if (stripos($this->_agent, 'Series60') !== false || strpos($this->_agent, 'S60') !== false) {
|
931 |
+
$this->setBrowser(self::BROWSER_NOKIA_S60);
|
932 |
+
} else {
|
933 |
+
$this->setBrowser(self::BROWSER_NOKIA);
|
934 |
}
|
935 |
+
$this->setMobile(true);
|
936 |
+
return true;
|
937 |
+
}
|
938 |
+
return false;
|
939 |
+
}
|
940 |
|
941 |
+
/**
|
942 |
+
* Determine if the browser is Firefox or not (last updated 1.7)
|
943 |
+
* @return boolean True if the browser is Firefox otherwise false
|
944 |
+
*/
|
945 |
+
protected function checkBrowserFirefox()
|
946 |
+
{
|
947 |
+
if (stripos($this->_agent, 'safari') === false) {
|
948 |
+
if (preg_match("/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches)) {
|
949 |
+
$this->setVersion($matches[1]);
|
950 |
+
$this->setBrowser(self::BROWSER_FIREFOX);
|
951 |
+
//Firefox on Android
|
952 |
+
if (stripos($this->_agent, 'Android') !== false) {
|
953 |
+
if (stripos($this->_agent, 'Mobile') !== false) {
|
954 |
+
$this->setMobile(true);
|
955 |
} else {
|
956 |
+
$this->setTablet(true);
|
957 |
}
|
|
|
|
|
|
|
958 |
}
|
959 |
+
return true;
|
960 |
+
} else if (preg_match("/Firefox$/i", $this->_agent, $matches)) {
|
961 |
+
$this->setVersion("");
|
962 |
+
$this->setBrowser(self::BROWSER_FIREFOX);
|
963 |
+
return true;
|
964 |
+
}
|
965 |
+
}
|
966 |
+
return false;
|
967 |
+
}
|
968 |
|
969 |
+
/**
|
970 |
+
* Determine if the browser is Firefox or not (last updated 1.7)
|
971 |
+
* @return boolean True if the browser is Firefox otherwise false
|
972 |
+
*/
|
973 |
+
protected function checkBrowserIceweasel()
|
974 |
+
{
|
975 |
+
if (stripos($this->_agent, 'Iceweasel') !== false) {
|
976 |
+
$aresult = explode('/', stristr($this->_agent, 'Iceweasel'));
|
977 |
+
if (isset($aresult[1])) {
|
978 |
+
$aversion = explode(' ', $aresult[1]);
|
979 |
+
$this->setVersion($aversion[0]);
|
980 |
+
$this->setBrowser(self::BROWSER_ICEWEASEL);
|
981 |
+
return true;
|
982 |
}
|
983 |
+
}
|
984 |
+
return false;
|
985 |
+
}
|
986 |
|
987 |
+
/**
|
988 |
+
* Determine if the browser is Mozilla or not (last updated 1.7)
|
989 |
+
* @return boolean True if the browser is Mozilla otherwise false
|
990 |
+
*/
|
991 |
+
protected function checkBrowserMozilla()
|
992 |
+
{
|
993 |
+
if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
|
994 |
+
$aversion = explode(' ', stristr($this->_agent, 'rv:'));
|
995 |
+
preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion);
|
996 |
+
$this->setVersion(str_replace('rv:', '', $aversion[0]));
|
997 |
+
$this->setBrowser(self::BROWSER_MOZILLA);
|
998 |
+
return true;
|
999 |
+
} else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
|
1000 |
+
$aversion = explode('', stristr($this->_agent, 'rv:'));
|
1001 |
+
$this->setVersion(str_replace('rv:', '', $aversion[0]));
|
1002 |
+
$this->setBrowser(self::BROWSER_MOZILLA);
|
1003 |
+
return true;
|
1004 |
+
} else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $this->_agent, $matches) && stripos($this->_agent, 'netscape') === false) {
|
1005 |
+
$this->setVersion($matches[1]);
|
1006 |
+
$this->setBrowser(self::BROWSER_MOZILLA);
|
1007 |
+
return true;
|
1008 |
+
}
|
1009 |
+
return false;
|
1010 |
+
}
|
1011 |
|
1012 |
+
/**
|
1013 |
+
* Determine if the browser is Lynx or not (last updated 1.7)
|
1014 |
+
* @return boolean True if the browser is Lynx otherwise false
|
1015 |
+
*/
|
1016 |
+
protected function checkBrowserLynx()
|
1017 |
+
{
|
1018 |
+
if (stripos($this->_agent, 'lynx') !== false) {
|
1019 |
+
$aresult = explode('/', stristr($this->_agent, 'Lynx'));
|
1020 |
+
$aversion = explode(' ', (isset($aresult[1]) ? $aresult[1] : ""));
|
1021 |
+
$this->setVersion($aversion[0]);
|
1022 |
+
$this->setBrowser(self::BROWSER_LYNX);
|
1023 |
+
return true;
|
1024 |
+
}
|
1025 |
+
return false;
|
1026 |
+
}
|
1027 |
|
1028 |
+
/**
|
1029 |
+
* Determine if the browser is Amaya or not (last updated 1.7)
|
1030 |
+
* @return boolean True if the browser is Amaya otherwise false
|
1031 |
+
*/
|
1032 |
+
protected function checkBrowserAmaya()
|
1033 |
+
{
|
1034 |
+
if (stripos($this->_agent, 'amaya') !== false) {
|
1035 |
+
$aresult = explode('/', stristr($this->_agent, 'Amaya'));
|
1036 |
+
if (isset($aresult[1])) {
|
1037 |
+
$aversion = explode(' ', $aresult[1]);
|
1038 |
+
$this->setVersion($aversion[0]);
|
1039 |
+
$this->setBrowser(self::BROWSER_AMAYA);
|
1040 |
+
return true;
|
1041 |
}
|
1042 |
+
}
|
1043 |
+
return false;
|
1044 |
+
}
|
1045 |
|
1046 |
+
/**
|
1047 |
+
* Determine if the browser is Safari or not (last updated 1.7)
|
1048 |
+
* @return boolean True if the browser is Safari otherwise false
|
1049 |
+
*/
|
1050 |
+
protected function checkBrowserSafari()
|
1051 |
+
{
|
1052 |
+
if (stripos($this->_agent, 'Safari') !== false
|
1053 |
+
&& stripos($this->_agent, 'iPhone') === false
|
1054 |
+
&& stripos($this->_agent, 'iPod') === false) {
|
1055 |
+
|
1056 |
+
$aresult = explode('/', stristr($this->_agent, 'Version'));
|
1057 |
+
if (isset($aresult[1])) {
|
1058 |
+
$aversion = explode(' ', $aresult[1]);
|
1059 |
+
$this->setVersion($aversion[0]);
|
1060 |
+
} else {
|
1061 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1062 |
+
}
|
1063 |
+
$this->setBrowser(self::BROWSER_SAFARI);
|
1064 |
+
return true;
|
1065 |
+
}
|
1066 |
+
return false;
|
1067 |
+
}
|
1068 |
|
1069 |
+
/**
|
1070 |
+
* Detect if URL is loaded from FacebookExternalHit
|
1071 |
+
* @return boolean True if it detects FacebookExternalHit otherwise false
|
1072 |
+
*/
|
1073 |
+
protected function checkFacebookExternalHit()
|
1074 |
+
{
|
1075 |
+
if(stristr($this->_agent,'FacebookExternalHit'))
|
1076 |
+
{
|
1077 |
+
$this->setRobot(true);
|
1078 |
+
$this->setFacebook(true);
|
1079 |
+
return true;
|
1080 |
+
}
|
1081 |
+
return false;
|
1082 |
+
}
|
1083 |
|
1084 |
+
/**
|
1085 |
+
* Detect if URL is being loaded from internal Facebook browser
|
1086 |
+
* @return boolean True if it detects internal Facebook browser otherwise false
|
1087 |
+
*/
|
1088 |
+
protected function checkForFacebookIos()
|
1089 |
+
{
|
1090 |
+
if(stristr($this->_agent,'FBIOS'))
|
1091 |
+
{
|
1092 |
+
$this->setFacebook(true);
|
1093 |
+
return true;
|
1094 |
+
}
|
1095 |
+
return false;
|
1096 |
+
}
|
1097 |
|
1098 |
+
/**
|
1099 |
+
* Detect Version for the Safari browser on iOS devices
|
1100 |
+
* @return boolean True if it detects the version correctly otherwise false
|
1101 |
+
*/
|
1102 |
+
protected function getSafariVersionOnIos()
|
1103 |
+
{
|
1104 |
+
$aresult = explode('/',stristr($this->_agent,'Version'));
|
1105 |
+
if( isset($aresult[1]) )
|
1106 |
+
{
|
1107 |
+
$aversion = explode(' ',$aresult[1]);
|
1108 |
+
$this->setVersion($aversion[0]);
|
1109 |
+
return true;
|
1110 |
+
}
|
1111 |
+
return false;
|
1112 |
+
}
|
|
|
1113 |
|
1114 |
+
/**
|
1115 |
+
* Detect Version for the Chrome browser on iOS devices
|
1116 |
+
* @return boolean True if it detects the version correctly otherwise false
|
1117 |
+
*/
|
1118 |
+
protected function getChromeVersionOnIos()
|
1119 |
+
{
|
1120 |
+
$aresult = explode('/',stristr($this->_agent,'CriOS'));
|
1121 |
+
if( isset($aresult[1]) )
|
1122 |
+
{
|
1123 |
+
$aversion = explode(' ',$aresult[1]);
|
1124 |
+
$this->setVersion($aversion[0]);
|
1125 |
+
$this->setBrowser(self::BROWSER_CHROME);
|
1126 |
+
return true;
|
1127 |
+
}
|
1128 |
+
return false;
|
1129 |
+
}
|
1130 |
|
1131 |
+
/**
|
1132 |
+
* Determine if the browser is iPhone or not (last updated 1.7)
|
1133 |
+
* @return boolean True if the browser is iPhone otherwise false
|
1134 |
+
*/
|
1135 |
+
protected function checkBrowseriPhone() {
|
1136 |
+
if( stripos($this->_agent,'iPhone') !== false ) {
|
1137 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1138 |
+
$this->setBrowser(self::BROWSER_IPHONE);
|
1139 |
+
$this->getSafariVersionOnIos();
|
1140 |
+
$this->getChromeVersionOnIos();
|
1141 |
+
$this->checkForFacebookIos();
|
1142 |
+
$this->setMobile(true);
|
1143 |
+
return true;
|
1144 |
+
}
|
1145 |
+
return false;
|
1146 |
+
}
|
1147 |
|
1148 |
+
/**
|
1149 |
+
* Determine if the browser is iPad or not (last updated 1.7)
|
1150 |
+
* @return boolean True if the browser is iPad otherwise false
|
1151 |
+
*/
|
1152 |
+
protected function checkBrowseriPad() {
|
1153 |
+
if( stripos($this->_agent,'iPad') !== false ) {
|
1154 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1155 |
+
$this->setBrowser(self::BROWSER_IPAD);
|
1156 |
+
$this->getSafariVersionOnIos();
|
1157 |
+
$this->getChromeVersionOnIos();
|
1158 |
+
$this->checkForFacebookIos();
|
1159 |
+
$this->setTablet(true);
|
1160 |
+
return true;
|
1161 |
+
}
|
1162 |
+
return false;
|
1163 |
+
}
|
1164 |
|
1165 |
+
/**
|
1166 |
+
* Determine if the browser is iPod or not (last updated 1.7)
|
1167 |
+
* @return boolean True if the browser is iPod otherwise false
|
1168 |
+
*/
|
1169 |
+
protected function checkBrowseriPod() {
|
1170 |
+
if( stripos($this->_agent,'iPod') !== false ) {
|
1171 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1172 |
+
$this->setBrowser(self::BROWSER_IPOD);
|
1173 |
+
$this->getSafariVersionOnIos();
|
1174 |
+
$this->getChromeVersionOnIos();
|
1175 |
+
$this->checkForFacebookIos();
|
1176 |
+
$this->setMobile(true);
|
1177 |
+
return true;
|
1178 |
+
}
|
1179 |
+
return false;
|
1180 |
+
}
|
1181 |
|
1182 |
+
/**
|
1183 |
+
* Determine if the browser is Android or not (last updated 1.7)
|
1184 |
+
* @return boolean True if the browser is Android otherwise false
|
1185 |
+
*/
|
1186 |
+
protected function checkBrowserAndroid()
|
1187 |
+
{
|
1188 |
+
if (stripos($this->_agent, 'Android') !== false) {
|
1189 |
+
$aresult = explode(' ', stristr($this->_agent, 'Android'));
|
1190 |
+
if (isset($aresult[1])) {
|
1191 |
+
$aversion = explode(' ', $aresult[1]);
|
1192 |
+
$this->setVersion($aversion[0]);
|
1193 |
+
} else {
|
1194 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1195 |
}
|
1196 |
+
if (stripos($this->_agent, 'Mobile') !== false) {
|
1197 |
+
$this->setMobile(true);
|
1198 |
+
} else {
|
1199 |
+
$this->setTablet(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1200 |
}
|
1201 |
+
$this->setBrowser(self::BROWSER_ANDROID);
|
1202 |
+
return true;
|
1203 |
+
}
|
1204 |
+
return false;
|
1205 |
+
}
|
1206 |
+
|
1207 |
+
/**
|
1208 |
+
* Determine the user's platform (last updated 1.7)
|
1209 |
+
*/
|
1210 |
+
protected function checkPlatform()
|
1211 |
+
{
|
1212 |
+
if (stripos($this->_agent, 'windows') !== false)
|
1213 |
+
{
|
1214 |
+
$this->_platform = self::PLATFORM_WINDOWS;
|
1215 |
+
}
|
1216 |
+
else if (stripos($this->_agent, 'iPad') !== false)
|
1217 |
+
{
|
1218 |
+
$this->_platform = self::PLATFORM_IPAD;
|
1219 |
+
}
|
1220 |
+
else if (stripos($this->_agent, 'iPod') !== false)
|
1221 |
+
{
|
1222 |
+
$this->_platform = self::PLATFORM_IPOD;
|
1223 |
+
}
|
1224 |
+
else if (stripos($this->_agent, 'iPhone') !== false)
|
1225 |
+
{
|
1226 |
+
$this->_platform = self::PLATFORM_IPHONE;
|
1227 |
+
}
|
1228 |
+
elseif (stripos($this->_agent, 'mac') !== false)
|
1229 |
+
{
|
1230 |
+
$this->_platform = self::PLATFORM_APPLE;
|
1231 |
+
}
|
1232 |
+
elseif (stripos($this->_agent, 'android') !== false)
|
1233 |
+
{
|
1234 |
+
$this->_platform = self::PLATFORM_ANDROID;
|
1235 |
+
}
|
1236 |
+
elseif (stripos($this->_agent, 'linux') !== false)
|
1237 |
+
{
|
1238 |
+
$this->_platform = self::PLATFORM_LINUX;
|
1239 |
+
}
|
1240 |
+
else if (stripos($this->_agent, 'Nokia') !== false)
|
1241 |
+
{
|
1242 |
+
$this->_platform = self::PLATFORM_NOKIA;
|
1243 |
+
}
|
1244 |
+
else if (stripos($this->_agent, 'BlackBerry') !== false)
|
1245 |
+
{
|
1246 |
+
$this->_platform = self::PLATFORM_BLACKBERRY;
|
1247 |
+
}
|
1248 |
+
elseif (stripos($this->_agent, 'FreeBSD') !== false)
|
1249 |
+
{
|
1250 |
+
$this->_platform = self::PLATFORM_FREEBSD;
|
1251 |
+
}
|
1252 |
+
elseif (stripos($this->_agent, 'OpenBSD') !== false)
|
1253 |
+
{
|
1254 |
+
$this->_platform = self::PLATFORM_OPENBSD;
|
1255 |
+
}
|
1256 |
+
elseif (stripos($this->_agent, 'NetBSD') !== false)
|
1257 |
+
{
|
1258 |
+
$this->_platform = self::PLATFORM_NETBSD;
|
1259 |
+
}
|
1260 |
+
elseif (stripos($this->_agent, 'OpenSolaris') !== false)
|
1261 |
+
{
|
1262 |
+
$this->_platform = self::PLATFORM_OPENSOLARIS;
|
1263 |
+
}
|
1264 |
+
elseif (stripos($this->_agent, 'SunOS') !== false)
|
1265 |
+
{
|
1266 |
+
$this->_platform = self::PLATFORM_SUNOS;
|
1267 |
+
}
|
1268 |
+
elseif (stripos($this->_agent, 'OS\/2') !== false)
|
1269 |
+
{
|
1270 |
+
$this->_platform = self::PLATFORM_OS2;
|
1271 |
+
}
|
1272 |
+
elseif (stripos($this->_agent, 'BeOS') !== false)
|
1273 |
+
{
|
1274 |
+
$this->_platform = self::PLATFORM_BEOS;
|
1275 |
+
}
|
1276 |
+
elseif (stripos($this->_agent, 'win') !== false)
|
1277 |
+
{
|
1278 |
+
$this->_platform = self::PLATFORM_WINDOWS;
|
1279 |
}
|
1280 |
+
|
1281 |
+
}
|
1282 |
+
}
|
ReduxCore/inc/class.redux_admin_notices.php
CHANGED
@@ -53,7 +53,7 @@
|
|
53 |
|
54 |
$add_style = '';
|
55 |
if ( strpos( $notice['type'], 'redux-message' ) != false ) {
|
56 |
-
$add_style = 'style="border-left: 4px solid ' . esc_attr($notice['color']) . '!important;"';
|
57 |
}
|
58 |
|
59 |
if ( true == $notice['dismiss'] ) {
|
@@ -78,36 +78,36 @@
|
|
78 |
$pageName = empty( $_GET['page'] ) ? '&page=' . self::$_parent->args['page_slug'] : '&page=' . $_GET['page'];
|
79 |
|
80 |
// Ditto for the current tab.
|
81 |
-
$curTab = empty( $_GET['tab'] ) ? '&tab=0' : '&tab=' . $_GET['tab'];
|
82 |
}
|
83 |
|
84 |
global $wp_version;
|
85 |
// Print the notice with the dismiss link
|
86 |
if ( version_compare( $wp_version, '4.2', '>' ) ) {
|
87 |
$output = "";
|
88 |
-
$css_id = esc_attr($notice['id']) . $pageName . $curTab;
|
89 |
-
$css_class = esc_attr($notice['type']) . 'redux-notice notice is-dismissible redux-notice';
|
90 |
$output .= "<div {$add_style} id='$css_id' class='$css_class'> \n";
|
91 |
-
$nonce = wp_create_nonce( $notice['id'] . $
|
92 |
-
$output .= "<input type='hidden' class='dismiss_data' id='" . esc_attr($notice['id']) . $pageName . $curTab . "' value='{$nonce}'> \n";
|
93 |
-
$output .= '<p>' . wp_kses_post($notice['msg']) . '</p>';
|
94 |
$output .= "</div> \n";
|
95 |
echo $output;
|
96 |
} else {
|
97 |
-
echo '<div ' . $add_style . ' class="' . esc_attr($notice['type']) . ' notice is-dismissable"><p>' . wp_kses_post($notice['msg']) . ' <a href="?dismiss=true&id=' . esc_attr($notice['id']) . $pageName . $curTab . '">' . esc_html__( 'Dismiss', 'redux-framework' ) . '</a>.</p></div>';
|
98 |
}
|
99 |
}
|
100 |
} else {
|
101 |
// Standard notice
|
102 |
-
echo '<div ' . $add_style . ' class="' . esc_attr($notice['type']) . ' notice"><p>' . wp_kses_post($notice['msg']) . '</a>.</p></div>';
|
103 |
}
|
104 |
?>
|
105 |
<script>
|
106 |
jQuery( document ).ready(
|
107 |
function( $ ) {
|
108 |
-
$( '
|
109 |
-
'click', '.notice-dismiss', function( event ) {
|
110 |
-
var $data = $( this ).parent(
|
111 |
$.post(
|
112 |
ajaxurl, {
|
113 |
action: 'redux_hide_admin_notice',
|
@@ -169,15 +169,16 @@
|
|
169 |
*/
|
170 |
public static function dismissAdminNoticeAJAX() {
|
171 |
global $current_user;
|
172 |
-
if ( ! wp_verify_nonce( $_POST['nonce'], $_POST['id'] . 'nonce' ) ) {
|
173 |
-
die(0);
|
174 |
-
} else {
|
175 |
-
// Get the user id
|
176 |
-
$userid = $current_user->ID;
|
177 |
|
178 |
-
|
179 |
-
|
|
|
|
|
|
|
180 |
|
|
|
|
|
|
|
181 |
// Add the dismiss request to the user meta.
|
182 |
update_user_meta( $userid, 'ignore_' . $id, true );
|
183 |
}
|
53 |
|
54 |
$add_style = '';
|
55 |
if ( strpos( $notice['type'], 'redux-message' ) != false ) {
|
56 |
+
$add_style = 'style="border-left: 4px solid ' . esc_attr( $notice['color'] ) . '!important;"';
|
57 |
}
|
58 |
|
59 |
if ( true == $notice['dismiss'] ) {
|
78 |
$pageName = empty( $_GET['page'] ) ? '&page=' . self::$_parent->args['page_slug'] : '&page=' . $_GET['page'];
|
79 |
|
80 |
// Ditto for the current tab.
|
81 |
+
$curTab = empty( $_GET['tab'] ) ? '&tab=0' : '&tab=' . esc_attr( $_GET['tab'] );
|
82 |
}
|
83 |
|
84 |
global $wp_version;
|
85 |
// Print the notice with the dismiss link
|
86 |
if ( version_compare( $wp_version, '4.2', '>' ) ) {
|
87 |
$output = "";
|
88 |
+
$css_id = esc_attr( $notice['id'] ) . $pageName . $curTab;
|
89 |
+
$css_class = esc_attr( $notice['type'] ) . ' redux-notice notice is-dismissible redux-notice';
|
90 |
$output .= "<div {$add_style} id='$css_id' class='$css_class'> \n";
|
91 |
+
$nonce = wp_create_nonce( $notice['id'] . $userid . 'nonce' );
|
92 |
+
$output .= "<input type='hidden' class='dismiss_data' id='" . esc_attr( $notice['id'] ) . $pageName . $curTab . "' value='{$nonce}'> \n";
|
93 |
+
$output .= '<p>' . wp_kses_post( $notice['msg'] ) . '</p>';
|
94 |
$output .= "</div> \n";
|
95 |
echo $output;
|
96 |
} else {
|
97 |
+
echo '<div ' . $add_style . ' class="' . esc_attr( $notice['type'] ) . ' notice is-dismissable"><p>' . wp_kses_post( $notice['msg'] ) . ' <a href="?dismiss=true&id=' . esc_attr( $notice['id'] ) . $pageName . $curTab . '">' . esc_html__( 'Dismiss', 'redux-framework' ) . '</a>.</p></div>';
|
98 |
}
|
99 |
}
|
100 |
} else {
|
101 |
// Standard notice
|
102 |
+
echo '<div ' . $add_style . ' class="' . esc_attr( $notice['type'] ) . ' notice"><p>' . wp_kses_post( $notice['msg'] ) . '</a>.</p></div>';
|
103 |
}
|
104 |
?>
|
105 |
<script>
|
106 |
jQuery( document ).ready(
|
107 |
function( $ ) {
|
108 |
+
$( 'body' ).on(
|
109 |
+
'click', '.redux-notice.is-dismissible .notice-dismiss', function( event ) {
|
110 |
+
var $data = $( this ).parent().find( '.dismiss_data' );
|
111 |
$.post(
|
112 |
ajaxurl, {
|
113 |
action: 'redux_hide_admin_notice',
|
169 |
*/
|
170 |
public static function dismissAdminNoticeAJAX() {
|
171 |
global $current_user;
|
|
|
|
|
|
|
|
|
|
|
172 |
|
173 |
+
// Get the notice id
|
174 |
+
$id = explode( '&', $_POST['id'] );
|
175 |
+
$id = $id[0];
|
176 |
+
// Get the user id
|
177 |
+
$userid = $current_user->ID;
|
178 |
|
179 |
+
if ( ! wp_verify_nonce( $_POST['nonce'], $id . $userid . 'nonce' ) ) {
|
180 |
+
die( 0 );
|
181 |
+
} else {
|
182 |
// Add the dismiss request to the user meta.
|
183 |
update_user_meta( $userid, 'ignore_' . $id, true );
|
184 |
}
|
ReduxCore/inc/class.redux_api.php
CHANGED
@@ -256,7 +256,7 @@
|
|
256 |
$section['id'] = time();
|
257 |
} else {
|
258 |
if ( isset( $section['title'] ) ) {
|
259 |
-
$section['id'] = strtolower(
|
260 |
} else {
|
261 |
$section['id'] = time();
|
262 |
}
|
256 |
$section['id'] = time();
|
257 |
} else {
|
258 |
if ( isset( $section['title'] ) ) {
|
259 |
+
$section['id'] = strtolower( sanitize_title( $section['title'] ) );
|
260 |
} else {
|
261 |
$section['id'] = time();
|
262 |
}
|
ReduxCore/inc/class.redux_filesystem.php
CHANGED
@@ -125,6 +125,7 @@
|
|
125 |
|
126 |
// Setup the filesystem with creds
|
127 |
require_once ABSPATH . '/wp-admin/includes/template.php';
|
|
|
128 |
require_once ABSPATH . '/wp-admin/includes/file.php';
|
129 |
|
130 |
if ( $this->parent->args['menu_type'] == 'submenu' ) {
|
125 |
|
126 |
// Setup the filesystem with creds
|
127 |
require_once ABSPATH . '/wp-admin/includes/template.php';
|
128 |
+
|
129 |
require_once ABSPATH . '/wp-admin/includes/file.php';
|
130 |
|
131 |
if ( $this->parent->args['menu_type'] == 'submenu' ) {
|
ReduxCore/inc/class.redux_functions.php
CHANGED
@@ -225,7 +225,7 @@
|
|
225 |
} else {
|
226 |
|
227 |
if ( empty( $check ) ) {
|
228 |
-
$check = wp_remote_get( 'http://look.reduxframework.com/status.php?p=' . ReduxFramework::$_is_plugin );
|
229 |
$check = json_decode( wp_remote_retrieve_body( $check ), true );
|
230 |
|
231 |
if ( ! empty( $check ) && isset( $check['id'] ) ) {
|
@@ -239,9 +239,24 @@
|
|
239 |
return "";
|
240 |
}
|
241 |
}
|
|
|
|
|
|
|
|
|
242 |
|
|
|
|
|
|
|
|
|
|
|
243 |
|
|
|
244 |
}
|
|
|
|
|
|
|
245 |
|
|
|
|
|
246 |
}
|
247 |
}
|
225 |
} else {
|
226 |
|
227 |
if ( empty( $check ) ) {
|
228 |
+
$check = @wp_remote_get( 'http://look.reduxframework.com/status.php?p=' . ReduxFramework::$_is_plugin );
|
229 |
$check = json_decode( wp_remote_retrieve_body( $check ), true );
|
230 |
|
231 |
if ( ! empty( $check ) && isset( $check['id'] ) ) {
|
239 |
return "";
|
240 |
}
|
241 |
}
|
242 |
+
}
|
243 |
+
|
244 |
+
public static function dat($fname, $opt_name){
|
245 |
+
$name = apply_filters('redux/' . $opt_name . '/aDBW_filter', $fname);
|
246 |
|
247 |
+
return $name;
|
248 |
+
}
|
249 |
+
|
250 |
+
public static function bub($fname, $opt_name){
|
251 |
+
$name = apply_filters('redux/' . $opt_name . '/aNF_filter', $fname);
|
252 |
|
253 |
+
return $name;
|
254 |
}
|
255 |
+
|
256 |
+
public static function yo($fname, $opt_name){
|
257 |
+
$name = apply_filters('redux/' . $opt_name . '/aNFM_filter', $fname);
|
258 |
|
259 |
+
return $name;
|
260 |
+
}
|
261 |
}
|
262 |
}
|
ReduxCore/inc/class.redux_helpers.php
CHANGED
@@ -96,7 +96,12 @@
|
|
96 |
);
|
97 |
|
98 |
if ( ! function_exists( 'get_plugin_data' ) ) {
|
99 |
-
|
|
|
|
|
|
|
|
|
|
|
100 |
}
|
101 |
|
102 |
$plugins = array();
|
@@ -364,11 +369,12 @@
|
|
364 |
}
|
365 |
}
|
366 |
|
367 |
-
public static function localize($localize) {
|
368 |
-
$redux
|
369 |
-
$nonce
|
370 |
-
$base
|
371 |
$localize['rAds'] = Redux_Helpers::rURL_fix( $base, $redux->args['opt_name'] );
|
|
|
372 |
return $localize;
|
373 |
}
|
374 |
|
@@ -483,7 +489,7 @@
|
|
483 |
$sysinfo['wp_remote_post_error'] = $response->get_error_message();
|
484 |
}
|
485 |
|
486 |
-
$response = wp_remote_get( 'http://reduxframework.com/wp-admin/admin-ajax.php?action=get_redux_extensions' );
|
487 |
|
488 |
if ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) {
|
489 |
$sysinfo['wp_remote_get'] = 'true';
|
@@ -574,7 +580,7 @@
|
|
574 |
}
|
575 |
|
576 |
private static function getReduxTemplates( $custom_template_path ) {
|
577 |
-
$filesystem
|
578 |
$template_paths = array( 'ReduxFramework' => ReduxFramework::$_dir . 'templates/panel' );
|
579 |
$scanned_files = array();
|
580 |
$found_files = array();
|
@@ -640,7 +646,7 @@
|
|
640 |
return $result;
|
641 |
}
|
642 |
|
643 |
-
public static function get_template_version( $file
|
644 |
$filesystem = Redux_Filesystem::get_instance();
|
645 |
// Avoid notices if file does not exist
|
646 |
if ( ! file_exists( $file ) ) {
|
@@ -694,9 +700,5 @@
|
|
694 |
|
695 |
return $ret;
|
696 |
}
|
697 |
-
|
698 |
}
|
699 |
-
}
|
700 |
-
|
701 |
-
|
702 |
-
|
96 |
);
|
97 |
|
98 |
if ( ! function_exists( 'get_plugin_data' ) ) {
|
99 |
+
if ( file_exists( ABSPATH . 'wp-admin/includes/plugin.php' ) ) {
|
100 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
101 |
+
}
|
102 |
+
if ( file_exists( ABSPATH . 'wp-admin/includes/admin.php' ) ) {
|
103 |
+
require_once ABSPATH . 'wp-admin/includes/admin.php';
|
104 |
+
}
|
105 |
}
|
106 |
|
107 |
$plugins = array();
|
369 |
}
|
370 |
}
|
371 |
|
372 |
+
public static function localize( $localize ) {
|
373 |
+
$redux = ReduxFrameworkInstances::get_instance( $localize['args']['opt_name'] );
|
374 |
+
$nonce = wp_create_nonce( 'redux-ads-nonce' );
|
375 |
+
$base = admin_url( 'admin-ajax.php' ) . '?action=redux_p&nonce=' . $nonce . '&url=';
|
376 |
$localize['rAds'] = Redux_Helpers::rURL_fix( $base, $redux->args['opt_name'] );
|
377 |
+
|
378 |
return $localize;
|
379 |
}
|
380 |
|
489 |
$sysinfo['wp_remote_post_error'] = $response->get_error_message();
|
490 |
}
|
491 |
|
492 |
+
$response = @wp_remote_get( 'http://reduxframework.com/wp-admin/admin-ajax.php?action=get_redux_extensions' );
|
493 |
|
494 |
if ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) {
|
495 |
$sysinfo['wp_remote_get'] = 'true';
|
580 |
}
|
581 |
|
582 |
private static function getReduxTemplates( $custom_template_path ) {
|
583 |
+
$filesystem = Redux_Filesystem::get_instance();
|
584 |
$template_paths = array( 'ReduxFramework' => ReduxFramework::$_dir . 'templates/panel' );
|
585 |
$scanned_files = array();
|
586 |
$found_files = array();
|
646 |
return $result;
|
647 |
}
|
648 |
|
649 |
+
public static function get_template_version( $file ) {
|
650 |
$filesystem = Redux_Filesystem::get_instance();
|
651 |
// Avoid notices if file does not exist
|
652 |
if ( ! file_exists( $file ) ) {
|
700 |
|
701 |
return $ret;
|
702 |
}
|
|
|
703 |
}
|
704 |
+
}
|
|
|
|
|
|
ReduxCore/inc/class.thirdparty.fixes.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// Fix for the GT3 page builder: http://www.gt3themes.com/wordpress-gt3-page-builder-plugin/
|
3 |
+
/** @global string $pagenow */
|
4 |
+
if ( has_action( 'ecpt_field_options_' ) ) {
|
5 |
+
global $pagenow;
|
6 |
+
if ( $pagenow === 'admin.php' ) {
|
7 |
+
|
8 |
+
remove_action( 'admin_init', 'pb_admin_init' );
|
9 |
+
}
|
10 |
+
}
|
ReduxCore/inc/extensions/customizer/extension_customizer.php
CHANGED
@@ -139,7 +139,7 @@
|
|
139 |
|
140 |
function enqueue_controls_css() {
|
141 |
|
142 |
-
|
143 |
$enqueue = new reduxCoreEnqueue ( $this->parent );
|
144 |
$enqueue->get_warnings_and_errors_array();
|
145 |
$enqueue->init();
|
@@ -262,23 +262,23 @@
|
|
262 |
public function _register_customizer_controls( $wp_customize ) {
|
263 |
|
264 |
if ( ! class_exists( 'Redux_Customizer_Section' ) ) {
|
265 |
-
|
266 |
if ( method_exists( $wp_customize, 'register_section_type' ) ) {
|
267 |
$wp_customize->register_section_type( 'Redux_Customizer_Section' );
|
268 |
}
|
269 |
}
|
270 |
if ( ! class_exists( 'Redux_Customizer_Panel' ) ) {
|
271 |
-
|
272 |
if ( method_exists( $wp_customize, 'register_panel_type' ) ) {
|
273 |
$wp_customize->register_panel_type( 'Redux_Customizer_Panel' );
|
274 |
}
|
275 |
}
|
276 |
if ( ! class_exists( 'Redux_Customizer_Control' ) ) {
|
277 |
-
|
278 |
}
|
279 |
|
280 |
-
|
281 |
-
|
282 |
|
283 |
do_action( "redux/extension/customizer/control/includes" );
|
284 |
|
139 |
|
140 |
function enqueue_controls_css() {
|
141 |
|
142 |
+
require_once ReduxFramework::$_dir . 'core/enqueue.php';
|
143 |
$enqueue = new reduxCoreEnqueue ( $this->parent );
|
144 |
$enqueue->get_warnings_and_errors_array();
|
145 |
$enqueue->init();
|
262 |
public function _register_customizer_controls( $wp_customize ) {
|
263 |
|
264 |
if ( ! class_exists( 'Redux_Customizer_Section' ) ) {
|
265 |
+
require_once dirname( __FILE__ ) . '/inc/customizer_section.php';
|
266 |
if ( method_exists( $wp_customize, 'register_section_type' ) ) {
|
267 |
$wp_customize->register_section_type( 'Redux_Customizer_Section' );
|
268 |
}
|
269 |
}
|
270 |
if ( ! class_exists( 'Redux_Customizer_Panel' ) ) {
|
271 |
+
require_once dirname( __FILE__ ) . '/inc/customizer_panel.php';
|
272 |
if ( method_exists( $wp_customize, 'register_panel_type' ) ) {
|
273 |
$wp_customize->register_panel_type( 'Redux_Customizer_Panel' );
|
274 |
}
|
275 |
}
|
276 |
if ( ! class_exists( 'Redux_Customizer_Control' ) ) {
|
277 |
+
require_once dirname( __FILE__ ) . '/inc/customizer_control.php';
|
278 |
}
|
279 |
|
280 |
+
require_once dirname( __FILE__ ) . '/inc/customizer_fields.php';
|
281 |
+
require_once dirname( __FILE__ ) . '/inc/customizer_devs.php';
|
282 |
|
283 |
do_action( "redux/extension/customizer/control/includes" );
|
284 |
|
ReduxCore/inc/fields/border/field_border.php
CHANGED
@@ -125,10 +125,10 @@ if ( ! class_exists( 'ReduxFramework_border' ) ) {
|
|
125 |
echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-fullscreen icon-large"></i></span><input type="text" class="redux-border-all redux-border-input mini ' . $this->field['class'] . '" placeholder="' . __( 'All', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-all" value="' . $this->value['top'] . '"></div>';
|
126 |
}
|
127 |
|
128 |
-
echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-top" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-top]" value="' . ( $this->value['top'] ? $this->value['top'] . 'px' : '' ) . '">';
|
129 |
-
echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-right" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-right]" value="' . ( $this->value['right'] ? $this->value['right'] . 'px' : '' ) . '">';
|
130 |
-
echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-bottom" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-bottom]" value="' . ( $this->value['bottom'] ? $this->value['bottom'] . 'px' : '' ) . '">';
|
131 |
-
echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-left" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-left]" value="' . ( $this->value['left'] ? $this->value['left'] . 'px' : '' ) . '">';
|
132 |
|
133 |
if ( ! isset( $this->field['all'] ) || $this->field['all'] !== true ) {
|
134 |
/**
|
125 |
echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-fullscreen icon-large"></i></span><input type="text" class="redux-border-all redux-border-input mini ' . $this->field['class'] . '" placeholder="' . __( 'All', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-all" value="' . $this->value['top'] . '"></div>';
|
126 |
}
|
127 |
|
128 |
+
echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-top" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-top]" value="' . ( isset($this->value['top']) ? $this->value['top'] . 'px' : '' ) . '">';
|
129 |
+
echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-right" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-right]" value="' . ( isset($this->value['right']) ? $this->value['right'] . 'px' : '' ) . '">';
|
130 |
+
echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-bottom" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-bottom]" value="' . ( isset($this->value['bottom']) ? $this->value['bottom'] . 'px' : '' ) . '">';
|
131 |
+
echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-left" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-left]" value="' . ( isset($this->value['left']) ? $this->value['left'] . 'px' : '' ) . '">';
|
132 |
|
133 |
if ( ! isset( $this->field['all'] ) || $this->field['all'] !== true ) {
|
134 |
/**
|
ReduxCore/inc/fields/editor/field_editor.js
CHANGED
@@ -12,7 +12,7 @@
|
|
12 |
|
13 |
redux.field_objects = redux.field_objects || {};
|
14 |
redux.field_objects.editor = redux.field_objects.editor || {};
|
15 |
-
|
16 |
$( document ).ready(
|
17 |
function() {
|
18 |
//redux.field_objects.editor.init();
|
@@ -22,8 +22,10 @@
|
|
22 |
redux.field_objects.editor.init = function( selector ) {
|
23 |
setTimeout(
|
24 |
function() {
|
25 |
-
|
26 |
-
|
|
|
|
|
27 |
}
|
28 |
}, 1000
|
29 |
);
|
12 |
|
13 |
redux.field_objects = redux.field_objects || {};
|
14 |
redux.field_objects.editor = redux.field_objects.editor || {};
|
15 |
+
|
16 |
$( document ).ready(
|
17 |
function() {
|
18 |
//redux.field_objects.editor.init();
|
22 |
redux.field_objects.editor.init = function( selector ) {
|
23 |
setTimeout(
|
24 |
function() {
|
25 |
+
if (typeof(tinymce) !== 'undefined') {
|
26 |
+
for ( var i = 0; i < tinymce.editors.length; i++ ) {
|
27 |
+
redux.field_objects.editor.onChange( i );
|
28 |
+
}
|
29 |
}
|
30 |
}, 1000
|
31 |
);
|
ReduxCore/inc/fields/editor/field_editor.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.editor=redux.field_objects.editor||{},a(document).ready(function(){}),redux.field_objects.editor.init=function(a){setTimeout(function(){for(var a=0;a<tinymce.editors.length;a++)redux.field_objects.editor.onChange(a)},1e3)},redux.field_objects.editor.onChange=function(b){tinymce.editors[b].on("change",function(b){var c=jQuery(b.target.contentAreaContainer);0!==c.parents(".redux-container-editor:first").length&&redux_change(a(".wp-editor-area"))})}}(jQuery);
|
1 |
+
!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.editor=redux.field_objects.editor||{},a(document).ready(function(){}),redux.field_objects.editor.init=function(a){setTimeout(function(){if("undefined"!=typeof tinymce)for(var a=0;a<tinymce.editors.length;a++)redux.field_objects.editor.onChange(a)},1e3)},redux.field_objects.editor.onChange=function(b){tinymce.editors[b].on("change",function(b){var c=jQuery(b.target.contentAreaContainer);0!==c.parents(".redux-container-editor:first").length&&redux_change(a(".wp-editor-area"))})}}(jQuery);
|
ReduxCore/inc/fields/gallery/field_gallery.js
CHANGED
@@ -40,6 +40,13 @@
|
|
40 |
el.on(
|
41 |
{
|
42 |
click: function( event ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
var current_gallery = $( this ).closest( 'fieldset' );
|
44 |
|
45 |
if ( event.currentTarget.id === 'clear-gallery' ) {
|
40 |
el.on(
|
41 |
{
|
42 |
click: function( event ) {
|
43 |
+
// hide gallery settings used for posts/pages
|
44 |
+
wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
|
45 |
+
template: function(view){
|
46 |
+
return;
|
47 |
+
}
|
48 |
+
});
|
49 |
+
|
50 |
var current_gallery = $( this ).closest( 'fieldset' );
|
51 |
|
52 |
if ( event.currentTarget.id === 'clear-gallery' ) {
|
ReduxCore/inc/fields/gallery/field_gallery.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.gallery=redux.field_objects.gallery||{},a(document).ready(function(){}),redux.field_objects.gallery.init=function(b){b||(b=a(document).find(".redux-container-gallery:visible")),a(b).each(function(){var b=a(this),c=b;b.hasClass("redux-field-container")||(c=b.parents(".redux-field-container:first")),c.is(":hidden")||c.hasClass("redux-field-init")&&(c.removeClass("redux-field-init"),b.on({click:function(b){var c=a(this).closest("fieldset");if("clear-gallery"===b.currentTarget.id){c.find(".gallery_values").val("");return void c.find(".screenshot").html("")}if("undefined"!=typeof wp&&wp.media&&wp.media.gallery){b.preventDefault();var d,e=(a(this),c.find(".gallery_values").val());d=e?'[gallery ids="'+e+'"]':'[gallery ids="0"]';var f=wp.media.gallery.edit(d);return f.state("gallery-edit").on("update",function(a){c.find(".screenshot").html("");var b,d,e="",f=a.models.map(function(a){return b=a.toJSON(),d="undefined"!=typeof b.sizes.thumbnail?b.sizes.thumbnail.url:b.url,e="<a class='of-uploaded-image' href='"+d+"'><img class='redux-option-image' src='"+d+"' alt='' /></a>",c.find(".screenshot").append(e),a.id});c.find(".gallery_values").val(f.join(",")),redux_change(c.find(".gallery_values"))}),!1}}},".gallery-attachments"))})}}(jQuery);
|
1 |
+
!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.gallery=redux.field_objects.gallery||{},a(document).ready(function(){}),redux.field_objects.gallery.init=function(b){b||(b=a(document).find(".redux-container-gallery:visible")),a(b).each(function(){var b=a(this),c=b;b.hasClass("redux-field-container")||(c=b.parents(".redux-field-container:first")),c.is(":hidden")||c.hasClass("redux-field-init")&&(c.removeClass("redux-field-init"),b.on({click:function(b){wp.media.view.Settings.Gallery=wp.media.view.Settings.Gallery.extend({template:function(a){}});var c=a(this).closest("fieldset");if("clear-gallery"===b.currentTarget.id){c.find(".gallery_values").val("");return void c.find(".screenshot").html("")}if("undefined"!=typeof wp&&wp.media&&wp.media.gallery){b.preventDefault();var d,e=(a(this),c.find(".gallery_values").val());d=e?'[gallery ids="'+e+'"]':'[gallery ids="0"]';var f=wp.media.gallery.edit(d);return f.state("gallery-edit").on("update",function(a){c.find(".screenshot").html("");var b,d,e="",f=a.models.map(function(a){return b=a.toJSON(),d="undefined"!=typeof b.sizes.thumbnail?b.sizes.thumbnail.url:b.url,e="<a class='of-uploaded-image' href='"+d+"'><img class='redux-option-image' src='"+d+"' alt='' /></a>",c.find(".screenshot").append(e),a.id});c.find(".gallery_values").val(f.join(",")),redux_change(c.find(".gallery_values"))}),!1}}},".gallery-attachments"))})}}(jQuery);
|
ReduxCore/inc/fields/raw/field_raw.php
CHANGED
@@ -37,12 +37,12 @@
|
|
37 |
}
|
38 |
|
39 |
if ( ! empty( $this->field['content'] ) && isset( $this->field['content'] ) ) {
|
40 |
-
if ( isset( $this->field['markdown'] ) && $this->field['markdown'] == true ) {
|
41 |
require_once dirname( __FILE__ ) . "/parsedown.php";
|
42 |
$Parsedown = new Parsedown();
|
43 |
-
echo $Parsedown->text(
|
44 |
} else {
|
45 |
-
echo
|
46 |
}
|
47 |
}
|
48 |
|
37 |
}
|
38 |
|
39 |
if ( ! empty( $this->field['content'] ) && isset( $this->field['content'] ) ) {
|
40 |
+
if ( isset( $this->field['markdown'] ) && $this->field['markdown'] == true && ! empty( $this->field['content'] ) ) {
|
41 |
require_once dirname( __FILE__ ) . "/parsedown.php";
|
42 |
$Parsedown = new Parsedown();
|
43 |
+
echo $Parsedown->text( $this->field['content'] );
|
44 |
} else {
|
45 |
+
echo $this->field['content'];
|
46 |
}
|
47 |
}
|
48 |
|
ReduxCore/inc/fields/raw/parsedown.php
CHANGED
@@ -11,1275 +11,1531 @@
|
|
11 |
# For the full license information, view the LICENSE file that was distributed
|
12 |
# with this source code.
|
13 |
#
|
14 |
-
# Modified by Dovy Paukstys to remove <? shortcode-like declaration.
|
15 |
#
|
16 |
-
#
|
17 |
-
|
18 |
-
class Parsedown {
|
19 |
-
#
|
20 |
-
# Philosophy
|
21 |
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
# lines, it iterates through them and it looks at how they start and relate
|
26 |
-
# to each other.
|
27 |
|
28 |
-
|
29 |
-
# ~
|
30 |
|
31 |
-
|
32 |
-
# make sure no definitions are set
|
33 |
-
$this->Definitions = array();
|
34 |
|
35 |
-
|
36 |
-
|
37 |
-
|
|
|
38 |
|
39 |
-
|
40 |
-
|
41 |
|
42 |
-
|
43 |
-
|
44 |
|
45 |
-
|
46 |
-
|
47 |
|
48 |
-
|
49 |
-
|
50 |
|
51 |
-
|
52 |
-
|
53 |
|
54 |
-
|
55 |
-
|
56 |
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
|
61 |
-
|
|
|
|
|
62 |
|
63 |
-
|
64 |
-
|
65 |
|
66 |
-
|
67 |
-
}
|
68 |
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
|
73 |
-
|
74 |
-
|
75 |
-
'*' => array( 'Rule', 'List' ),
|
76 |
-
'+' => array( 'List' ),
|
77 |
-
'-' => array( 'Setext', 'Table', 'Rule', 'List' ),
|
78 |
-
'0' => array( 'List' ),
|
79 |
-
'1' => array( 'List' ),
|
80 |
-
'2' => array( 'List' ),
|
81 |
-
'3' => array( 'List' ),
|
82 |
-
'4' => array( 'List' ),
|
83 |
-
'5' => array( 'List' ),
|
84 |
-
'6' => array( 'List' ),
|
85 |
-
'7' => array( 'List' ),
|
86 |
-
'8' => array( 'List' ),
|
87 |
-
'9' => array( 'List' ),
|
88 |
-
':' => array( 'Table' ),
|
89 |
-
'<' => array( 'Comment', 'Markup' ),
|
90 |
-
'=' => array( 'Setext' ),
|
91 |
-
'>' => array( 'Quote' ),
|
92 |
-
'_' => array( 'Rule' ),
|
93 |
-
'`' => array( 'FencedCode' ),
|
94 |
-
'|' => array( 'Table' ),
|
95 |
-
'~' => array( 'FencedCode' ),
|
96 |
-
);
|
97 |
|
98 |
-
|
99 |
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
|
104 |
-
|
|
|
105 |
|
106 |
-
|
107 |
-
|
108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
|
110 |
-
|
111 |
-
|
112 |
-
#
|
113 |
|
114 |
-
|
115 |
-
|
|
|
116 |
|
117 |
-
|
118 |
-
if ( chop( $line ) === '' ) {
|
119 |
-
if ( isset( $CurrentBlock ) ) {
|
120 |
-
$CurrentBlock['interrupted'] = true;
|
121 |
-
}
|
122 |
|
123 |
-
|
124 |
-
}
|
125 |
|
126 |
-
$
|
|
|
|
|
127 |
|
128 |
-
|
129 |
-
$
|
130 |
}
|
|
|
131 |
|
132 |
-
|
133 |
|
134 |
-
|
|
|
|
|
|
|
135 |
|
136 |
-
|
|
|
|
|
137 |
|
138 |
-
|
139 |
|
140 |
-
|
141 |
-
$Block = $this->{'addTo' . $CurrentBlock['type']}( $Line, $CurrentBlock );
|
142 |
|
143 |
-
|
144 |
-
|
|
|
145 |
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
$CurrentBlock = $this->{'complete' . $CurrentBlock['type']}( $CurrentBlock );
|
150 |
-
}
|
151 |
|
152 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
}
|
154 |
}
|
|
|
155 |
|
156 |
-
|
157 |
-
|
158 |
-
$marker = $text[0];
|
159 |
-
|
160 |
-
if ( isset( $this->DefinitionTypes[ $marker ] ) ) {
|
161 |
-
foreach ( $this->DefinitionTypes[ $marker ] as $definitionType ) {
|
162 |
-
$Definition = $this->{'identify' . $definitionType}( $Line, $CurrentBlock );
|
163 |
-
|
164 |
-
if ( isset( $Definition ) ) {
|
165 |
-
$this->Definitions[ $definitionType ][ $Definition['id'] ] = $Definition['data'];
|
166 |
|
167 |
-
|
168 |
-
}
|
169 |
-
}
|
170 |
-
}
|
171 |
|
172 |
-
|
173 |
|
174 |
-
|
175 |
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
|
|
180 |
}
|
|
|
181 |
|
182 |
-
|
183 |
-
|
184 |
|
185 |
-
|
186 |
-
|
|
|
187 |
|
188 |
-
|
189 |
-
|
|
|
190 |
|
191 |
-
|
192 |
-
|
|
|
193 |
|
194 |
-
|
195 |
-
|
196 |
|
197 |
-
|
198 |
-
|
199 |
-
|
|
|
200 |
|
201 |
-
|
202 |
|
203 |
-
|
204 |
-
}
|
205 |
}
|
|
|
206 |
|
207 |
-
|
208 |
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
|
|
|
|
|
|
213 |
|
214 |
-
|
215 |
|
216 |
-
|
217 |
-
}
|
218 |
}
|
|
|
219 |
|
220 |
-
|
221 |
|
222 |
-
|
223 |
-
|
224 |
-
}
|
|
|
225 |
|
226 |
-
|
227 |
|
228 |
-
|
229 |
|
230 |
-
|
231 |
|
232 |
-
|
233 |
|
234 |
-
|
235 |
|
236 |
-
|
|
|
|
|
|
|
|
|
|
|
237 |
|
238 |
-
|
|
|
239 |
}
|
240 |
|
241 |
-
|
242 |
-
# Atx
|
243 |
|
244 |
-
|
245 |
-
if ( isset( $Line['text'][1] ) ) {
|
246 |
-
$level = 1;
|
247 |
|
248 |
-
|
249 |
-
|
250 |
-
}
|
251 |
|
252 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
'handler' => 'line',
|
259 |
-
),
|
260 |
-
);
|
261 |
|
262 |
-
|
263 |
-
|
264 |
-
}
|
265 |
|
266 |
-
|
267 |
-
|
|
|
|
|
|
|
|
|
268 |
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
),
|
281 |
),
|
282 |
-
)
|
|
|
283 |
|
284 |
-
|
285 |
-
}
|
286 |
}
|
|
|
287 |
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
}
|
295 |
-
|
296 |
$Block['element']['text']['text'] .= "\n";
|
297 |
|
298 |
-
|
299 |
-
|
300 |
-
$Block['element']['text']['text'] .= $text;
|
301 |
-
|
302 |
-
return $Block;
|
303 |
}
|
304 |
-
}
|
305 |
|
306 |
-
|
307 |
-
$text = $Block['element']['text']['text'];
|
308 |
|
309 |
-
$text =
|
310 |
|
311 |
-
$Block['element']['text']['text']
|
312 |
|
313 |
return $Block;
|
314 |
}
|
|
|
315 |
|
316 |
-
|
317 |
-
|
|
|
318 |
|
319 |
-
|
320 |
-
if ( isset( $Line['text'][3] ) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!' ) {
|
321 |
-
$Block = array(
|
322 |
-
'element' => $Line['body'],
|
323 |
-
);
|
324 |
|
325 |
-
|
326 |
-
$Block['closed'] = true;
|
327 |
-
}
|
328 |
|
329 |
-
|
330 |
-
|
331 |
-
}
|
332 |
|
333 |
-
|
334 |
-
|
335 |
-
return;
|
336 |
-
}
|
337 |
|
338 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
339 |
|
340 |
-
if (
|
|
|
341 |
$Block['closed'] = true;
|
342 |
}
|
343 |
|
344 |
return $Block;
|
345 |
}
|
|
|
346 |
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
'name' => 'code',
|
354 |
-
'text' => '',
|
355 |
-
);
|
356 |
-
|
357 |
-
if ( isset( $matches[2] ) ) {
|
358 |
-
$class = 'language-' . $matches[2];
|
359 |
-
|
360 |
-
$Element['attributes'] = array(
|
361 |
-
'class' => $class,
|
362 |
-
);
|
363 |
-
}
|
364 |
|
365 |
-
|
366 |
-
'char' => $Line['text'][0],
|
367 |
-
'element' => array(
|
368 |
-
'name' => 'pre',
|
369 |
-
'handler' => 'element',
|
370 |
-
'text' => $Element,
|
371 |
-
),
|
372 |
-
);
|
373 |
|
374 |
-
|
375 |
-
|
|
|
376 |
}
|
377 |
|
378 |
-
|
379 |
-
|
380 |
-
return;
|
381 |
-
}
|
382 |
-
|
383 |
-
if ( isset( $Block['interrupted'] ) ) {
|
384 |
-
$Block['element']['text']['text'] .= "\n";
|
385 |
|
386 |
-
|
387 |
-
|
388 |
|
389 |
-
|
390 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
|
392 |
-
|
|
|
|
|
393 |
|
394 |
-
|
|
|
|
|
395 |
}
|
396 |
|
397 |
-
$Block
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
398 |
|
399 |
return $Block;
|
400 |
}
|
|
|
401 |
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
$Block['element']['text']['text'] = $text;
|
408 |
-
|
409 |
-
return $Block;
|
410 |
}
|
411 |
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
protected function identifyList( $Line ) {
|
416 |
-
list( $name, $pattern ) = $Line['text'][0] <= '-' ? array( 'ul', '[*+-]' ) : array( 'ol', '[0-9]+[.]' );
|
417 |
|
418 |
-
|
419 |
-
|
420 |
-
'indent' => $Line['indent'],
|
421 |
-
'pattern' => $pattern,
|
422 |
-
'element' => array(
|
423 |
-
'name' => $name,
|
424 |
-
'handler' => 'elements',
|
425 |
-
),
|
426 |
-
);
|
427 |
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
'text' => array(
|
432 |
-
$matches[2],
|
433 |
-
),
|
434 |
-
);
|
435 |
|
436 |
-
|
437 |
|
438 |
-
|
439 |
-
}
|
440 |
}
|
441 |
|
442 |
-
|
443 |
-
if ( $Block['indent'] === $Line['indent'] and preg_match( '/^' . $Block['pattern'] . '[ ]+(.*)/', $Line['text'], $matches ) ) {
|
444 |
-
if ( isset( $Block['interrupted'] ) ) {
|
445 |
-
$Block['li']['text'] [] = '';
|
446 |
|
447 |
-
|
448 |
-
|
449 |
|
450 |
-
|
|
|
|
|
451 |
|
452 |
-
|
453 |
-
'name' => 'li',
|
454 |
-
'handler' => 'li',
|
455 |
-
'text' => array(
|
456 |
-
$matches[1],
|
457 |
-
),
|
458 |
-
);
|
459 |
|
460 |
-
|
461 |
|
462 |
-
|
463 |
-
|
464 |
|
465 |
-
|
466 |
-
|
467 |
|
468 |
-
|
|
|
|
|
|
|
|
|
469 |
|
470 |
-
|
|
|
|
|
471 |
}
|
472 |
|
473 |
-
if (
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
|
478 |
-
|
479 |
|
480 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
481 |
|
482 |
-
|
483 |
-
}
|
484 |
}
|
|
|
485 |
|
486 |
-
|
487 |
-
|
488 |
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
'element' => array(
|
493 |
-
'name' => 'blockquote',
|
494 |
-
'handler' => 'lines',
|
495 |
-
'text' => (array) $matches[1],
|
496 |
-
),
|
497 |
-
);
|
498 |
|
499 |
-
|
500 |
-
|
501 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
502 |
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
|
|
|
|
|
|
507 |
|
508 |
-
|
509 |
-
}
|
510 |
|
511 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
512 |
|
513 |
-
|
514 |
}
|
515 |
|
516 |
-
|
517 |
-
$Block['element']['text'] [] = $Line['text'];
|
518 |
|
519 |
-
|
520 |
-
}
|
521 |
-
}
|
522 |
|
523 |
-
|
524 |
-
|
|
|
|
|
|
|
|
|
|
|
525 |
|
526 |
-
|
527 |
-
if ( preg_match( '/^([' . $Line['text'][0] . '])([ ]{0,2}\1){2,}[ ]*$/', $Line['text'] ) ) {
|
528 |
-
$Block = array(
|
529 |
-
'element' => array(
|
530 |
-
'name' => 'hr'
|
531 |
-
),
|
532 |
-
);
|
533 |
|
534 |
-
|
535 |
-
}
|
536 |
}
|
537 |
|
538 |
-
|
539 |
-
|
|
|
|
|
540 |
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
}
|
545 |
|
546 |
-
|
547 |
-
$Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2';
|
548 |
|
549 |
-
|
550 |
-
}
|
551 |
}
|
552 |
|
553 |
-
|
554 |
-
|
|
|
555 |
|
556 |
-
|
557 |
-
if ( preg_match( '/^<(\w[\w\d]*)(?:[ ][^>\/]*)?(\/?)[ ]*>/', $Line['text'], $matches ) ) {
|
558 |
-
if ( in_array( $matches[1], $this->textLevelElements ) ) {
|
559 |
-
return;
|
560 |
-
}
|
561 |
|
562 |
-
|
563 |
-
'element' => $Line['body'],
|
564 |
-
);
|
565 |
|
566 |
-
|
567 |
-
$Block['closed'] = true;
|
568 |
-
} else {
|
569 |
-
$Block['depth'] = 0;
|
570 |
-
$Block['name'] = $matches[1];
|
571 |
-
}
|
572 |
|
573 |
-
|
574 |
-
}
|
575 |
}
|
|
|
576 |
|
577 |
-
|
578 |
-
|
579 |
-
return;
|
580 |
-
}
|
581 |
-
|
582 |
-
if ( preg_match( '/<' . $Block['name'] . '([ ][^\/]+)?>/', $Line['text'] ) ) # opening tag
|
583 |
-
{
|
584 |
-
$Block['depth'] ++;
|
585 |
-
}
|
586 |
-
|
587 |
-
if ( stripos( $Line['text'], '</' . $Block['name'] . '>' ) !== false ) # closing tag
|
588 |
-
{
|
589 |
-
if ( $Block['depth'] > 0 ) {
|
590 |
-
$Block['depth'] --;
|
591 |
-
} else {
|
592 |
-
$Block['closed'] = true;
|
593 |
-
}
|
594 |
-
}
|
595 |
|
596 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
597 |
|
598 |
return $Block;
|
599 |
}
|
|
|
600 |
|
601 |
-
|
602 |
-
|
|
|
|
|
|
|
|
|
|
|
603 |
|
604 |
-
|
605 |
-
if ( ! isset( $Block ) or isset( $Block['type'] ) or isset( $Block['interrupted'] ) ) {
|
606 |
-
return;
|
607 |
}
|
608 |
|
609 |
-
|
610 |
-
$alignments = array();
|
611 |
|
612 |
-
|
|
|
613 |
|
614 |
-
|
615 |
-
|
|
|
616 |
|
617 |
-
|
|
|
|
|
618 |
|
619 |
-
|
620 |
-
|
621 |
|
622 |
-
|
623 |
-
|
624 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
625 |
|
626 |
-
|
|
|
|
|
627 |
|
628 |
-
|
629 |
-
|
630 |
-
}
|
631 |
|
632 |
-
|
633 |
-
|
634 |
-
|
|
|
|
|
|
|
635 |
|
636 |
-
|
637 |
-
|
|
|
638 |
|
639 |
-
|
|
|
|
|
640 |
|
641 |
-
|
|
|
642 |
|
643 |
-
|
|
|
|
|
|
|
|
|
|
|
644 |
|
645 |
-
|
646 |
-
|
|
|
647 |
|
648 |
-
|
|
|
|
|
|
|
649 |
|
650 |
-
|
651 |
-
|
|
|
|
|
|
|
652 |
|
653 |
-
|
654 |
-
'name' => 'th',
|
655 |
-
'text' => $headerCell,
|
656 |
-
'handler' => 'line',
|
657 |
-
);
|
658 |
|
659 |
-
|
660 |
-
$alignment = $alignments[ $index ];
|
661 |
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
|
|
666 |
|
667 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
668 |
}
|
669 |
|
670 |
-
|
|
|
|
|
|
|
|
|
671 |
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
'element' => array(
|
676 |
-
'name' => 'table',
|
677 |
-
'handler' => 'elements',
|
678 |
-
),
|
679 |
-
);
|
680 |
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
|
|
|
|
685 |
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
);
|
691 |
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
697 |
|
698 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
699 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
700 |
}
|
|
|
701 |
|
702 |
-
|
703 |
-
|
704 |
-
$Elements = array();
|
705 |
|
706 |
-
|
|
|
|
|
|
|
|
|
|
|
707 |
|
708 |
-
|
709 |
-
|
|
|
710 |
|
711 |
-
|
712 |
|
713 |
-
|
714 |
-
|
715 |
|
716 |
-
|
717 |
-
'name' => 'td',
|
718 |
-
'handler' => 'line',
|
719 |
-
'text' => $cell,
|
720 |
-
);
|
721 |
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
);
|
726 |
-
}
|
727 |
|
728 |
-
|
|
|
|
|
729 |
}
|
730 |
|
731 |
-
$
|
732 |
-
'name' => 'tr',
|
733 |
-
'handler' => 'elements',
|
734 |
-
'text' => $Elements,
|
735 |
-
);
|
736 |
|
737 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
738 |
|
739 |
-
|
740 |
}
|
741 |
-
}
|
742 |
|
743 |
-
|
744 |
-
# Definitions
|
745 |
-
#
|
746 |
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
754 |
);
|
755 |
|
756 |
-
if (
|
757 |
-
|
|
|
|
|
|
|
|
|
|
|
758 |
}
|
759 |
|
760 |
-
|
761 |
}
|
762 |
-
}
|
763 |
|
764 |
-
|
765 |
-
# ~
|
766 |
-
#
|
767 |
|
768 |
-
protected function buildParagraph( $Line ) {
|
769 |
$Block = array(
|
|
|
|
|
770 |
'element' => array(
|
771 |
-
'name'
|
772 |
-
'
|
773 |
-
'handler' => 'line',
|
774 |
),
|
775 |
);
|
776 |
|
777 |
-
|
778 |
-
|
|
|
|
|
779 |
|
780 |
-
|
781 |
-
|
782 |
-
|
|
|
|
|
783 |
|
784 |
-
|
785 |
-
|
|
|
|
|
|
|
786 |
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
}
|
791 |
-
}
|
792 |
|
793 |
-
|
794 |
-
|
|
|
|
|
|
|
|
|
795 |
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
$markup .= $Element['text'];
|
800 |
-
}
|
801 |
|
802 |
-
|
803 |
-
} else {
|
804 |
-
$markup .= ' />';
|
805 |
-
}
|
806 |
|
807 |
-
|
808 |
-
|
809 |
|
810 |
-
|
811 |
-
$markup = '';
|
812 |
|
813 |
-
foreach (
|
814 |
-
|
815 |
-
|
816 |
-
}
|
817 |
|
818 |
-
$
|
|
|
|
|
|
|
|
|
819 |
|
820 |
-
if (
|
821 |
{
|
822 |
-
$
|
823 |
-
|
824 |
-
|
825 |
}
|
826 |
|
827 |
-
$
|
828 |
}
|
829 |
|
830 |
-
$
|
|
|
|
|
|
|
|
|
831 |
|
832 |
-
|
833 |
-
}
|
834 |
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
'
|
847 |
-
|
848 |
-
|
849 |
-
|
|
|
850 |
);
|
851 |
|
852 |
-
|
853 |
-
|
854 |
-
protected $spanMarkerList = '*_!&[</`~\\';
|
855 |
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
|
860 |
-
|
861 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
862 |
|
863 |
-
|
864 |
|
865 |
-
|
866 |
|
867 |
-
|
868 |
-
|
|
|
869 |
|
870 |
-
|
|
|
|
|
871 |
|
872 |
-
|
873 |
|
874 |
-
|
875 |
-
|
|
|
876 |
|
877 |
-
|
878 |
|
879 |
-
|
880 |
-
continue;
|
881 |
-
}
|
882 |
|
883 |
-
|
|
|
|
|
884 |
|
885 |
-
|
886 |
-
|
887 |
-
|
|
|
888 |
|
889 |
-
|
890 |
|
891 |
-
|
892 |
-
|
893 |
-
|
|
|
894 |
|
895 |
-
|
896 |
|
897 |
-
|
|
|
|
|
|
|
898 |
|
899 |
-
|
|
|
900 |
|
901 |
-
|
|
|
902 |
|
903 |
-
|
|
|
904 |
|
905 |
-
|
|
|
906 |
|
907 |
-
|
908 |
-
|
909 |
|
910 |
-
|
911 |
|
912 |
-
|
913 |
-
}
|
914 |
|
915 |
-
$markup .= $this->
|
916 |
|
917 |
-
|
918 |
}
|
919 |
|
920 |
-
|
921 |
-
# ~
|
922 |
-
#
|
923 |
|
924 |
-
|
925 |
-
|
926 |
-
return;
|
927 |
-
}
|
928 |
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
return array(
|
933 |
-
'extent' => strlen( $matches[0][0] ),
|
934 |
-
'position' => $matches[0][1],
|
935 |
-
'element' => array(
|
936 |
-
'name' => 'a',
|
937 |
-
'text' => $url,
|
938 |
-
'attributes' => array(
|
939 |
-
'href' => $url,
|
940 |
-
),
|
941 |
-
),
|
942 |
-
);
|
943 |
-
}
|
944 |
-
}
|
945 |
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
'markup' => '&',
|
950 |
-
'extent' => 1,
|
951 |
-
);
|
952 |
-
}
|
953 |
-
}
|
954 |
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
|
|
959 |
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
'
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
),
|
968 |
-
);
|
969 |
-
}
|
970 |
}
|
|
|
971 |
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
|
|
|
|
|
|
978 |
}
|
979 |
-
}
|
980 |
|
981 |
-
protected function identifyLessThan() {
|
982 |
return array(
|
983 |
-
'
|
984 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
985 |
);
|
986 |
}
|
|
|
987 |
|
988 |
-
|
989 |
-
|
990 |
-
|
|
|
|
|
|
|
991 |
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
|
|
|
|
1003 |
}
|
1004 |
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
|
|
|
|
|
|
|
|
|
|
1018 |
}
|
|
|
1019 |
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
);
|
1026 |
-
}
|
1027 |
}
|
1028 |
|
1029 |
-
|
1030 |
-
$marker = $Excerpt['text'][0];
|
1031 |
|
1032 |
-
|
1033 |
-
$text = $matches[2];
|
1034 |
-
$text = htmlspecialchars( $text, ENT_NOQUOTES, 'UTF-8' );
|
1035 |
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
'name' => 'code',
|
1040 |
-
'text' => $text,
|
1041 |
-
),
|
1042 |
-
);
|
1043 |
-
}
|
1044 |
}
|
1045 |
|
1046 |
-
|
1047 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1048 |
|
1049 |
-
|
1050 |
-
$Link = array( 'text' => $matches[1], 'label' => strtolower( $matches[1] ) );
|
1051 |
|
1052 |
-
|
|
|
1053 |
|
1054 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1055 |
|
1056 |
-
|
1057 |
-
$Link['label'] = strtolower( $matches[1] );
|
1058 |
|
1059 |
-
|
1060 |
-
$Link += $this->Definitions['Reference'][ $Link['label'] ];
|
1061 |
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
}
|
1066 |
-
} elseif ( isset( $this->Definitions['Reference'][ $Link['label'] ] ) ) {
|
1067 |
-
$Link += $this->Definitions['Reference'][ $Link['label'] ];
|
1068 |
|
1069 |
-
|
1070 |
-
$extent += strlen( $matches[0] );
|
1071 |
-
}
|
1072 |
-
} elseif ( preg_match( '/^\([ ]*(.*?)(?:[ ]+[\'"](.+?)[\'"])?[ ]*\)/', $substring, $matches ) ) {
|
1073 |
-
$Link['url'] = $matches[1];
|
1074 |
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
|
|
|
|
|
|
1078 |
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
|
|
1085 |
}
|
1086 |
|
1087 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1088 |
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
'src' => $url,
|
1095 |
-
),
|
1096 |
-
);
|
1097 |
-
} else {
|
1098 |
-
$Element = array(
|
1099 |
-
'name' => 'a',
|
1100 |
-
'handler' => 'line',
|
1101 |
-
'text' => $Link['text'],
|
1102 |
-
'attributes' => array(
|
1103 |
-
'href' => $url,
|
1104 |
-
),
|
1105 |
-
);
|
1106 |
}
|
1107 |
|
1108 |
-
if ( isset(
|
1109 |
-
|
|
|
1110 |
}
|
1111 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1112 |
return array(
|
1113 |
-
'
|
1114 |
-
'
|
1115 |
);
|
1116 |
}
|
1117 |
|
1118 |
-
|
1119 |
-
|
1120 |
-
|
1121 |
-
|
|
|
|
|
|
|
1122 |
|
1123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1124 |
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
|
|
|
11 |
# For the full license information, view the LICENSE file that was distributed
|
12 |
# with this source code.
|
13 |
#
|
|
|
14 |
#
|
|
|
|
|
|
|
|
|
|
|
15 |
|
16 |
+
class Parsedown
|
17 |
+
{
|
18 |
+
# ~
|
|
|
|
|
19 |
|
20 |
+
const version = '1.6.0';
|
|
|
21 |
|
22 |
+
# ~
|
|
|
|
|
23 |
|
24 |
+
function text($text)
|
25 |
+
{
|
26 |
+
# make sure no definitions are set
|
27 |
+
$this->DefinitionData = array();
|
28 |
|
29 |
+
# standardize line breaks
|
30 |
+
$text = str_replace(array("\r\n", "\r"), "\n", $text);
|
31 |
|
32 |
+
# remove surrounding line breaks
|
33 |
+
$text = trim($text, "\n");
|
34 |
|
35 |
+
# split text into lines
|
36 |
+
$lines = explode("\n", $text);
|
37 |
|
38 |
+
# iterate through lines to identify blocks
|
39 |
+
$markup = $this->lines($lines);
|
40 |
|
41 |
+
# trim line breaks
|
42 |
+
$markup = trim($markup, "\n");
|
43 |
|
44 |
+
return $markup;
|
45 |
+
}
|
46 |
|
47 |
+
#
|
48 |
+
# Setters
|
49 |
+
#
|
50 |
|
51 |
+
function setBreaksEnabled($breaksEnabled)
|
52 |
+
{
|
53 |
+
$this->breaksEnabled = $breaksEnabled;
|
54 |
|
55 |
+
return $this;
|
56 |
+
}
|
57 |
|
58 |
+
protected $breaksEnabled;
|
|
|
59 |
|
60 |
+
function setMarkupEscaped($markupEscaped)
|
61 |
+
{
|
62 |
+
$this->markupEscaped = $markupEscaped;
|
63 |
|
64 |
+
return $this;
|
65 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
|
67 |
+
protected $markupEscaped;
|
68 |
|
69 |
+
function setUrlsLinked($urlsLinked)
|
70 |
+
{
|
71 |
+
$this->urlsLinked = $urlsLinked;
|
72 |
|
73 |
+
return $this;
|
74 |
+
}
|
75 |
|
76 |
+
protected $urlsLinked = true;
|
77 |
+
|
78 |
+
#
|
79 |
+
# Lines
|
80 |
+
#
|
81 |
+
|
82 |
+
protected $BlockTypes = array(
|
83 |
+
'#' => array('Header'),
|
84 |
+
'*' => array('Rule', 'List'),
|
85 |
+
'+' => array('List'),
|
86 |
+
'-' => array('SetextHeader', 'Table', 'Rule', 'List'),
|
87 |
+
'0' => array('List'),
|
88 |
+
'1' => array('List'),
|
89 |
+
'2' => array('List'),
|
90 |
+
'3' => array('List'),
|
91 |
+
'4' => array('List'),
|
92 |
+
'5' => array('List'),
|
93 |
+
'6' => array('List'),
|
94 |
+
'7' => array('List'),
|
95 |
+
'8' => array('List'),
|
96 |
+
'9' => array('List'),
|
97 |
+
':' => array('Table'),
|
98 |
+
'<' => array('Comment', 'Markup'),
|
99 |
+
'=' => array('SetextHeader'),
|
100 |
+
'>' => array('Quote'),
|
101 |
+
'[' => array('Reference'),
|
102 |
+
'_' => array('Rule'),
|
103 |
+
'`' => array('FencedCode'),
|
104 |
+
'|' => array('Table'),
|
105 |
+
'~' => array('FencedCode'),
|
106 |
+
);
|
107 |
+
|
108 |
+
# ~
|
109 |
+
|
110 |
+
protected $unmarkedBlockTypes = array(
|
111 |
+
'Code',
|
112 |
+
);
|
113 |
+
|
114 |
+
#
|
115 |
+
# Blocks
|
116 |
+
#
|
117 |
+
|
118 |
+
protected function lines(array $lines)
|
119 |
+
{
|
120 |
+
$CurrentBlock = null;
|
121 |
+
|
122 |
+
foreach ($lines as $line)
|
123 |
+
{
|
124 |
+
if (chop($line) === '')
|
125 |
+
{
|
126 |
+
if (isset($CurrentBlock))
|
127 |
+
{
|
128 |
+
$CurrentBlock['interrupted'] = true;
|
129 |
+
}
|
130 |
|
131 |
+
continue;
|
132 |
+
}
|
|
|
133 |
|
134 |
+
if (strpos($line, "\t") !== false)
|
135 |
+
{
|
136 |
+
$parts = explode("\t", $line);
|
137 |
|
138 |
+
$line = $parts[0];
|
|
|
|
|
|
|
|
|
139 |
|
140 |
+
unset($parts[0]);
|
|
|
141 |
|
142 |
+
foreach ($parts as $part)
|
143 |
+
{
|
144 |
+
$shortage = 4 - mb_strlen($line, 'utf-8') % 4;
|
145 |
|
146 |
+
$line .= str_repeat(' ', $shortage);
|
147 |
+
$line .= $part;
|
148 |
}
|
149 |
+
}
|
150 |
|
151 |
+
$indent = 0;
|
152 |
|
153 |
+
while (isset($line[$indent]) and $line[$indent] === ' ')
|
154 |
+
{
|
155 |
+
$indent ++;
|
156 |
+
}
|
157 |
|
158 |
+
$text = $indent > 0 ? substr($line, $indent) : $line;
|
159 |
+
|
160 |
+
# ~
|
161 |
|
162 |
+
$Line = array('body' => $line, 'indent' => $indent, 'text' => $text);
|
163 |
|
164 |
+
# ~
|
|
|
165 |
|
166 |
+
if (isset($CurrentBlock['continuable']))
|
167 |
+
{
|
168 |
+
$Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock);
|
169 |
|
170 |
+
if (isset($Block))
|
171 |
+
{
|
172 |
+
$CurrentBlock = $Block;
|
|
|
|
|
173 |
|
174 |
+
continue;
|
175 |
+
}
|
176 |
+
else
|
177 |
+
{
|
178 |
+
if ($this->isBlockCompletable($CurrentBlock['type']))
|
179 |
+
{
|
180 |
+
$CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
|
181 |
}
|
182 |
}
|
183 |
+
}
|
184 |
|
185 |
+
# ~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
|
187 |
+
$marker = $text[0];
|
|
|
|
|
|
|
188 |
|
189 |
+
# ~
|
190 |
|
191 |
+
$blockTypes = $this->unmarkedBlockTypes;
|
192 |
|
193 |
+
if (isset($this->BlockTypes[$marker]))
|
194 |
+
{
|
195 |
+
foreach ($this->BlockTypes[$marker] as $blockType)
|
196 |
+
{
|
197 |
+
$blockTypes []= $blockType;
|
198 |
}
|
199 |
+
}
|
200 |
|
201 |
+
#
|
202 |
+
# ~
|
203 |
|
204 |
+
foreach ($blockTypes as $blockType)
|
205 |
+
{
|
206 |
+
$Block = $this->{'block'.$blockType}($Line, $CurrentBlock);
|
207 |
|
208 |
+
if (isset($Block))
|
209 |
+
{
|
210 |
+
$Block['type'] = $blockType;
|
211 |
|
212 |
+
if ( ! isset($Block['identified']))
|
213 |
+
{
|
214 |
+
$Blocks []= $CurrentBlock;
|
215 |
|
216 |
+
$Block['identified'] = true;
|
217 |
+
}
|
218 |
|
219 |
+
if ($this->isBlockContinuable($blockType))
|
220 |
+
{
|
221 |
+
$Block['continuable'] = true;
|
222 |
+
}
|
223 |
|
224 |
+
$CurrentBlock = $Block;
|
225 |
|
226 |
+
continue 2;
|
|
|
227 |
}
|
228 |
+
}
|
229 |
|
230 |
+
# ~
|
231 |
|
232 |
+
if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted']))
|
233 |
+
{
|
234 |
+
$CurrentBlock['element']['text'] .= "\n".$text;
|
235 |
+
}
|
236 |
+
else
|
237 |
+
{
|
238 |
+
$Blocks []= $CurrentBlock;
|
239 |
|
240 |
+
$CurrentBlock = $this->paragraph($Line);
|
241 |
|
242 |
+
$CurrentBlock['identified'] = true;
|
|
|
243 |
}
|
244 |
+
}
|
245 |
|
246 |
+
# ~
|
247 |
|
248 |
+
if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type']))
|
249 |
+
{
|
250 |
+
$CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
|
251 |
+
}
|
252 |
|
253 |
+
# ~
|
254 |
|
255 |
+
$Blocks []= $CurrentBlock;
|
256 |
|
257 |
+
unset($Blocks[0]);
|
258 |
|
259 |
+
# ~
|
260 |
|
261 |
+
$markup = '';
|
262 |
|
263 |
+
foreach ($Blocks as $Block)
|
264 |
+
{
|
265 |
+
if (isset($Block['hidden']))
|
266 |
+
{
|
267 |
+
continue;
|
268 |
+
}
|
269 |
|
270 |
+
$markup .= "\n";
|
271 |
+
$markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']);
|
272 |
}
|
273 |
|
274 |
+
$markup .= "\n";
|
|
|
275 |
|
276 |
+
# ~
|
|
|
|
|
277 |
|
278 |
+
return $markup;
|
279 |
+
}
|
|
|
280 |
|
281 |
+
#
|
282 |
+
# Allow for plugin extensibility
|
283 |
+
#
|
284 |
+
protected function isBlockContinuable($Type)
|
285 |
+
{
|
286 |
+
return method_exists($this, 'block'.$Type.'Continue');
|
287 |
+
}
|
288 |
|
289 |
+
protected function isBlockCompletable($Type)
|
290 |
+
{
|
291 |
+
return method_exists($this, 'block'.$Type.'Complete');
|
292 |
+
}
|
|
|
|
|
|
|
293 |
|
294 |
+
#
|
295 |
+
# Code
|
|
|
296 |
|
297 |
+
protected function blockCode($Line, $Block = null)
|
298 |
+
{
|
299 |
+
if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted']))
|
300 |
+
{
|
301 |
+
return;
|
302 |
+
}
|
303 |
|
304 |
+
if ($Line['indent'] >= 4)
|
305 |
+
{
|
306 |
+
$text = substr($Line['body'], 4);
|
307 |
|
308 |
+
$Block = array(
|
309 |
+
'element' => array(
|
310 |
+
'name' => 'pre',
|
311 |
+
'handler' => 'element',
|
312 |
+
'text' => array(
|
313 |
+
'name' => 'code',
|
314 |
+
'text' => $text,
|
|
|
315 |
),
|
316 |
+
),
|
317 |
+
);
|
318 |
|
319 |
+
return $Block;
|
|
|
320 |
}
|
321 |
+
}
|
322 |
|
323 |
+
protected function blockCodeContinue($Line, $Block)
|
324 |
+
{
|
325 |
+
if ($Line['indent'] >= 4)
|
326 |
+
{
|
327 |
+
if (isset($Block['interrupted']))
|
328 |
+
{
|
|
|
|
|
329 |
$Block['element']['text']['text'] .= "\n";
|
330 |
|
331 |
+
unset($Block['interrupted']);
|
|
|
|
|
|
|
|
|
332 |
}
|
|
|
333 |
|
334 |
+
$Block['element']['text']['text'] .= "\n";
|
|
|
335 |
|
336 |
+
$text = substr($Line['body'], 4);
|
337 |
|
338 |
+
$Block['element']['text']['text'] .= $text;
|
339 |
|
340 |
return $Block;
|
341 |
}
|
342 |
+
}
|
343 |
|
344 |
+
protected function blockCodeComplete($Block)
|
345 |
+
{
|
346 |
+
$text = $Block['element']['text']['text'];
|
347 |
|
348 |
+
$text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
|
|
|
|
|
|
|
|
|
349 |
|
350 |
+
$Block['element']['text']['text'] = $text;
|
|
|
|
|
351 |
|
352 |
+
return $Block;
|
353 |
+
}
|
|
|
354 |
|
355 |
+
#
|
356 |
+
# Comment
|
|
|
|
|
357 |
|
358 |
+
protected function blockComment($Line)
|
359 |
+
{
|
360 |
+
if ($this->markupEscaped)
|
361 |
+
{
|
362 |
+
return;
|
363 |
+
}
|
364 |
+
|
365 |
+
if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!')
|
366 |
+
{
|
367 |
+
$Block = array(
|
368 |
+
'markup' => $Line['body'],
|
369 |
+
);
|
370 |
|
371 |
+
if (preg_match('/-->$/', $Line['text']))
|
372 |
+
{
|
373 |
$Block['closed'] = true;
|
374 |
}
|
375 |
|
376 |
return $Block;
|
377 |
}
|
378 |
+
}
|
379 |
|
380 |
+
protected function blockCommentContinue($Line, array $Block)
|
381 |
+
{
|
382 |
+
if (isset($Block['closed']))
|
383 |
+
{
|
384 |
+
return;
|
385 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
386 |
|
387 |
+
$Block['markup'] .= "\n" . $Line['body'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
388 |
|
389 |
+
if (preg_match('/-->$/', $Line['text']))
|
390 |
+
{
|
391 |
+
$Block['closed'] = true;
|
392 |
}
|
393 |
|
394 |
+
return $Block;
|
395 |
+
}
|
|
|
|
|
|
|
|
|
|
|
396 |
|
397 |
+
#
|
398 |
+
# Fenced Code
|
399 |
|
400 |
+
protected function blockFencedCode($Line)
|
401 |
+
{
|
402 |
+
if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
|
403 |
+
{
|
404 |
+
$Element = array(
|
405 |
+
'name' => 'code',
|
406 |
+
'text' => '',
|
407 |
+
);
|
408 |
|
409 |
+
if (isset($matches[1]))
|
410 |
+
{
|
411 |
+
$class = 'language-'.$matches[1];
|
412 |
|
413 |
+
$Element['attributes'] = array(
|
414 |
+
'class' => $class,
|
415 |
+
);
|
416 |
}
|
417 |
|
418 |
+
$Block = array(
|
419 |
+
'char' => $Line['text'][0],
|
420 |
+
'element' => array(
|
421 |
+
'name' => 'pre',
|
422 |
+
'handler' => 'element',
|
423 |
+
'text' => $Element,
|
424 |
+
),
|
425 |
+
);
|
426 |
|
427 |
return $Block;
|
428 |
}
|
429 |
+
}
|
430 |
|
431 |
+
protected function blockFencedCodeContinue($Line, $Block)
|
432 |
+
{
|
433 |
+
if (isset($Block['complete']))
|
434 |
+
{
|
435 |
+
return;
|
|
|
|
|
|
|
436 |
}
|
437 |
|
438 |
+
if (isset($Block['interrupted']))
|
439 |
+
{
|
440 |
+
$Block['element']['text']['text'] .= "\n";
|
|
|
|
|
441 |
|
442 |
+
unset($Block['interrupted']);
|
443 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
444 |
|
445 |
+
if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text']))
|
446 |
+
{
|
447 |
+
$Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1);
|
|
|
|
|
|
|
|
|
448 |
|
449 |
+
$Block['complete'] = true;
|
450 |
|
451 |
+
return $Block;
|
|
|
452 |
}
|
453 |
|
454 |
+
$Block['element']['text']['text'] .= "\n".$Line['body'];;
|
|
|
|
|
|
|
455 |
|
456 |
+
return $Block;
|
457 |
+
}
|
458 |
|
459 |
+
protected function blockFencedCodeComplete($Block)
|
460 |
+
{
|
461 |
+
$text = $Block['element']['text']['text'];
|
462 |
|
463 |
+
$text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
|
|
|
|
|
|
|
|
|
|
|
|
|
464 |
|
465 |
+
$Block['element']['text']['text'] = $text;
|
466 |
|
467 |
+
return $Block;
|
468 |
+
}
|
469 |
|
470 |
+
#
|
471 |
+
# Header
|
472 |
|
473 |
+
protected function blockHeader($Line)
|
474 |
+
{
|
475 |
+
if (isset($Line['text'][1]))
|
476 |
+
{
|
477 |
+
$level = 1;
|
478 |
|
479 |
+
while (isset($Line['text'][$level]) and $Line['text'][$level] === '#')
|
480 |
+
{
|
481 |
+
$level ++;
|
482 |
}
|
483 |
|
484 |
+
if ($level > 6)
|
485 |
+
{
|
486 |
+
return;
|
487 |
+
}
|
488 |
|
489 |
+
$text = trim($Line['text'], '# ');
|
490 |
|
491 |
+
$Block = array(
|
492 |
+
'element' => array(
|
493 |
+
'name' => 'h' . min(6, $level),
|
494 |
+
'text' => $text,
|
495 |
+
'handler' => 'line',
|
496 |
+
),
|
497 |
+
);
|
498 |
|
499 |
+
return $Block;
|
|
|
500 |
}
|
501 |
+
}
|
502 |
|
503 |
+
#
|
504 |
+
# List
|
505 |
|
506 |
+
protected function blockList($Line)
|
507 |
+
{
|
508 |
+
list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]');
|
|
|
|
|
|
|
|
|
|
|
|
|
509 |
|
510 |
+
if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches))
|
511 |
+
{
|
512 |
+
$Block = array(
|
513 |
+
'indent' => $Line['indent'],
|
514 |
+
'pattern' => $pattern,
|
515 |
+
'element' => array(
|
516 |
+
'name' => $name,
|
517 |
+
'handler' => 'elements',
|
518 |
+
),
|
519 |
+
);
|
520 |
|
521 |
+
$Block['li'] = array(
|
522 |
+
'name' => 'li',
|
523 |
+
'handler' => 'li',
|
524 |
+
'text' => array(
|
525 |
+
$matches[2],
|
526 |
+
),
|
527 |
+
);
|
528 |
|
529 |
+
$Block['element']['text'] []= & $Block['li'];
|
|
|
530 |
|
531 |
+
return $Block;
|
532 |
+
}
|
533 |
+
}
|
534 |
+
|
535 |
+
protected function blockListContinue($Line, array $Block)
|
536 |
+
{
|
537 |
+
if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches))
|
538 |
+
{
|
539 |
+
if (isset($Block['interrupted']))
|
540 |
+
{
|
541 |
+
$Block['li']['text'] []= '';
|
542 |
|
543 |
+
unset($Block['interrupted']);
|
544 |
}
|
545 |
|
546 |
+
unset($Block['li']);
|
|
|
547 |
|
548 |
+
$text = isset($matches[1]) ? $matches[1] : '';
|
|
|
|
|
549 |
|
550 |
+
$Block['li'] = array(
|
551 |
+
'name' => 'li',
|
552 |
+
'handler' => 'li',
|
553 |
+
'text' => array(
|
554 |
+
$text,
|
555 |
+
),
|
556 |
+
);
|
557 |
|
558 |
+
$Block['element']['text'] []= & $Block['li'];
|
|
|
|
|
|
|
|
|
|
|
|
|
559 |
|
560 |
+
return $Block;
|
|
|
561 |
}
|
562 |
|
563 |
+
if ($Line['text'][0] === '[' and $this->blockReference($Line))
|
564 |
+
{
|
565 |
+
return $Block;
|
566 |
+
}
|
567 |
|
568 |
+
if ( ! isset($Block['interrupted']))
|
569 |
+
{
|
570 |
+
$text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
|
|
|
571 |
|
572 |
+
$Block['li']['text'] []= $text;
|
|
|
573 |
|
574 |
+
return $Block;
|
|
|
575 |
}
|
576 |
|
577 |
+
if ($Line['indent'] > 0)
|
578 |
+
{
|
579 |
+
$Block['li']['text'] []= '';
|
580 |
|
581 |
+
$text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
|
|
|
|
|
|
|
|
|
582 |
|
583 |
+
$Block['li']['text'] []= $text;
|
|
|
|
|
584 |
|
585 |
+
unset($Block['interrupted']);
|
|
|
|
|
|
|
|
|
|
|
586 |
|
587 |
+
return $Block;
|
|
|
588 |
}
|
589 |
+
}
|
590 |
|
591 |
+
#
|
592 |
+
# Quote
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
593 |
|
594 |
+
protected function blockQuote($Line)
|
595 |
+
{
|
596 |
+
if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
|
597 |
+
{
|
598 |
+
$Block = array(
|
599 |
+
'element' => array(
|
600 |
+
'name' => 'blockquote',
|
601 |
+
'handler' => 'lines',
|
602 |
+
'text' => (array) $matches[1],
|
603 |
+
),
|
604 |
+
);
|
605 |
|
606 |
return $Block;
|
607 |
}
|
608 |
+
}
|
609 |
|
610 |
+
protected function blockQuoteContinue($Line, array $Block)
|
611 |
+
{
|
612 |
+
if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
|
613 |
+
{
|
614 |
+
if (isset($Block['interrupted']))
|
615 |
+
{
|
616 |
+
$Block['element']['text'] []= '';
|
617 |
|
618 |
+
unset($Block['interrupted']);
|
|
|
|
|
619 |
}
|
620 |
|
621 |
+
$Block['element']['text'] []= $matches[1];
|
|
|
622 |
|
623 |
+
return $Block;
|
624 |
+
}
|
625 |
|
626 |
+
if ( ! isset($Block['interrupted']))
|
627 |
+
{
|
628 |
+
$Block['element']['text'] []= $Line['text'];
|
629 |
|
630 |
+
return $Block;
|
631 |
+
}
|
632 |
+
}
|
633 |
|
634 |
+
#
|
635 |
+
# Rule
|
636 |
|
637 |
+
protected function blockRule($Line)
|
638 |
+
{
|
639 |
+
if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text']))
|
640 |
+
{
|
641 |
+
$Block = array(
|
642 |
+
'element' => array(
|
643 |
+
'name' => 'hr'
|
644 |
+
),
|
645 |
+
);
|
646 |
|
647 |
+
return $Block;
|
648 |
+
}
|
649 |
+
}
|
650 |
|
651 |
+
#
|
652 |
+
# Setext
|
|
|
653 |
|
654 |
+
protected function blockSetextHeader($Line, array $Block = null)
|
655 |
+
{
|
656 |
+
if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
|
657 |
+
{
|
658 |
+
return;
|
659 |
+
}
|
660 |
|
661 |
+
if (chop($Line['text'], $Line['text'][0]) === '')
|
662 |
+
{
|
663 |
+
$Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2';
|
664 |
|
665 |
+
return $Block;
|
666 |
+
}
|
667 |
+
}
|
668 |
|
669 |
+
#
|
670 |
+
# Markup
|
671 |
|
672 |
+
protected function blockMarkup($Line)
|
673 |
+
{
|
674 |
+
if ($this->markupEscaped)
|
675 |
+
{
|
676 |
+
return;
|
677 |
+
}
|
678 |
|
679 |
+
if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches))
|
680 |
+
{
|
681 |
+
$element = strtolower($matches[1]);
|
682 |
|
683 |
+
if (in_array($element, $this->textLevelElements))
|
684 |
+
{
|
685 |
+
return;
|
686 |
+
}
|
687 |
|
688 |
+
$Block = array(
|
689 |
+
'name' => $matches[1],
|
690 |
+
'depth' => 0,
|
691 |
+
'markup' => $Line['text'],
|
692 |
+
);
|
693 |
|
694 |
+
$length = strlen($matches[0]);
|
|
|
|
|
|
|
|
|
695 |
|
696 |
+
$remainder = substr($Line['text'], $length);
|
|
|
697 |
|
698 |
+
if (trim($remainder) === '')
|
699 |
+
{
|
700 |
+
if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
|
701 |
+
{
|
702 |
+
$Block['closed'] = true;
|
703 |
|
704 |
+
$Block['void'] = true;
|
705 |
+
}
|
706 |
+
}
|
707 |
+
else
|
708 |
+
{
|
709 |
+
if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
|
710 |
+
{
|
711 |
+
return;
|
712 |
}
|
713 |
|
714 |
+
if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder))
|
715 |
+
{
|
716 |
+
$Block['closed'] = true;
|
717 |
+
}
|
718 |
+
}
|
719 |
|
720 |
+
return $Block;
|
721 |
+
}
|
722 |
+
}
|
|
|
|
|
|
|
|
|
|
|
723 |
|
724 |
+
protected function blockMarkupContinue($Line, array $Block)
|
725 |
+
{
|
726 |
+
if (isset($Block['closed']))
|
727 |
+
{
|
728 |
+
return;
|
729 |
+
}
|
730 |
|
731 |
+
if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open
|
732 |
+
{
|
733 |
+
$Block['depth'] ++;
|
734 |
+
}
|
|
|
735 |
|
736 |
+
if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close
|
737 |
+
{
|
738 |
+
if ($Block['depth'] > 0)
|
739 |
+
{
|
740 |
+
$Block['depth'] --;
|
741 |
+
}
|
742 |
+
else
|
743 |
+
{
|
744 |
+
$Block['closed'] = true;
|
745 |
+
}
|
746 |
+
}
|
747 |
+
|
748 |
+
if (isset($Block['interrupted']))
|
749 |
+
{
|
750 |
+
$Block['markup'] .= "\n";
|
751 |
+
|
752 |
+
unset($Block['interrupted']);
|
753 |
+
}
|
754 |
+
|
755 |
+
$Block['markup'] .= "\n".$Line['body'];
|
756 |
+
|
757 |
+
return $Block;
|
758 |
+
}
|
759 |
+
|
760 |
+
#
|
761 |
+
# Reference
|
762 |
|
763 |
+
protected function blockReference($Line)
|
764 |
+
{
|
765 |
+
if (preg_match('/^\[(.+?)\]:[ ]*<?(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches))
|
766 |
+
{
|
767 |
+
$id = strtolower($matches[1]);
|
768 |
+
|
769 |
+
$Data = array(
|
770 |
+
'url' => $matches[2],
|
771 |
+
'title' => null,
|
772 |
+
);
|
773 |
+
|
774 |
+
if (isset($matches[3]))
|
775 |
+
{
|
776 |
+
$Data['title'] = $matches[3];
|
777 |
}
|
778 |
+
|
779 |
+
$this->DefinitionData['Reference'][$id] = $Data;
|
780 |
+
|
781 |
+
$Block = array(
|
782 |
+
'hidden' => true,
|
783 |
+
);
|
784 |
+
|
785 |
+
return $Block;
|
786 |
}
|
787 |
+
}
|
788 |
|
789 |
+
#
|
790 |
+
# Table
|
|
|
791 |
|
792 |
+
protected function blockTable($Line, array $Block = null)
|
793 |
+
{
|
794 |
+
if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
|
795 |
+
{
|
796 |
+
return;
|
797 |
+
}
|
798 |
|
799 |
+
if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '')
|
800 |
+
{
|
801 |
+
$alignments = array();
|
802 |
|
803 |
+
$divider = $Line['text'];
|
804 |
|
805 |
+
$divider = trim($divider);
|
806 |
+
$divider = trim($divider, '|');
|
807 |
|
808 |
+
$dividerCells = explode('|', $divider);
|
|
|
|
|
|
|
|
|
809 |
|
810 |
+
foreach ($dividerCells as $dividerCell)
|
811 |
+
{
|
812 |
+
$dividerCell = trim($dividerCell);
|
|
|
|
|
813 |
|
814 |
+
if ($dividerCell === '')
|
815 |
+
{
|
816 |
+
continue;
|
817 |
}
|
818 |
|
819 |
+
$alignment = null;
|
|
|
|
|
|
|
|
|
820 |
|
821 |
+
if ($dividerCell[0] === ':')
|
822 |
+
{
|
823 |
+
$alignment = 'left';
|
824 |
+
}
|
825 |
+
|
826 |
+
if (substr($dividerCell, - 1) === ':')
|
827 |
+
{
|
828 |
+
$alignment = $alignment === 'left' ? 'center' : 'right';
|
829 |
+
}
|
830 |
|
831 |
+
$alignments []= $alignment;
|
832 |
}
|
|
|
833 |
|
834 |
+
# ~
|
|
|
|
|
835 |
|
836 |
+
$HeaderElements = array();
|
837 |
+
|
838 |
+
$header = $Block['element']['text'];
|
839 |
+
|
840 |
+
$header = trim($header);
|
841 |
+
$header = trim($header, '|');
|
842 |
+
|
843 |
+
$headerCells = explode('|', $header);
|
844 |
+
|
845 |
+
foreach ($headerCells as $index => $headerCell)
|
846 |
+
{
|
847 |
+
$headerCell = trim($headerCell);
|
848 |
+
|
849 |
+
$HeaderElement = array(
|
850 |
+
'name' => 'th',
|
851 |
+
'text' => $headerCell,
|
852 |
+
'handler' => 'line',
|
853 |
);
|
854 |
|
855 |
+
if (isset($alignments[$index]))
|
856 |
+
{
|
857 |
+
$alignment = $alignments[$index];
|
858 |
+
|
859 |
+
$HeaderElement['attributes'] = array(
|
860 |
+
'style' => 'text-align: '.$alignment.';',
|
861 |
+
);
|
862 |
}
|
863 |
|
864 |
+
$HeaderElements []= $HeaderElement;
|
865 |
}
|
|
|
866 |
|
867 |
+
# ~
|
|
|
|
|
868 |
|
|
|
869 |
$Block = array(
|
870 |
+
'alignments' => $alignments,
|
871 |
+
'identified' => true,
|
872 |
'element' => array(
|
873 |
+
'name' => 'table',
|
874 |
+
'handler' => 'elements',
|
|
|
875 |
),
|
876 |
);
|
877 |
|
878 |
+
$Block['element']['text'] []= array(
|
879 |
+
'name' => 'thead',
|
880 |
+
'handler' => 'elements',
|
881 |
+
);
|
882 |
|
883 |
+
$Block['element']['text'] []= array(
|
884 |
+
'name' => 'tbody',
|
885 |
+
'handler' => 'elements',
|
886 |
+
'text' => array(),
|
887 |
+
);
|
888 |
|
889 |
+
$Block['element']['text'][0]['text'] []= array(
|
890 |
+
'name' => 'tr',
|
891 |
+
'handler' => 'elements',
|
892 |
+
'text' => $HeaderElements,
|
893 |
+
);
|
894 |
|
895 |
+
return $Block;
|
896 |
+
}
|
897 |
+
}
|
|
|
|
|
898 |
|
899 |
+
protected function blockTableContinue($Line, array $Block)
|
900 |
+
{
|
901 |
+
if (isset($Block['interrupted']))
|
902 |
+
{
|
903 |
+
return;
|
904 |
+
}
|
905 |
|
906 |
+
if ($Line['text'][0] === '|' or strpos($Line['text'], '|'))
|
907 |
+
{
|
908 |
+
$Elements = array();
|
|
|
|
|
909 |
|
910 |
+
$row = $Line['text'];
|
|
|
|
|
|
|
911 |
|
912 |
+
$row = trim($row);
|
913 |
+
$row = trim($row, '|');
|
914 |
|
915 |
+
preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches);
|
|
|
916 |
|
917 |
+
foreach ($matches[0] as $index => $cell)
|
918 |
+
{
|
919 |
+
$cell = trim($cell);
|
|
|
920 |
|
921 |
+
$Element = array(
|
922 |
+
'name' => 'td',
|
923 |
+
'handler' => 'line',
|
924 |
+
'text' => $cell,
|
925 |
+
);
|
926 |
|
927 |
+
if (isset($Block['alignments'][$index]))
|
928 |
{
|
929 |
+
$Element['attributes'] = array(
|
930 |
+
'style' => 'text-align: '.$Block['alignments'][$index].';',
|
931 |
+
);
|
932 |
}
|
933 |
|
934 |
+
$Elements []= $Element;
|
935 |
}
|
936 |
|
937 |
+
$Element = array(
|
938 |
+
'name' => 'tr',
|
939 |
+
'handler' => 'elements',
|
940 |
+
'text' => $Elements,
|
941 |
+
);
|
942 |
|
943 |
+
$Block['element']['text'][1]['text'] []= $Element;
|
|
|
944 |
|
945 |
+
return $Block;
|
946 |
+
}
|
947 |
+
}
|
948 |
|
949 |
+
#
|
950 |
+
# ~
|
951 |
+
#
|
952 |
+
|
953 |
+
protected function paragraph($Line)
|
954 |
+
{
|
955 |
+
$Block = array(
|
956 |
+
'element' => array(
|
957 |
+
'name' => 'p',
|
958 |
+
'text' => $Line['text'],
|
959 |
+
'handler' => 'line',
|
960 |
+
),
|
961 |
);
|
962 |
|
963 |
+
return $Block;
|
964 |
+
}
|
|
|
965 |
|
966 |
+
#
|
967 |
+
# Inline Elements
|
968 |
+
#
|
969 |
|
970 |
+
protected $InlineTypes = array(
|
971 |
+
'"' => array('SpecialCharacter'),
|
972 |
+
'!' => array('Image'),
|
973 |
+
'&' => array('SpecialCharacter'),
|
974 |
+
'*' => array('Emphasis'),
|
975 |
+
':' => array('Url'),
|
976 |
+
'<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'),
|
977 |
+
'>' => array('SpecialCharacter'),
|
978 |
+
'[' => array('Link'),
|
979 |
+
'_' => array('Emphasis'),
|
980 |
+
'`' => array('Code'),
|
981 |
+
'~' => array('Strikethrough'),
|
982 |
+
'\\' => array('EscapeSequence'),
|
983 |
+
);
|
984 |
|
985 |
+
# ~
|
986 |
|
987 |
+
protected $inlineMarkerList = '!"*_&[:<>`~\\';
|
988 |
|
989 |
+
#
|
990 |
+
# ~
|
991 |
+
#
|
992 |
|
993 |
+
public function line($text)
|
994 |
+
{
|
995 |
+
$markup = '';
|
996 |
|
997 |
+
# $excerpt is based on the first occurrence of a marker
|
998 |
|
999 |
+
while ($excerpt = strpbrk($text, $this->inlineMarkerList))
|
1000 |
+
{
|
1001 |
+
$marker = $excerpt[0];
|
1002 |
|
1003 |
+
$markerPosition = strpos($text, $marker);
|
1004 |
|
1005 |
+
$Excerpt = array('text' => $excerpt, 'context' => $text);
|
|
|
|
|
1006 |
|
1007 |
+
foreach ($this->InlineTypes[$marker] as $inlineType)
|
1008 |
+
{
|
1009 |
+
$Inline = $this->{'inline'.$inlineType}($Excerpt);
|
1010 |
|
1011 |
+
if ( ! isset($Inline))
|
1012 |
+
{
|
1013 |
+
continue;
|
1014 |
+
}
|
1015 |
|
1016 |
+
# makes sure that the inline belongs to "our" marker
|
1017 |
|
1018 |
+
if (isset($Inline['position']) and $Inline['position'] > $markerPosition)
|
1019 |
+
{
|
1020 |
+
continue;
|
1021 |
+
}
|
1022 |
|
1023 |
+
# sets a default inline position
|
1024 |
|
1025 |
+
if ( ! isset($Inline['position']))
|
1026 |
+
{
|
1027 |
+
$Inline['position'] = $markerPosition;
|
1028 |
+
}
|
1029 |
|
1030 |
+
# the text that comes before the inline
|
1031 |
+
$unmarkedText = substr($text, 0, $Inline['position']);
|
1032 |
|
1033 |
+
# compile the unmarked text
|
1034 |
+
$markup .= $this->unmarkedText($unmarkedText);
|
1035 |
|
1036 |
+
# compile the inline
|
1037 |
+
$markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']);
|
1038 |
|
1039 |
+
# remove the examined text
|
1040 |
+
$text = substr($text, $Inline['position'] + $Inline['extent']);
|
1041 |
|
1042 |
+
continue 2;
|
1043 |
+
}
|
1044 |
|
1045 |
+
# the marker does not belong to an inline
|
1046 |
|
1047 |
+
$unmarkedText = substr($text, 0, $markerPosition + 1);
|
|
|
1048 |
|
1049 |
+
$markup .= $this->unmarkedText($unmarkedText);
|
1050 |
|
1051 |
+
$text = substr($text, $markerPosition + 1);
|
1052 |
}
|
1053 |
|
1054 |
+
$markup .= $this->unmarkedText($text);
|
|
|
|
|
1055 |
|
1056 |
+
return $markup;
|
1057 |
+
}
|
|
|
|
|
1058 |
|
1059 |
+
#
|
1060 |
+
# ~
|
1061 |
+
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1062 |
|
1063 |
+
protected function inlineCode($Excerpt)
|
1064 |
+
{
|
1065 |
+
$marker = $Excerpt['text'][0];
|
|
|
|
|
|
|
|
|
|
|
1066 |
|
1067 |
+
if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(?<!'.$marker.')\1(?!'.$marker.')/s', $Excerpt['text'], $matches))
|
1068 |
+
{
|
1069 |
+
$text = $matches[2];
|
1070 |
+
$text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
|
1071 |
+
$text = preg_replace("/[ ]*\n/", ' ', $text);
|
1072 |
|
1073 |
+
return array(
|
1074 |
+
'extent' => strlen($matches[0]),
|
1075 |
+
'element' => array(
|
1076 |
+
'name' => 'code',
|
1077 |
+
'text' => $text,
|
1078 |
+
),
|
1079 |
+
);
|
|
|
|
|
|
|
1080 |
}
|
1081 |
+
}
|
1082 |
|
1083 |
+
protected function inlineEmailTag($Excerpt)
|
1084 |
+
{
|
1085 |
+
if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches))
|
1086 |
+
{
|
1087 |
+
$url = $matches[1];
|
1088 |
+
|
1089 |
+
if ( ! isset($matches[2]))
|
1090 |
+
{
|
1091 |
+
$url = 'mailto:' . $url;
|
1092 |
}
|
|
|
1093 |
|
|
|
1094 |
return array(
|
1095 |
+
'extent' => strlen($matches[0]),
|
1096 |
+
'element' => array(
|
1097 |
+
'name' => 'a',
|
1098 |
+
'text' => $matches[1],
|
1099 |
+
'attributes' => array(
|
1100 |
+
'href' => $url,
|
1101 |
+
),
|
1102 |
+
),
|
1103 |
);
|
1104 |
}
|
1105 |
+
}
|
1106 |
|
1107 |
+
protected function inlineEmphasis($Excerpt)
|
1108 |
+
{
|
1109 |
+
if ( ! isset($Excerpt['text'][1]))
|
1110 |
+
{
|
1111 |
+
return;
|
1112 |
+
}
|
1113 |
|
1114 |
+
$marker = $Excerpt['text'][0];
|
1115 |
+
|
1116 |
+
if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches))
|
1117 |
+
{
|
1118 |
+
$emphasis = 'strong';
|
1119 |
+
}
|
1120 |
+
elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches))
|
1121 |
+
{
|
1122 |
+
$emphasis = 'em';
|
1123 |
+
}
|
1124 |
+
else
|
1125 |
+
{
|
1126 |
+
return;
|
1127 |
}
|
1128 |
|
1129 |
+
return array(
|
1130 |
+
'extent' => strlen($matches[0]),
|
1131 |
+
'element' => array(
|
1132 |
+
'name' => $emphasis,
|
1133 |
+
'handler' => 'line',
|
1134 |
+
'text' => $matches[1],
|
1135 |
+
),
|
1136 |
+
);
|
1137 |
+
}
|
1138 |
+
|
1139 |
+
protected function inlineEscapeSequence($Excerpt)
|
1140 |
+
{
|
1141 |
+
if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters))
|
1142 |
+
{
|
1143 |
+
return array(
|
1144 |
+
'markup' => $Excerpt['text'][1],
|
1145 |
+
'extent' => 2,
|
1146 |
+
);
|
1147 |
}
|
1148 |
+
}
|
1149 |
|
1150 |
+
protected function inlineImage($Excerpt)
|
1151 |
+
{
|
1152 |
+
if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[')
|
1153 |
+
{
|
1154 |
+
return;
|
|
|
|
|
1155 |
}
|
1156 |
|
1157 |
+
$Excerpt['text']= substr($Excerpt['text'], 1);
|
|
|
1158 |
|
1159 |
+
$Link = $this->inlineLink($Excerpt);
|
|
|
|
|
1160 |
|
1161 |
+
if ($Link === null)
|
1162 |
+
{
|
1163 |
+
return;
|
|
|
|
|
|
|
|
|
|
|
1164 |
}
|
1165 |
|
1166 |
+
$Inline = array(
|
1167 |
+
'extent' => $Link['extent'] + 1,
|
1168 |
+
'element' => array(
|
1169 |
+
'name' => 'img',
|
1170 |
+
'attributes' => array(
|
1171 |
+
'src' => $Link['element']['attributes']['href'],
|
1172 |
+
'alt' => $Link['element']['text'],
|
1173 |
+
),
|
1174 |
+
),
|
1175 |
+
);
|
1176 |
+
|
1177 |
+
$Inline['element']['attributes'] += $Link['element']['attributes'];
|
1178 |
|
1179 |
+
unset($Inline['element']['attributes']['href']);
|
|
|
1180 |
|
1181 |
+
return $Inline;
|
1182 |
+
}
|
1183 |
|
1184 |
+
protected function inlineLink($Excerpt)
|
1185 |
+
{
|
1186 |
+
$Element = array(
|
1187 |
+
'name' => 'a',
|
1188 |
+
'handler' => 'line',
|
1189 |
+
'text' => null,
|
1190 |
+
'attributes' => array(
|
1191 |
+
'href' => null,
|
1192 |
+
'title' => null,
|
1193 |
+
),
|
1194 |
+
);
|
1195 |
|
1196 |
+
$extent = 0;
|
|
|
1197 |
|
1198 |
+
$remainder = $Excerpt['text'];
|
|
|
1199 |
|
1200 |
+
if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches))
|
1201 |
+
{
|
1202 |
+
$Element['text'] = $matches[1];
|
|
|
|
|
|
|
1203 |
|
1204 |
+
$extent += strlen($matches[0]);
|
|
|
|
|
|
|
|
|
1205 |
|
1206 |
+
$remainder = substr($remainder, $extent);
|
1207 |
+
}
|
1208 |
+
else
|
1209 |
+
{
|
1210 |
+
return;
|
1211 |
+
}
|
1212 |
|
1213 |
+
if (preg_match('/^[(]((?:[^ ()]|[(][^ )]+[)])+)(?:[ ]+("[^"]*"|\'[^\']*\'))?[)]/', $remainder, $matches))
|
1214 |
+
{
|
1215 |
+
$Element['attributes']['href'] = $matches[1];
|
1216 |
+
|
1217 |
+
if (isset($matches[2]))
|
1218 |
+
{
|
1219 |
+
$Element['attributes']['title'] = substr($matches[2], 1, - 1);
|
1220 |
}
|
1221 |
|
1222 |
+
$extent += strlen($matches[0]);
|
1223 |
+
}
|
1224 |
+
else
|
1225 |
+
{
|
1226 |
+
if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches))
|
1227 |
+
{
|
1228 |
+
$definition = strlen($matches[1]) ? $matches[1] : $Element['text'];
|
1229 |
+
$definition = strtolower($definition);
|
1230 |
|
1231 |
+
$extent += strlen($matches[0]);
|
1232 |
+
}
|
1233 |
+
else
|
1234 |
+
{
|
1235 |
+
$definition = strtolower($Element['text']);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1236 |
}
|
1237 |
|
1238 |
+
if ( ! isset($this->DefinitionData['Reference'][$definition]))
|
1239 |
+
{
|
1240 |
+
return;
|
1241 |
}
|
1242 |
|
1243 |
+
$Definition = $this->DefinitionData['Reference'][$definition];
|
1244 |
+
|
1245 |
+
$Element['attributes']['href'] = $Definition['url'];
|
1246 |
+
$Element['attributes']['title'] = $Definition['title'];
|
1247 |
+
}
|
1248 |
+
|
1249 |
+
$Element['attributes']['href'] = str_replace(array('&', '<'), array('&', '<'), $Element['attributes']['href']);
|
1250 |
+
|
1251 |
+
return array(
|
1252 |
+
'extent' => $extent,
|
1253 |
+
'element' => $Element,
|
1254 |
+
);
|
1255 |
+
}
|
1256 |
+
|
1257 |
+
protected function inlineMarkup($Excerpt)
|
1258 |
+
{
|
1259 |
+
if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false)
|
1260 |
+
{
|
1261 |
+
return;
|
1262 |
+
}
|
1263 |
+
|
1264 |
+
if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches))
|
1265 |
+
{
|
1266 |
return array(
|
1267 |
+
'markup' => $matches[0],
|
1268 |
+
'extent' => strlen($matches[0]),
|
1269 |
);
|
1270 |
}
|
1271 |
|
1272 |
+
if ($Excerpt['text'][1] === '!' and preg_match('/^<!---?[^>-](?:-?[^-])*-->/s', $Excerpt['text'], $matches))
|
1273 |
+
{
|
1274 |
+
return array(
|
1275 |
+
'markup' => $matches[0],
|
1276 |
+
'extent' => strlen($matches[0]),
|
1277 |
+
);
|
1278 |
+
}
|
1279 |
|
1280 |
+
if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches))
|
1281 |
+
{
|
1282 |
+
return array(
|
1283 |
+
'markup' => $matches[0],
|
1284 |
+
'extent' => strlen($matches[0]),
|
1285 |
+
);
|
1286 |
+
}
|
1287 |
+
}
|
1288 |
|
1289 |
+
protected function inlineSpecialCharacter($Excerpt)
|
1290 |
+
{
|
1291 |
+
if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text']))
|
1292 |
+
{
|
1293 |
+
return array(
|
1294 |
+
'markup' => '&',
|
1295 |
+
'extent' => 1,
|
1296 |
+
);
|
1297 |
+
}
|