Version Description
= 1.5.1 = - New: Improved modal, added view types - Tweak: Proper date if none set in WordPress settings - Tweak: Updated libraries - Tweak: Added wp_mail hook to very last priority
Download this release
Release Info
Developer | No3x |
Plugin | WP Mail Logging |
Version | 1.6.0 |
Comparing to | |
See all releases |
Code changes from version 1.5.2 to 1.6.0
- WPML_API_Example.php +84 -54
- WPML_DI_Container.php +24 -0
- WPML_Email_Log_List.php +450 -330
- WPML_Init.php +152 -0
- WPML_InstallIndicator.php +186 -188
- WPML_LifeCycle.php +214 -205
- WPML_LogRotation.php +120 -84
- WPML_OptionsManager.php +602 -553
- WPML_Plugin.php +201 -195
- WPML_ShortCodeLoader.php +67 -65
- WPML_ShortCodeScriptLoader.php +69 -69
- WPML_Utils.php +113 -106
- autoload.php +168 -0
- css/modal.css +98 -93
- css/modal.less +140 -134
- inc/redux/{options-init.php → WPML_Redux_Framework_config.php} +611 -586
- inc/redux/admin-init.php +11 -18
- inc/redux/redux-extensions/LICENSE +0 -674
- inc/redux/redux-extensions/README.md +0 -17
- inc/redux/redux-extensions/extensions-init.php +0 -11
- inc/redux/redux-extensions/extensions/readme.txt +0 -1
- inc/redux/redux-extensions/loader.php +0 -30
- inc/redux/redux-framework/.jshintrc +0 -19
- inc/redux/redux-framework/.tx/config +0 -8
- inc/redux/redux-framework/CHANGELOG.md +0 -1596
- inc/redux/redux-framework/CONTRIBUTING.md +0 -27
- inc/redux/redux-framework/Gruntfile.js +0 -441
- inc/redux/redux-framework/README.md +0 -84
- inc/redux/redux-framework/README.txt +0 -1024
- inc/redux/redux-framework/ReduxCore/assets/css/redux-admin.css +0 -1
- inc/redux/redux-framework/ReduxCore/assets/css/redux-fields.css +0 -1
- inc/redux/redux-framework/ReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css +0 -9
- inc/redux/redux-framework/ReduxCore/assets/css/vendor/qtip/jquery.qtip.css +0 -623
- inc/redux/redux-framework/ReduxCore/assets/css/vendor/qtip/jquery.qtip.min.css +0 -2
- inc/redux/redux-framework/ReduxCore/assets/js/redux.min.js +0 -3
- inc/redux/redux-framework/ReduxCore/assets/js/vendor.min.js +0 -2
- inc/redux/redux-framework/ReduxCore/assets/js/vendor/qtip/jquery.qtip.js +0 -3951
- inc/redux/redux-framework/ReduxCore/assets/js/vendor/qtip/jquery.qtip.min.js +0 -3
- inc/redux/redux-framework/ReduxCore/assets/js/vendor/redux.select2.sortable.min.js +0 -1
- inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/README.md +0 -114
- inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/release.sh +0 -79
- inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/select2-bootstrap.css +0 -87
- inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/select2-spinner.gif +0 -0
- inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/select2.css +0 -624
WPML_API_Example.php
CHANGED
@@ -1,55 +1,85 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
*
|
10 |
-
*
|
11 |
-
|
12 |
-
class
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
*
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace No3x\WPML;
|
4 |
+
|
5 |
+
// Exit if accessed directly.
|
6 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* @author No3x
|
10 |
+
* @since 1.0
|
11 |
+
* The Plugin provides mechanisms to extend the displayed data.
|
12 |
+
* This class is not an API class. It is just an example how to hook in.
|
13 |
+
* If you consider writing a plugin please contact me for better hook support/documentation.
|
14 |
+
*/
|
15 |
+
class WPML_API_Example {
|
16 |
+
|
17 |
+
// require_once('WPML_API_Example.php');
|
18 |
+
// $aAPI = new WPML_API_Example();
|
19 |
+
|
20 |
+
public function addActionsAndFilters() {
|
21 |
+
// In this example we are going to add a column 'test' in add_column.
|
22 |
+
add_filter( WPML_Plugin::HOOK_LOGGING_COLUMNS, array( &$this, 'add_column' ) );
|
23 |
+
add_filter( WPML_Plugin::HOOK_LOGGING_COLUMNS_RENDER, array( &$this, 'render_column' ), 10, 2 );
|
24 |
+
// Change the supported formats of modal e.g. dashed:
|
25 |
+
add_filter( WPML_Plugin::HOOK_LOGGING_SUPPORTED_FORMATS, array( &$this, 'add_supported_format') );
|
26 |
+
// Change content of format dashed HOOK_LOGGING_FORMAT_CONTENT_{$your_format} e.g. dashed:
|
27 |
+
add_filter( WPML_Plugin::HOOK_LOGGING_FORMAT_CONTENT . '_dashed', array( &$this, 'supported_format_dashed') );
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Is called when List Table is gathering columns.
|
32 |
+
* @since 1.0
|
33 |
+
* @param array $columns Array of columns.
|
34 |
+
* @return array $columns Updated array of columns.
|
35 |
+
*/
|
36 |
+
public function add_column( $columns ) {
|
37 |
+
return $columns = array_merge( $columns,
|
38 |
+
array( 'test' => __( 'test', 'wpml' ) )
|
39 |
+
//,array('test2' => __( 'test2', 'wpml' ) ) // ...
|
40 |
+
);
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Is called when the List Table could not find the column. So we can hook in and modify the column.
|
45 |
+
* @since 1.0
|
46 |
+
* @param array $item A singular item (one full row's worth of data).
|
47 |
+
* @param array $column_name The name/slug of the column to be processed.
|
48 |
+
* @return string Text or HTML to be placed inside the column <td>
|
49 |
+
*/
|
50 |
+
public function render_column( $item, $column_name ) {
|
51 |
+
switch ( $column_name ) {
|
52 |
+
case 'test':
|
53 |
+
return 'display relevant data. item contains all information you need about the row. You can process the data and add the result to this column. You can access it like this: $item[$column_name]';
|
54 |
+
default:
|
55 |
+
return '';
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Is called when supported formats are collected. You can add a format here then you can provide a content function.
|
61 |
+
* @since 1.6.0
|
62 |
+
* @param array $formats supported formats
|
63 |
+
* @return array supported formats + your additional formats
|
64 |
+
* @see WPML_Plugin::HOOK_LOGGING_SUPPORTED_FORMATS
|
65 |
+
*/
|
66 |
+
public function add_supported_format( $formats ) {
|
67 |
+
$formats[] = 'dashed';
|
68 |
+
return $formats;
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* This function is called for each of your additional formats. Change the content of the modal here.
|
73 |
+
* For example I add some dashes.
|
74 |
+
* @since 1.6.0
|
75 |
+
* @param $mail
|
76 |
+
* @return string
|
77 |
+
* @see WPML_Plugin::HOOK_LOGGING_FORMAT_CONTENT
|
78 |
+
*/
|
79 |
+
public function supported_format_dashed( $mail ) {
|
80 |
+
$dashedAppend = '';
|
81 |
+
foreach( $mail as $property => $value )
|
82 |
+
$dashedAppend .= str_replace(' ', '-', $value);
|
83 |
+
return $dashedAppend;
|
84 |
+
}
|
85 |
}
|
WPML_DI_Container.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* User: No3x
|
4 |
+
* Date: 06.09.15
|
5 |
+
* Time: 12:47
|
6 |
+
*/
|
7 |
+
|
8 |
+
namespace No3x\WPML;
|
9 |
+
use No3x\WPML\Pimple\Container;
|
10 |
+
|
11 |
+
class WPML_DI_Container extends Container {
|
12 |
+
|
13 |
+
public function addActionsAndFilters() {
|
14 |
+
foreach ( $this->keys() as $key ) {
|
15 |
+
$content = $this[ $key ];
|
16 |
+
if ( is_object( $content ) ) {
|
17 |
+
$reflection = new \ReflectionClass( $content );
|
18 |
+
if ( $reflection->hasMethod( 'addActionsAndFilters' ) ) {
|
19 |
+
$content->addActionsAndFilters();
|
20 |
+
}
|
21 |
+
}
|
22 |
+
}
|
23 |
+
}
|
24 |
+
}
|
WPML_Email_Log_List.php
CHANGED
@@ -1,330 +1,450 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
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 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
*
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
$orderby
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
$
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
$
|
142 |
-
|
143 |
-
$
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
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 |
-
|
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 |
-
return
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace No3x\WPML;
|
4 |
+
|
5 |
+
use No3x\WPML\Model\WPML_Mail as Mail;
|
6 |
+
|
7 |
+
// Exit if accessed directly.
|
8 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
9 |
+
|
10 |
+
require_once( ABSPATH . 'wp-admin/includes/screen.php' );
|
11 |
+
require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
|
12 |
+
|
13 |
+
if ( ! class_exists( 'WP_List_Table' ) ) {
|
14 |
+
require_once( plugin_dir_path( __FILE__ ) . 'inc/class-wp-list-table.php' );
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Renders the mails in a table list.
|
19 |
+
* @author No3x
|
20 |
+
* @since 1.0
|
21 |
+
*/
|
22 |
+
class WPML_Email_Log_List extends \WP_List_Table {
|
23 |
+
|
24 |
+
const NONCE_LIST_TABLE = 'wpml-list_table';
|
25 |
+
private $supported_formats = array();
|
26 |
+
/**
|
27 |
+
* Initializes the List Table
|
28 |
+
* @since 1.0
|
29 |
+
*/
|
30 |
+
function __construct( $supported_formats = array() ) {
|
31 |
+
$this->supported_formats = $supported_formats;
|
32 |
+
}
|
33 |
+
|
34 |
+
function addActionsAndFilters() {
|
35 |
+
add_action( 'admin_init', array( $this, 'init') );
|
36 |
+
add_filter( WPML_Plugin::HOOK_LOGGING_SUPPORTED_FORMATS, function() {
|
37 |
+
return $this->supported_formats;
|
38 |
+
} );
|
39 |
+
add_action( 'wp_ajax_wpml_email_get', __CLASS__ . '::ajax_wpml_email_get' );
|
40 |
+
}
|
41 |
+
|
42 |
+
function init() {
|
43 |
+
global $status, $page, $hook_suffix;
|
44 |
+
|
45 |
+
parent::__construct( array(
|
46 |
+
'singular' => 'email', // singular name of the listed records
|
47 |
+
'plural' => 'emails', // plural name of the listed records
|
48 |
+
'ajax' => false, // does this table support ajax?
|
49 |
+
) );
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Is displayed if no item is available to render
|
54 |
+
* @since 1.0
|
55 |
+
* @see WP_List_Table::no_items()
|
56 |
+
*/
|
57 |
+
function no_items() {
|
58 |
+
_e( 'No email found.', 'wpml' );
|
59 |
+
return;
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Defines the available columns.
|
64 |
+
* @since 1.0
|
65 |
+
* @see WP_List_Table::get_columns()
|
66 |
+
*/
|
67 |
+
function get_columns() {
|
68 |
+
$columns = array(
|
69 |
+
'cb' => '<input type="checkbox" />',
|
70 |
+
'mail_id' => __( 'ID', 'wpml' ),
|
71 |
+
'timestamp' => __( 'Time', 'wpml' ),
|
72 |
+
'receiver' => __( 'Receiver', 'wpml' ),
|
73 |
+
'subject' => __( 'Subject', 'wpml' ),
|
74 |
+
'message' => __( 'Message', 'wpml' ),
|
75 |
+
'headers' => __( 'Headers', 'wpml' ),
|
76 |
+
'attachments' => __( 'Attachments', 'wpml' ),
|
77 |
+
'plugin_version' => __( 'Plugin Version', 'wpml' ),
|
78 |
+
);
|
79 |
+
|
80 |
+
// Give a plugin the chance to edit the columns.
|
81 |
+
$columns = apply_filters( WPML_Plugin::HOOK_LOGGING_COLUMNS, $columns );
|
82 |
+
|
83 |
+
$reserved = array( '_title', 'comment', 'media', 'name', 'title', 'username', 'blogname' );
|
84 |
+
|
85 |
+
// Show message for reserved column names.
|
86 |
+
foreach ( $reserved as $reserved_key ) {
|
87 |
+
if ( array_key_exists( $reserved_key, $columns ) ) {
|
88 |
+
echo "You should avoid $reserved_key as keyname since it is treated by WordPress specially: Your table would still work, but you won't be able to show/hide the columns. You can prefix your columns!";
|
89 |
+
break;
|
90 |
+
}
|
91 |
+
}
|
92 |
+
return $columns;
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Define which columns are hidden
|
97 |
+
* @since 1.0
|
98 |
+
* @return array
|
99 |
+
*/
|
100 |
+
function get_hidden_columns() {
|
101 |
+
return array(
|
102 |
+
'plugin_version',
|
103 |
+
'mail_id',
|
104 |
+
);
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Sanitize orderby parameter.
|
109 |
+
* @s
|
110 |
+
* @return string sanitized orderby parameter
|
111 |
+
*/
|
112 |
+
private function sanitize_orderby() {
|
113 |
+
return WPML_Utils::sanitize_expected_value( ( !empty( $_GET['orderby'] ) ) ? $_GET['orderby'] : null, $this->get_sortable_columns(), 'mail_id');
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Sanitize order parameter.
|
118 |
+
* @return string sanitized order parameter
|
119 |
+
*/
|
120 |
+
private function sanitize_order() {
|
121 |
+
return WPML_Utils::sanitize_expected_value( ( !empty( $_GET['order'] ) ) ? $_GET['order'] : null, array('desc', 'asc'), 'desc');
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Prepares the items for rendering
|
126 |
+
* @since 1.0
|
127 |
+
* @param string|boolean $search string you want to search for. Default false.
|
128 |
+
* @see WP_List_Table::prepare_items()
|
129 |
+
*/
|
130 |
+
function prepare_items( $search = false ) {
|
131 |
+
$orderby = $this->sanitize_orderby();
|
132 |
+
$order = $this->sanitize_order();
|
133 |
+
|
134 |
+
$columns = $this->get_columns();
|
135 |
+
$hidden = $this->get_hidden_columns();
|
136 |
+
$sortable = $this->get_sortable_columns();
|
137 |
+
$this->_column_headers = array( $columns, $hidden, $sortable );
|
138 |
+
|
139 |
+
$this->process_bulk_action();
|
140 |
+
|
141 |
+
$per_page = $this->get_items_per_page( 'per_page', 25 );
|
142 |
+
$current_page = $this->get_pagenum();
|
143 |
+
$offset = ( $current_page - 1 ) * $per_page;
|
144 |
+
|
145 |
+
$total_items = Mail::query()
|
146 |
+
->search( $search )
|
147 |
+
->find( true );
|
148 |
+
|
149 |
+
$mails = Mail::query()
|
150 |
+
->search( $search )
|
151 |
+
->sort_by( $orderby )
|
152 |
+
->order( $order )
|
153 |
+
->limit( $per_page )
|
154 |
+
->offset( $offset )
|
155 |
+
->find();
|
156 |
+
|
157 |
+
foreach ( $mails as $mail ) {
|
158 |
+
/* @var $mail Mail */
|
159 |
+
$this->items[] = $mail->to_array();
|
160 |
+
}
|
161 |
+
|
162 |
+
$this->set_pagination_args( array(
|
163 |
+
'total_items' => $total_items, // The total number of items.
|
164 |
+
'per_page' => $per_page, // Number of items per page.
|
165 |
+
) );
|
166 |
+
}
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Renders the cell.
|
170 |
+
* Note: We can easily add filter for all columns if you want to / need to manipulate the content. (currently only additional column manipulation is supported)
|
171 |
+
* @since 1.0
|
172 |
+
* @param array $item The current item.
|
173 |
+
* @param string $column_name The current column name.
|
174 |
+
* @return string The cell content
|
175 |
+
*/
|
176 |
+
function column_default( $item, $column_name ) {
|
177 |
+
switch ( $column_name ) {
|
178 |
+
case 'mail_id':
|
179 |
+
case 'timestamp':
|
180 |
+
case 'subject':
|
181 |
+
case 'message':
|
182 |
+
case 'headers':
|
183 |
+
case 'attachments':
|
184 |
+
case 'plugin_version':
|
185 |
+
case 'receiver':
|
186 |
+
return $item[ $column_name ];
|
187 |
+
default:
|
188 |
+
// If we don't know this column maybe a hook does - if no hook extracted data (string) out of the array we can avoid the output of 'Array()' (array).
|
189 |
+
return ( is_array( $res = apply_filters( WPML_Plugin::HOOK_LOGGING_COLUMNS_RENDER, $item, $column_name ) ) ) ? '' : $res;
|
190 |
+
}
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Sanitize message to remove unsafe html.
|
195 |
+
* @since 1.5.1
|
196 |
+
* @param string $message unsafe message.
|
197 |
+
* @return string safe message.
|
198 |
+
*/
|
199 |
+
function sanitize_message( $message ) {
|
200 |
+
$allowed_tags = wp_kses_allowed_html( 'post' );
|
201 |
+
$allowed_tags['a']['data-message'] = true;
|
202 |
+
$allowed_tags['style'][''] = true;
|
203 |
+
return wp_kses( $message, $allowed_tags );
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Renders the message column.
|
208 |
+
* @since 1.3
|
209 |
+
* @param array $item The current item.
|
210 |
+
* @return void|string
|
211 |
+
*/
|
212 |
+
function column_message( $item ) {
|
213 |
+
if ( empty( $item['message'] ) ) {
|
214 |
+
return '';
|
215 |
+
}
|
216 |
+
//$content = $this->sanitize_message( $this->render_mail_html( $item ) );
|
217 |
+
$content = $item['mail_id'];
|
218 |
+
$message = '<a class="wp-mail-logging-view-message button button-secondary" href="#" data-mail-id="' . esc_attr( $content ) . '">View</a>';
|
219 |
+
return $message;
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Renders the timestamp column.
|
224 |
+
* @since 1.5.0
|
225 |
+
* @param array $item The current item.
|
226 |
+
* @return void|string
|
227 |
+
*/
|
228 |
+
function column_timestamp( $item ) {
|
229 |
+
return date_i18n( apply_filters( 'wpml_get_date_time_format', '' ), strtotime( $item['timestamp'] ) );
|
230 |
+
}
|
231 |
+
|
232 |
+
/**
|
233 |
+
* Renders the attachment column in compbat mode for mails prior 1.6.0.
|
234 |
+
* @since 1.6.0
|
235 |
+
* @param array $item The current item.
|
236 |
+
* @return string The attachment column.
|
237 |
+
*/
|
238 |
+
function column_attachments_compat_152( $item ) {
|
239 |
+
$attachment_append = '';
|
240 |
+
$attachments = explode( ',\n', $item['attachments'] );
|
241 |
+
$attachments = is_array( $attachments ) ? $attachments : array( $attachments );
|
242 |
+
foreach ( $attachments as $attachment ) {
|
243 |
+
// $attachment can be an empty string ''.
|
244 |
+
if ( ! empty( $attachment ) ) {
|
245 |
+
$filename = basename( $attachment );
|
246 |
+
$attachment_path = WP_CONTENT_DIR . $attachment;
|
247 |
+
$attachment_url = WP_CONTENT_URL . $attachment;
|
248 |
+
if ( is_file( $attachment_path ) ) {
|
249 |
+
$attachment_append .= '<a href="' . $attachment_url . '" title="' . $filename . '">' . WPML_Utils::generate_attachment_icon( $attachment_path ) . '</a> ';
|
250 |
+
} else {
|
251 |
+
$message = sprintf( __( 'Attachment %s is not present', 'wpml' ), $filename );
|
252 |
+
$attachment_append .= '<i class="fa fa-times" title="' . $message . '"></i>';
|
253 |
+
}
|
254 |
+
}
|
255 |
+
}
|
256 |
+
return $attachment_append;
|
257 |
+
}
|
258 |
+
|
259 |
+
/**
|
260 |
+
* Renders the attachment column.
|
261 |
+
* @since 1.3
|
262 |
+
* @param array $item The current item.
|
263 |
+
* @return string The attachment column.
|
264 |
+
*/
|
265 |
+
function column_attachments( $item ) {
|
266 |
+
|
267 |
+
if ( version_compare( trim( $item ['plugin_version'] ), '1.6.0', '<' ) ) {
|
268 |
+
return $this->column_attachments_compat_152( $item );
|
269 |
+
}
|
270 |
+
|
271 |
+
$attachment_append = '';
|
272 |
+
$attachments = explode( ',\n', $item['attachments'] );
|
273 |
+
$attachments = is_array( $attachments ) ? $attachments : array( $attachments );
|
274 |
+
foreach ( $attachments as $attachment ) {
|
275 |
+
// $attachment can be an empty string ''.
|
276 |
+
if ( ! empty( $attachment ) ) {
|
277 |
+
$filename = basename( $attachment );
|
278 |
+
$basename = '/uploads';
|
279 |
+
$attachment_path = WP_CONTENT_DIR . $basename . $attachment;
|
280 |
+
$attachment_url = WP_CONTENT_URL . $basename . $attachment;
|
281 |
+
|
282 |
+
if ( is_file( $attachment_path ) ) {
|
283 |
+
$attachment_append .= '<a href="' . $attachment_url . '" title="' . $filename . '">' . WPML_Utils::generate_attachment_icon( $attachment_path ) . '</a> ';
|
284 |
+
} else {
|
285 |
+
$message = sprintf( __( 'Attachment %s is not present', 'wpml' ), $filename );
|
286 |
+
$attachment_append .= '<i class="fa fa-times" title="' . $message . '"></i>';
|
287 |
+
}
|
288 |
+
}
|
289 |
+
}
|
290 |
+
return $attachment_append;
|
291 |
+
}
|
292 |
+
|
293 |
+
/**
|
294 |
+
* Renders all components of the mail.
|
295 |
+
* @since 1.3
|
296 |
+
* @param array $item The current item.
|
297 |
+
* @return string The mail as html
|
298 |
+
*/
|
299 |
+
function render_mail( $item ) {
|
300 |
+
$mailAppend = '';
|
301 |
+
foreach ( $item as $key => $value ) {
|
302 |
+
if ( array_key_exists( $key, $this->get_columns() ) && ! in_array( $key, $this->get_hidden_columns() ) ) {
|
303 |
+
$display = $this->get_columns();
|
304 |
+
$column_name = $key;
|
305 |
+
$title = "<span class=\"title\">{$display[$key]}: </span>";
|
306 |
+
$content = '';
|
307 |
+
if ( 'message' !== $column_name && method_exists( $this, 'column_' . $column_name ) ) {
|
308 |
+
$content .= call_user_func( array( $this, 'column_' . $column_name ), $item );
|
309 |
+
} else {
|
310 |
+
$content .= $this->column_default( $item, $column_name );
|
311 |
+
}
|
312 |
+
$mailAppend .= $title . htmlentities( $content );
|
313 |
+
}
|
314 |
+
}
|
315 |
+
|
316 |
+
return $mailAppend;
|
317 |
+
}
|
318 |
+
|
319 |
+
/**
|
320 |
+
* Renders all components of the mail.
|
321 |
+
* @since 1.6.0
|
322 |
+
* @param array $item The current item.
|
323 |
+
* @return string The mail as html
|
324 |
+
*/
|
325 |
+
function render_mail_html( $item ) {
|
326 |
+
$mailAppend = '';
|
327 |
+
foreach ( $item as $key => $value ) {
|
328 |
+
if ( array_key_exists( $key, $this->get_columns() ) && ! in_array( $key, $this->get_hidden_columns() ) ) {
|
329 |
+
$display = $this->get_columns();
|
330 |
+
$column_name = $key;
|
331 |
+
$mailAppend .= "<span class=\"title\">{$display[$key]}: </span>";
|
332 |
+
if ( 'message' !== $column_name && method_exists( $this, 'column_' . $column_name ) ) {
|
333 |
+
$mailAppend .= call_user_func( array( $this, 'column_' . $column_name ), $item );
|
334 |
+
} else {
|
335 |
+
$mailAppend .= $this->column_default( $item, $column_name );
|
336 |
+
}
|
337 |
+
}
|
338 |
+
}
|
339 |
+
return $mailAppend;
|
340 |
+
}
|
341 |
+
/**
|
342 |
+
* Defines available bulk actions.
|
343 |
+
* @since 1.0
|
344 |
+
* @see WP_List_Table::get_bulk_actions()
|
345 |
+
*/
|
346 |
+
function get_bulk_actions() {
|
347 |
+
$actions = array(
|
348 |
+
'delete' => 'Delete',
|
349 |
+
);
|
350 |
+
return $actions;
|
351 |
+
}
|
352 |
+
|
353 |
+
/**
|
354 |
+
* Processes bulk actions.
|
355 |
+
* @since 1.0
|
356 |
+
*/
|
357 |
+
function process_bulk_action() {
|
358 |
+
if ( false === $this->current_action() ) {
|
359 |
+
return;
|
360 |
+
}
|
361 |
+
|
362 |
+
if ( check_admin_referer( Email_Logging_ListTable::NONCE_LIST_TABLE, Email_Logging_ListTable::NONCE_LIST_TABLE . '_nonce' ) ) {
|
363 |
+
$name = $this->_args['singular'];
|
364 |
+
|
365 |
+
// Detect when a bulk action is being triggered.
|
366 |
+
if ( 'delete' === $this->current_action() ) {
|
367 |
+
foreach ( $_REQUEST[$name] as $item_id ) {
|
368 |
+
$mail = Mail::find_one( $item_id );
|
369 |
+
if ( false !== $mail ) {
|
370 |
+
$mail->delete();
|
371 |
+
}
|
372 |
+
}
|
373 |
+
}
|
374 |
+
}
|
375 |
+
}
|
376 |
+
|
377 |
+
/**
|
378 |
+
* Render the cb column
|
379 |
+
* @since 1.0
|
380 |
+
* @param array $item The current item.
|
381 |
+
* @return string the rendered cb cell content
|
382 |
+
*/
|
383 |
+
function column_cb($item) {
|
384 |
+
$name = $this->_args['singular'];
|
385 |
+
return sprintf(
|
386 |
+
'<input type="checkbox" name="%1$s[]" value="%2$s" />', $name, $item['mail_id']
|
387 |
+
);
|
388 |
+
}
|
389 |
+
|
390 |
+
/**
|
391 |
+
* Define the sortable columns
|
392 |
+
* @since 1.0
|
393 |
+
* @return array
|
394 |
+
*/
|
395 |
+
function get_sortable_columns() {
|
396 |
+
return array(
|
397 |
+
// Description: column_name => array( 'display_name', true[asc] | false[desc] ).
|
398 |
+
'mail_id' => array( 'mail_id', false ),
|
399 |
+
'timestamp' => array( 'timestamp', true ),
|
400 |
+
'receiver' => array( 'receiver', true ),
|
401 |
+
'subject' => array( 'subject', true ),
|
402 |
+
'message' => array( 'message', true ),
|
403 |
+
'headers' => array( 'headers', true ),
|
404 |
+
'attachments' => array( 'attachments', true ),
|
405 |
+
'plugin_version'=> array( 'plugin_version', true ),
|
406 |
+
);
|
407 |
+
}
|
408 |
+
|
409 |
+
/**
|
410 |
+
* Ajax function to retrieve rendered mail in certain format.
|
411 |
+
* @since 1.6.0
|
412 |
+
*/
|
413 |
+
public static function ajax_wpml_email_get() {
|
414 |
+
$formats = is_array( $additional = apply_filters( WPML_Plugin::HOOK_LOGGING_SUPPORTED_FORMATS, array() ) ) ? $additional : array();
|
415 |
+
|
416 |
+
check_ajax_referer( 'wpml-modal-show', 'ajax_nonce', true );
|
417 |
+
|
418 |
+
if( ! isset( $_POST['id'] ) )
|
419 |
+
wp_die( "huh?" );
|
420 |
+
$id = intval( $_POST['id'] );
|
421 |
+
|
422 |
+
$format_requested = isset( $_POST['format'] ) ? $_POST['format'] : 'html';
|
423 |
+
if ( ! in_array( $format_requested, $formats ) ) {
|
424 |
+
echo "Unsupported Format. Using html as fallback.";
|
425 |
+
$format_requested = WPML_Utils::sanitize_expected_value($format_requested, $formats, 'html');
|
426 |
+
}
|
427 |
+
$mail = Mail::find_one( $id );
|
428 |
+
$instance = WPML_Init::getInstance()->getService( 'emailLogList' );
|
429 |
+
$mailAppend = '';
|
430 |
+
switch( $format_requested ) {
|
431 |
+
case 'html': {
|
432 |
+
$mailAppend .= $instance->render_mail_html( $mail->to_array() );
|
433 |
+
break;
|
434 |
+
}
|
435 |
+
case 'raw': {
|
436 |
+
$mailAppend .= $instance->render_mail( $mail->to_array() );
|
437 |
+
break;
|
438 |
+
}
|
439 |
+
case 'json': {
|
440 |
+
$mailAppend .= json_encode( $mail->to_array() );
|
441 |
+
break;
|
442 |
+
}
|
443 |
+
default:
|
444 |
+
$mailAppend .= apply_filters( WPML_Plugin::HOOK_LOGGING_FORMAT_CONTENT . "_{$format_requested}", $mail->to_array() );
|
445 |
+
break;
|
446 |
+
}
|
447 |
+
echo $mailAppend;
|
448 |
+
wp_die(); // this is required to terminate immediately and return a proper response
|
449 |
+
}
|
450 |
+
}
|
WPML_Init.php
ADDED
@@ -0,0 +1,152 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
"WordPress Plugin Template" Copyright (C) 2013 Michael Simpson (email : michael.d.simpson@gmail.com)
|
4 |
+
|
5 |
+
This file is part of WordPress Plugin Template for WordPress.
|
6 |
+
|
7 |
+
WordPress Plugin Template is free software: you can redistribute it and/or modify
|
8 |
+
it under the terms of the GNU General Public License as published by
|
9 |
+
the Free Software Foundation, either version 3 of the License, or
|
10 |
+
(at your option) any later version.
|
11 |
+
|
12 |
+
WordPress Plugin Template is distributed in the hope that it will be useful,
|
13 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
+
GNU General Public License for more details.
|
16 |
+
|
17 |
+
You should have received a copy of the GNU General Public License
|
18 |
+
along with Contact Form to Database Extension.
|
19 |
+
If not, see http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
+
*/
|
21 |
+
|
22 |
+
namespace No3x\WPML;
|
23 |
+
|
24 |
+
use No3x\WPML\Settings\WPML_Redux_Framework_config;
|
25 |
+
|
26 |
+
// Exit if accessed directly.
|
27 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
28 |
+
|
29 |
+
class WPML_Init {
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var Singleton The reference to *Singleton* instance of this class
|
33 |
+
*/
|
34 |
+
private static $instance;
|
35 |
+
/**
|
36 |
+
* @var WPML_DI_Container The DI Container
|
37 |
+
*/
|
38 |
+
private $container;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Returns the *Singleton* instance of this class.
|
42 |
+
*
|
43 |
+
* @return WPML_Init The *Singleton* instance.
|
44 |
+
*/
|
45 |
+
public static function getInstance() {
|
46 |
+
if (null === static::$instance) {
|
47 |
+
static::$instance = new static();
|
48 |
+
}
|
49 |
+
|
50 |
+
return static::$instance;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Protected constructor to prevent creating a new instance of the
|
55 |
+
* *Singleton* via the `new` operator from outside of this class.
|
56 |
+
*/
|
57 |
+
protected function __construct() {
|
58 |
+
$this->container = new WPML_DI_Container();
|
59 |
+
}
|
60 |
+
|
61 |
+
public function getClosure() {
|
62 |
+
return function ($prop) {
|
63 |
+
return $this->$prop;
|
64 |
+
};
|
65 |
+
}
|
66 |
+
|
67 |
+
public function init( $file ) {
|
68 |
+
|
69 |
+
$this->container['plugin'] = function ($c) {
|
70 |
+
return new WPML_Plugin();
|
71 |
+
};
|
72 |
+
$this->container['plugin-meta'] = function ($c) {
|
73 |
+
/* @var $plugin WPML_Plugin */
|
74 |
+
$plugin = $c['plugin'];
|
75 |
+
return array(
|
76 |
+
'path' => realpath( plugin_dir_path( __FILE__ ) ) . DIRECTORY_SEPARATOR,
|
77 |
+
'uri' => plugin_dir_url( __FILE__ ),
|
78 |
+
'display_name' => $plugin->getPluginDisplayName(),
|
79 |
+
'slug' => $plugin->getPluginSlug(),
|
80 |
+
'main_file' => $plugin->getMainPluginFileName(),
|
81 |
+
'description' => $plugin->getPluginHeaderValue( 'Description' ),
|
82 |
+
'version' => $plugin->getVersion(),
|
83 |
+
'version_installed' => $plugin->getVersionSaved(),
|
84 |
+
'author_name' => $plugin->getPluginHeaderValue( 'Author' ),
|
85 |
+
'author_uri' => $plugin->getPluginHeaderValue( 'Author URI' ),
|
86 |
+
'wp_uri' => $plugin->getPluginHeaderValue( 'Plugin URI' ),
|
87 |
+
'support_uri' => $plugin->getPluginHeaderValue( 'Support URI' ),
|
88 |
+
'license' => $plugin->getPluginHeaderValue( 'License' ),
|
89 |
+
);
|
90 |
+
};
|
91 |
+
$this->container['emailLogList-supported-formats'] = function ($c) {
|
92 |
+
return array(
|
93 |
+
'html',
|
94 |
+
'raw',
|
95 |
+
'json'
|
96 |
+
);
|
97 |
+
};
|
98 |
+
$this->container['emailLogList'] = function ($c) {
|
99 |
+
return new WPML_Email_Log_List( $c['emailLogList-supported-formats'] );
|
100 |
+
};
|
101 |
+
$this->container['redux'] = function ($c) {
|
102 |
+
return new WPML_Redux_Framework_config( $c['plugin-meta'] );
|
103 |
+
};
|
104 |
+
$this->container['logRotation'] = function ($c) {
|
105 |
+
return new WPML_LogRotation( $c['plugin-meta'] );
|
106 |
+
};
|
107 |
+
$this->container['api'] = function ($c) {
|
108 |
+
// Uncomment for an API Example
|
109 |
+
// return new WPML_API_Example();
|
110 |
+
};
|
111 |
+
$this->container->addActionsAndFilters();
|
112 |
+
|
113 |
+
add_filter( 'wpml_get_di_container', function() {
|
114 |
+
return $this->container;
|
115 |
+
} );
|
116 |
+
|
117 |
+
add_filter( 'wpml_get_di_service', function( $service ) {
|
118 |
+
return $this->getService( $service );
|
119 |
+
} );
|
120 |
+
|
121 |
+
/*
|
122 |
+
* Install the plugin
|
123 |
+
* NOTE: this file gets run each time you *activate* the plugin.
|
124 |
+
* So in WP when you "install" the plugin, all that does it dump its files in the plugin-templates directory
|
125 |
+
* but it does not call any of its code.
|
126 |
+
* So here, the plugin tracks whether or not it has run its install operation, and we ensure it is run only once
|
127 |
+
* on the first activation
|
128 |
+
*/
|
129 |
+
if ( ! $this->container['plugin']->isInstalled() ) {
|
130 |
+
$this->container['plugin']->install();
|
131 |
+
} else {
|
132 |
+
// Perform any version-upgrade activities prior to activation (e.g. database changes).
|
133 |
+
$this->container['plugin']->upgrade();
|
134 |
+
}
|
135 |
+
|
136 |
+
if ( ! $file ) {
|
137 |
+
$file = __FILE__;
|
138 |
+
}
|
139 |
+
// Register the Plugin Activation Hook.
|
140 |
+
register_activation_hook( $file, array( &$this->container['plugin'], 'activate' ) );
|
141 |
+
|
142 |
+
// Register the Plugin Deactivation Hook.
|
143 |
+
register_deactivation_hook( $file, array( &$this->container['plugin'], 'deactivate' ) );
|
144 |
+
}
|
145 |
+
|
146 |
+
public function getService( $key ) {
|
147 |
+
if( in_array( $key, $this->container->keys() ) ) {
|
148 |
+
return $this->container[ $key ];
|
149 |
+
}
|
150 |
+
throw new \Exception("Service '{$key}' is not registered");
|
151 |
+
}
|
152 |
+
}
|
WPML_InstallIndicator.php
CHANGED
@@ -1,188 +1,186 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
*/
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
class WPML_InstallIndicator extends WPML_OptionsManager {
|
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 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
"WordPress Plugin Template" Copyright (C) 2013 Michael Simpson (email : michael.d.simpson@gmail.com)
|
4 |
+
|
5 |
+
This file is part of WordPress Plugin Template for WordPress.
|
6 |
+
|
7 |
+
WordPress Plugin Template is free software: you can redistribute it and/or modify
|
8 |
+
it under the terms of the GNU General Public License as published by
|
9 |
+
the Free Software Foundation, either version 3 of the License, or
|
10 |
+
(at your option) any later version.
|
11 |
+
|
12 |
+
WordPress Plugin Template is distributed in the hope that it will be useful,
|
13 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
+
GNU General Public License for more details.
|
16 |
+
|
17 |
+
You should have received a copy of the GNU General Public License
|
18 |
+
along with Contact Form to Database Extension.
|
19 |
+
If not, see http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
+
*/
|
21 |
+
|
22 |
+
namespace No3x\WPML;
|
23 |
+
|
24 |
+
// Exit if accessed directly.
|
25 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
26 |
+
|
27 |
+
class WPML_InstallIndicator extends WPML_OptionsManager {
|
28 |
+
|
29 |
+
const optionInstalled = '_installed';
|
30 |
+
const optionVersion = '_version';
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Checks if the plugin is installed.
|
34 |
+
* @return bool indicating if the plugin is installed already
|
35 |
+
*/
|
36 |
+
public function isInstalled() {
|
37 |
+
return $this->getOption( self::optionInstalled ) == true;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Note in DB that the plugin is installed
|
42 |
+
* @return null
|
43 |
+
*/
|
44 |
+
protected function markAsInstalled() {
|
45 |
+
return $this->updateOption( self::optionInstalled, true );
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Note in DB that the plugin is uninstalled
|
50 |
+
* @return bool returned form delete_option.
|
51 |
+
* true implies the plugin was installed at the time of this call,
|
52 |
+
* false implies it was not.
|
53 |
+
*/
|
54 |
+
protected function markAsUnInstalled() {
|
55 |
+
return $this->deleteOption( self::optionInstalled );
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Set a version string in the options. This is useful if you install upgrade and
|
60 |
+
* need to check if an older version was installed to see if you need to do certain
|
61 |
+
* upgrade housekeeping (e.g. changes to DB schema).
|
62 |
+
* @return null
|
63 |
+
*/
|
64 |
+
protected function getVersionSaved() {
|
65 |
+
return $this->getOption( self::optionVersion );
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Set a version string in the options.
|
70 |
+
* need to check if
|
71 |
+
* @param string $version string best practice: use a dot-delimited string like '1.2.3' so version strings can be easily
|
72 |
+
* compared using version_compare (http://php.net/manual/en/function.version-compare.php)
|
73 |
+
* @return null
|
74 |
+
*/
|
75 |
+
protected function setVersionSaved( $version ) {
|
76 |
+
return $this->updateOption( self::optionVersion, $version );
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* @return string name of the main plugin file that has the header section with
|
81 |
+
* "Plugin Name", "Version", "Description", "Text Domain", etc.
|
82 |
+
*/
|
83 |
+
protected function getMainPluginFileName() {
|
84 |
+
return basename( dirname( __FILE__ ) ) . 'php';
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Get a value for input key in the header section of main plugin file.
|
89 |
+
* E.g. "Plugin Name", "Version", "Description", "Text Domain", etc.
|
90 |
+
* @param $key string plugin header key
|
91 |
+
* @return string if found, otherwise null
|
92 |
+
*/
|
93 |
+
public function getPluginHeaderValue($key) {
|
94 |
+
// Read the string from the comment header of the main plugin file.
|
95 |
+
$data = file_get_contents( $this->getPluginDir() . DIRECTORY_SEPARATOR . $this->getMainPluginFileName() );
|
96 |
+
$match = array();
|
97 |
+
preg_match( '/' . $key . ':\s*(.*)/', $data, $match );
|
98 |
+
if ( count( $match ) >= 1 ) {
|
99 |
+
return $match[1];
|
100 |
+
}
|
101 |
+
return null;
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* If your subclass of this class lives in a different directory,
|
106 |
+
* override this method with the exact same code. Since __FILE__ will
|
107 |
+
* be different, you will then get the right dir returned.
|
108 |
+
* @return string
|
109 |
+
*/
|
110 |
+
protected function getPluginDir() {
|
111 |
+
return dirname( __FILE__ );
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Version of this code.
|
116 |
+
* Best practice: define version strings to be easily compared using version_compare()
|
117 |
+
* (http://php.net/manual/en/function.version-compare.php)
|
118 |
+
* NOTE: You should manually make this match the SVN tag for your main plugin file 'Version' release and 'Stable tag' in readme.txt
|
119 |
+
* @return string
|
120 |
+
*/
|
121 |
+
public function getVersion() {
|
122 |
+
return $this->getPluginHeaderValue( 'Version' );
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Useful when checking for upgrades, can tell if the currently installed version is earlier than the
|
127 |
+
* newly installed code. This case indicates that an upgrade has been installed and this is the first time it
|
128 |
+
* has been activated, so any upgrade actions should be taken.
|
129 |
+
* @return bool true if the version saved in the options is earlier than the version declared in getVersion().
|
130 |
+
* true indicates that new code is installed and this is the first time it is activated, so upgrade actions
|
131 |
+
* should be taken. Assumes that version string comparable by version_compare, examples: '1', '1.1', '1.1.1', '2.0', etc.
|
132 |
+
*/
|
133 |
+
public function isInstalledCodeAnUpgrade() {
|
134 |
+
return $this->isSavedVersionLessThan( $this->getVersion() );
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Used to see if the installed code is an earlier version than the input version
|
139 |
+
* @param string $aVersion version string.
|
140 |
+
* @return bool true if the saved version is earlier (by natural order) than the input version
|
141 |
+
*/
|
142 |
+
public function isSavedVersionLessThan( $aVersion ) {
|
143 |
+
return $this->isVersionLessThan( $this->getVersionSaved(), $aVersion );
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Used to see if the installed code is the same or earlier than the input version.
|
148 |
+
* Useful when checking for an upgrade. If you haven't specified the number of the newer version yet,
|
149 |
+
* but the last version (installed) was 2.3 (for example) you could check if
|
150 |
+
* For example, $this->isSavedVersionLessThanEqual('2.3') == true indicates that the saved version is not upgraded
|
151 |
+
* past 2.3 yet and therefore you would perform some appropriate upgrade action.
|
152 |
+
* @param string $aVersion version string.
|
153 |
+
* @return bool true if the saved version is earlier (by natural order) than the input version
|
154 |
+
*/
|
155 |
+
public function isSavedVersionLessThanEqual( $aVersion ) {
|
156 |
+
return $this->isVersionLessThanEqual( $this->getVersionSaved(), $aVersion );
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* @param string $version1 version string such as '1', '1.1', '1.1.1', '2.0', etc.
|
161 |
+
* @param string $version2 version string such as '1', '1.1', '1.1.1', '2.0', etc.
|
162 |
+
* @return bool true if version_compare of $versions1 and $version2 shows $version1 as the same or earlier
|
163 |
+
*/
|
164 |
+
public function isVersionLessThanEqual( $version1, $version2 ) {
|
165 |
+
return ( version_compare( $version1, $version2 ) <= 0 );
|
166 |
+
}
|
167 |
+
|
168 |
+
/**
|
169 |
+
* @param string $version1 version string such as '1', '1.1', '1.1.1', '2.0', etc.
|
170 |
+
* @param string $version2 version string such as '1', '1.1', '1.1.1', '2.0', etc.
|
171 |
+
* @return bool true if version_compare of $versions1 and $version2 shows $version1 as earlier
|
172 |
+
*/
|
173 |
+
public function isVersionLessThan( $version1, $version2 ) {
|
174 |
+
return ( version_compare( $version1, $version2 ) < 0 );
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Record the installed version to options.
|
179 |
+
* This helps track was version is installed so when an upgrade is installed, it should call this when finished
|
180 |
+
* upgrading to record the new current version
|
181 |
+
* @return void
|
182 |
+
*/
|
183 |
+
protected function saveInstalledVersion() {
|
184 |
+
$this->setVersionSaved( $this->getVersion() );
|
185 |
+
}
|
186 |
+
}
|
|
|
|
WPML_LifeCycle.php
CHANGED
@@ -1,205 +1,214 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
*/
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
class WPML_LifeCycle extends WPML_InstallIndicator {
|
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 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
"WordPress Plugin Template" Copyright (C) 2013 Michael Simpson (email : michael.d.simpson@gmail.com)
|
4 |
+
|
5 |
+
This file is part of WordPress Plugin Template for WordPress.
|
6 |
+
|
7 |
+
WordPress Plugin Template is free software: you can redistribute it and/or modify
|
8 |
+
it under the terms of the GNU General Public License as published by
|
9 |
+
the Free Software Foundation, either version 3 of the License, or
|
10 |
+
(at your option) any later version.
|
11 |
+
|
12 |
+
WordPress Plugin Template is distributed in the hope that it will be useful,
|
13 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
+
GNU General Public License for more details.
|
16 |
+
|
17 |
+
You should have received a copy of the GNU General Public License
|
18 |
+
along with Contact Form to Database Extension.
|
19 |
+
If not, see http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
+
*/
|
21 |
+
|
22 |
+
namespace No3x\WPML;
|
23 |
+
|
24 |
+
// Exit if accessed directly.
|
25 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
26 |
+
|
27 |
+
class WPML_LifeCycle extends WPML_InstallIndicator {
|
28 |
+
|
29 |
+
public function install() {
|
30 |
+
|
31 |
+
// Initialize Plugin Options
|
32 |
+
$this->initOptions();
|
33 |
+
|
34 |
+
// Initialize DB Tables used by the plugin
|
35 |
+
$this->installDatabaseTables();
|
36 |
+
|
37 |
+
// Other Plugin initialization - for the plugin writer to override as needed
|
38 |
+
$this->otherInstall();
|
39 |
+
|
40 |
+
// Record the installed version
|
41 |
+
$this->saveInstalledVersion();
|
42 |
+
|
43 |
+
// To avoid running install() more then once
|
44 |
+
$this->markAsInstalled();
|
45 |
+
}
|
46 |
+
|
47 |
+
public function uninstall() {
|
48 |
+
$this->otherUninstall();
|
49 |
+
|
50 |
+
if ( $this->getSetting('delete-on-deactivation', false) == true ) {
|
51 |
+
//TOOD: is multi site?
|
52 |
+
$this->unInstallDatabaseTables();
|
53 |
+
$this->deleteSavedOptions();
|
54 |
+
$this->deleteVersionOption();
|
55 |
+
}
|
56 |
+
$this->markAsUnInstalled();
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Perform any version-upgrade activities prior to activation (e.g. database changes)
|
61 |
+
* @return void
|
62 |
+
*/
|
63 |
+
public function upgrade() {
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* See: http://plugin.michael-simpson.com/?page_id=105
|
68 |
+
* @return void
|
69 |
+
*/
|
70 |
+
public function activate() {
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* See: http://plugin.michael-simpson.com/?page_id=105
|
75 |
+
* @return void
|
76 |
+
*/
|
77 |
+
public function deactivate() {
|
78 |
+
$this->uninstall();
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* See: http://plugin.michael-simpson.com/?page_id=31
|
83 |
+
* @return void
|
84 |
+
*/
|
85 |
+
protected function initOptions() {
|
86 |
+
}
|
87 |
+
|
88 |
+
public function addActionsAndFilters() {
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* See: http://plugin.michael-simpson.com/?page_id=101
|
93 |
+
* Called by install() to create any database tables if needed.
|
94 |
+
* Best Practice:
|
95 |
+
* (1) Prefix all table names with $wpdb->prefix
|
96 |
+
* (2) make table names lower case only
|
97 |
+
* @return void
|
98 |
+
*/
|
99 |
+
protected function installDatabaseTables() {
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* See: http://plugin.michael-simpson.com/?page_id=101
|
104 |
+
* Drop plugin-created tables on uninstall.
|
105 |
+
* @return void
|
106 |
+
*/
|
107 |
+
protected function unInstallDatabaseTables() {
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Override to add any additional actions to be done at install time
|
112 |
+
* See: http://plugin.michael-simpson.com/?page_id=33
|
113 |
+
* @return void
|
114 |
+
*/
|
115 |
+
protected function otherInstall() {
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Override to add any additional actions to be done at uninstall time
|
120 |
+
* See: http://plugin.michael-simpson.com/?page_id=33
|
121 |
+
* @return void
|
122 |
+
*/
|
123 |
+
protected function otherUninstall() {
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Puts the configuration page in the Plugins menu by default.
|
128 |
+
* Override to put it elsewhere or create a set of submenus
|
129 |
+
* Override with an empty implementation if you don't want a configuration page
|
130 |
+
* @return void
|
131 |
+
*/
|
132 |
+
public function addSettingsSubMenuPage() {
|
133 |
+
$this->addSettingsSubMenuPageToPluginsMenu();
|
134 |
+
//$this->addSettingsSubMenuPageToSettingsMenu();
|
135 |
+
}
|
136 |
+
|
137 |
+
|
138 |
+
protected function requireExtraPluginFiles() {
|
139 |
+
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
140 |
+
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
|
141 |
+
}
|
142 |
+
|
143 |
+
/**
|
144 |
+
* @return string Slug name for the URL to the Setting page
|
145 |
+
* (i.e. the page for setting options)
|
146 |
+
*/
|
147 |
+
protected function getSettingsSlug() {
|
148 |
+
return get_class($this) . 'Settings';
|
149 |
+
}
|
150 |
+
|
151 |
+
protected function addSettingsSubMenuPageToPluginsMenu() {
|
152 |
+
$this->requireExtraPluginFiles();
|
153 |
+
$displayName = $this->getPluginDisplayName();
|
154 |
+
add_submenu_page('plugins.php',
|
155 |
+
$displayName,
|
156 |
+
$displayName,
|
157 |
+
'manage_options',
|
158 |
+
$this->getSettingsSlug(),
|
159 |
+
array(&$this, 'settingsPage'));
|
160 |
+
}
|
161 |
+
|
162 |
+
|
163 |
+
protected function addSettingsSubMenuPageToSettingsMenu() {
|
164 |
+
$this->requireExtraPluginFiles();
|
165 |
+
$displayName = $this->getPluginDisplayName();
|
166 |
+
add_options_page($displayName,
|
167 |
+
$displayName,
|
168 |
+
'manage_options',
|
169 |
+
$this->getSettingsSlug(),
|
170 |
+
array(&$this, 'settingsPage'));
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* @param $name string name of a database table
|
175 |
+
* @return string input prefixed with the WordPress DB table prefix
|
176 |
+
* plus the prefix for this plugin (lower-cased) to avoid table name collisions.
|
177 |
+
* The plugin prefix is lower-cases as a best practice that all DB table names are lower case to
|
178 |
+
* avoid issues on some platforms
|
179 |
+
*/
|
180 |
+
protected function prefixTableName($name) {
|
181 |
+
global $wpdb;
|
182 |
+
return $wpdb->prefix . strtolower($this->prefix($name));
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Convenience function for creating AJAX URLs.
|
188 |
+
*
|
189 |
+
* @param $actionName string the name of the ajax action registered in a call like
|
190 |
+
* add_action('wp_ajax_actionName', array(&$this, 'functionName'));
|
191 |
+
* and/or
|
192 |
+
* add_action('wp_ajax_nopriv_actionName', array(&$this, 'functionName'));
|
193 |
+
*
|
194 |
+
* If have an additional parameters to add to the Ajax call, e.g. an "id" parameter,
|
195 |
+
* you could call this function and append to the returned string like:
|
196 |
+
* $url = $this->getAjaxUrl('myaction&id=') . urlencode($id);
|
197 |
+
* or more complex:
|
198 |
+
* $url = sprintf($this->getAjaxUrl('myaction&id=%s&var2=%s&var3=%s'), urlencode($id), urlencode($var2), urlencode($var3));
|
199 |
+
*
|
200 |
+
* @return string URL that can be used in a web page to make an Ajax call to $this->functionName
|
201 |
+
*/
|
202 |
+
public function getAjaxUrl($actionName) {
|
203 |
+
return admin_url('admin-ajax.php') . '?action=' . $actionName;
|
204 |
+
}
|
205 |
+
|
206 |
+
public function registerPluginActionLinks( $actions, $plugin_file ) {
|
207 |
+
if ($this->getMainPluginFileName() == basename($plugin_file)) {
|
208 |
+
$settings = array('settings' => '<a href="admin.php?page=wpml_plugin_settings">' . __('Settings', 'General') . '</a>');
|
209 |
+
$actions = array_merge($settings, $actions);
|
210 |
+
}
|
211 |
+
return $actions;
|
212 |
+
}
|
213 |
+
|
214 |
+
}
|
WPML_LogRotation.php
CHANGED
@@ -1,84 +1,120 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace No3x\WPML;
|
4 |
+
|
5 |
+
use No3x\WPML\Model\WPML_Mail as Mail;
|
6 |
+
|
7 |
+
// Exit if accessed directly.
|
8 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Log rotation for database.
|
12 |
+
* @author No3x
|
13 |
+
* @since 1.4
|
14 |
+
*/
|
15 |
+
class WPML_LogRotation {
|
16 |
+
|
17 |
+
const WPML_LOGROTATION_SCHEDULE_HOOK = 'wpml_log_rotation';
|
18 |
+
const WPML_LOGROTATION_SCHEDULE_ACTION = 'LogRotationSchedule';
|
19 |
+
private $plugin_meta;
|
20 |
+
|
21 |
+
function __construct( $plugin_meta ) {
|
22 |
+
$this->plugin_meta = $plugin_meta;
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Add actions and filters for this module.
|
27 |
+
* @since 1.6.0
|
28 |
+
*/
|
29 |
+
public function addActionsAndFilters() {
|
30 |
+
add_action( 'plugins_loaded', array( $this, 'init') );
|
31 |
+
add_action( self::WPML_LOGROTATION_SCHEDULE_HOOK , array( __CLASS__, self::WPML_LOGROTATION_SCHEDULE_ACTION) );
|
32 |
+
register_deactivation_hook( plugin_dir_path( __FILE__ ) . $this->plugin_meta['main_file'], array( $this, 'unschedule' ) );
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Init this module.
|
37 |
+
* @since 1.6.0
|
38 |
+
*/
|
39 |
+
public function init() {
|
40 |
+
global $wpml_settings;
|
41 |
+
|
42 |
+
if ( isset( $wpml_settings ) ) {
|
43 |
+
if ( $wpml_settings['log-rotation-limit-amout'] == true || $wpml_settings['log-rotation-delete-time'] == true ) {
|
44 |
+
$this->schedule();
|
45 |
+
} else {
|
46 |
+
$this->unschedule();
|
47 |
+
}
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Schedules an event.
|
53 |
+
* @since 1.4
|
54 |
+
*/
|
55 |
+
function schedule() {
|
56 |
+
if ( ! wp_next_scheduled( self::WPML_LOGROTATION_SCHEDULE_HOOK ) ) {
|
57 |
+
wp_schedule_event( time(), 'hourly', self::WPML_LOGROTATION_SCHEDULE_HOOK );
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Unschedules an event.
|
63 |
+
* @since 1.4
|
64 |
+
*/
|
65 |
+
function unschedule() {
|
66 |
+
wp_clear_scheduled_hook( self::WPML_LOGROTATION_SCHEDULE_HOOK );
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* The LogRotation supports the limitation of stored mails by amount.
|
71 |
+
* @since 1.6.0
|
72 |
+
*/
|
73 |
+
static function limitNumberOfMailsByAmount() {
|
74 |
+
global $wpml_settings, $wpdb;
|
75 |
+
$tableName = WPML_Plugin::getTablename( 'mails' );
|
76 |
+
|
77 |
+
if ( $wpml_settings['log-rotation-limit-amout'] == true) {
|
78 |
+
$keep = $wpml_settings['log-rotation-limit-amout-keep'];
|
79 |
+
if ( $keep > 0 ) {
|
80 |
+
$wpdb->query(
|
81 |
+
"DELETE p
|
82 |
+
FROM
|
83 |
+
$tableName AS p
|
84 |
+
JOIN
|
85 |
+
( SELECT mail_id
|
86 |
+
FROM $tableName
|
87 |
+
ORDER BY mail_id DESC
|
88 |
+
LIMIT 1 OFFSET $keep
|
89 |
+
) AS lim
|
90 |
+
ON p.mail_id <= lim.mail_id;"
|
91 |
+
);
|
92 |
+
}
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* The LogRotation supports the limitation of stored mails by date.
|
98 |
+
* @since 1.6.0
|
99 |
+
*/
|
100 |
+
static function limitNumberOfMailsByTime() {
|
101 |
+
global $wpml_settings, $wpdb;
|
102 |
+
$tableName = WPML_Plugin::getTablename( 'mails' );
|
103 |
+
|
104 |
+
if ( $wpml_settings['log-rotation-delete-time'] == true) {
|
105 |
+
$days = $wpml_settings['log-rotation-delete-time-days'];
|
106 |
+
if ( $days > 0 ) {
|
107 |
+
$wpdb->query( "DELETE FROM `$tableName` WHERE DATEDIFF( NOW(), `timestamp` ) >= $days" );
|
108 |
+
}
|
109 |
+
}
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Executes log rotation periodically.
|
114 |
+
* @since 1.4
|
115 |
+
*/
|
116 |
+
static function LogRotationSchedule() {
|
117 |
+
self::limitNumberOfMailsByAmount();
|
118 |
+
self::limitNumberOfMailsByTime();
|
119 |
+
}
|
120 |
+
}
|
WPML_OptionsManager.php
CHANGED
@@ -1,553 +1,602 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
"WordPress Plugin Template" Copyright (C) 2013 Michael Simpson (email : michael.d.simpson@gmail.com)
|
4 |
-
|
5 |
-
This file is part of WordPress Plugin Template for WordPress.
|
6 |
-
|
7 |
-
WordPress Plugin Template is free software: you can redistribute it and/or modify
|
8 |
-
it under the terms of the GNU General Public License as published by
|
9 |
-
the Free Software Foundation, either version 3 of the License, or
|
10 |
-
(at your option) any later version.
|
11 |
-
|
12 |
-
WordPress Plugin Template is distributed in the hope that it will be useful,
|
13 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
-
GNU General Public License for more details.
|
16 |
-
|
17 |
-
You should have received a copy of the GNU General Public License
|
18 |
-
along with Contact Form to Database Extension.
|
19 |
-
If not, see http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
-
*/
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
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 |
-
* array(
|
74 |
-
*
|
75 |
-
*
|
76 |
-
*
|
77 |
-
*
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
*
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
* @return
|
93 |
-
*/
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
*
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
}
|
118 |
-
|
119 |
-
/**
|
120 |
-
*
|
121 |
-
*
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
*
|
130 |
-
*
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
*
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
*
|
159 |
-
*
|
160 |
-
* @
|
161 |
-
*
|
162 |
-
*/
|
163 |
-
public function
|
164 |
-
$
|
165 |
-
|
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 |
-
return $
|
223 |
-
}
|
224 |
-
|
225 |
-
/**
|
226 |
-
*
|
227 |
-
*
|
228 |
-
* @param $
|
229 |
-
* @
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
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 |
-
|
371 |
-
$
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
)
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
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 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
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 |
-
* you
|
539 |
-
*
|
540 |
-
*
|
541 |
-
*
|
542 |
-
*
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
"WordPress Plugin Template" Copyright (C) 2013 Michael Simpson (email : michael.d.simpson@gmail.com)
|
4 |
+
|
5 |
+
This file is part of WordPress Plugin Template for WordPress.
|
6 |
+
|
7 |
+
WordPress Plugin Template is free software: you can redistribute it and/or modify
|
8 |
+
it under the terms of the GNU General Public License as published by
|
9 |
+
the Free Software Foundation, either version 3 of the License, or
|
10 |
+
(at your option) any later version.
|
11 |
+
|
12 |
+
WordPress Plugin Template is distributed in the hope that it will be useful,
|
13 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
+
GNU General Public License for more details.
|
16 |
+
|
17 |
+
You should have received a copy of the GNU General Public License
|
18 |
+
along with Contact Form to Database Extension.
|
19 |
+
If not, see http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
+
*/
|
21 |
+
|
22 |
+
namespace No3x\WPML;
|
23 |
+
|
24 |
+
// Exit if accessed directly.
|
25 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
26 |
+
|
27 |
+
class WPML_OptionsManager {
|
28 |
+
/**
|
29 |
+
* Is used to retrive a settings value
|
30 |
+
* Important: This implementation understands bool for $default. (unlikely in comparision to all other settings implementation)
|
31 |
+
* @since 1.4
|
32 |
+
* @param string $settingName The option name to return
|
33 |
+
* @param mixed $default (null) The value to return if option not set.
|
34 |
+
* @return ambigous <string, mixed> the options value or $default if not found.
|
35 |
+
*/
|
36 |
+
public function getSetting($settingName, $default = null) {
|
37 |
+
global $wpml_settings;
|
38 |
+
|
39 |
+
if ( array_key_exists($settingName, $wpml_settings)) {
|
40 |
+
$retVal = $wpml_settings[$settingName];
|
41 |
+
}
|
42 |
+
if (!isset($retVal) && $default !== null) {
|
43 |
+
$retVal = $default;
|
44 |
+
}
|
45 |
+
return $retVal;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Returns the appropriate datetime format string.
|
50 |
+
* @since 1.5.0
|
51 |
+
* @return string datetime format string
|
52 |
+
*/
|
53 |
+
public function getDateTimeFormatString() {
|
54 |
+
// default database like format
|
55 |
+
$format = 'Y-m-d G:i:s';
|
56 |
+
$date_format = get_option( 'date_format' );
|
57 |
+
$time_format = get_option( 'time_format' );
|
58 |
+
// get option or change to user friendly format as the options maybe not set at all
|
59 |
+
$date_format = empty( $date_format ) ? 'F j, Y' : $date_format;
|
60 |
+
$time_format = empty( $time_format ) ? 'g:i a' : $time_format;
|
61 |
+
if ( $this->getSetting( 'datetimeformat-use-wordpress', false) == true )
|
62 |
+
// Overwrite with defined values or default
|
63 |
+
$format = $date_format . " " . $time_format;
|
64 |
+
return $format;
|
65 |
+
}
|
66 |
+
|
67 |
+
public function getOptionNamePrefix() {
|
68 |
+
return $this->getClassnameWithoutNamespace() . '_';
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Define your options meta data here as an array, where each element in the array
|
73 |
+
* @return array of key=>display-name and/or key=>array(display-name, choice1, choice2, ...)
|
74 |
+
* key: an option name for the key (this name will be given a prefix when stored in
|
75 |
+
* the database to ensure it does not conflict with other plugin options)
|
76 |
+
* value: can be one of two things:
|
77 |
+
* (1) string display name for displaying the name of the option to the user on a web page
|
78 |
+
* (2) array where the first element is a display name (as above) and the rest of
|
79 |
+
* the elements are choices of values that the user can select
|
80 |
+
* e.g.
|
81 |
+
* array(
|
82 |
+
* 'item' => 'Item:', // key => display-name
|
83 |
+
* 'rating' => array( // key => array ( display-name, choice1, choice2, ...)
|
84 |
+
* 'CanDoOperationX' => array('Can do Operation X', 'Administrator', 'Editor', 'Author', 'Contributor', 'Subscriber'),
|
85 |
+
* 'Rating:', 'Excellent', 'Good', 'Fair', 'Poor')
|
86 |
+
*/
|
87 |
+
public function getOptionMetaData() {
|
88 |
+
return array();
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* @return array of string name of options
|
93 |
+
*/
|
94 |
+
public function getOptionNames() {
|
95 |
+
return array_keys($this->getOptionMetaData());
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Override this method to initialize options to default values and save to the database with add_option
|
100 |
+
* @return void
|
101 |
+
*/
|
102 |
+
protected function initOptions() {
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Cleanup: remove all options from the DB
|
107 |
+
* @return void
|
108 |
+
*/
|
109 |
+
protected function deleteSavedOptions() {
|
110 |
+
$optionMetaData = $this->getOptionMetaData();
|
111 |
+
if (is_array($optionMetaData)) {
|
112 |
+
foreach ($optionMetaData as $aOptionKey => $aOptionMeta) {
|
113 |
+
$prefixedOptionName = $this->prefix($aOptionKey); // how it is stored in DB
|
114 |
+
delete_option($prefixedOptionName);
|
115 |
+
}
|
116 |
+
}
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Cleanup: remove version option
|
121 |
+
* @since 1.6.0
|
122 |
+
* @return void
|
123 |
+
*/
|
124 |
+
protected function deleteVersionOption() {
|
125 |
+
delete_option( $this->prefix( WPML_Plugin::optionVersion ) );
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* @return string display name of the plugin to show as a name/title in HTML.
|
130 |
+
* Just returns the class name. Override this method to return something more readable
|
131 |
+
*/
|
132 |
+
public function getPluginDisplayName() {
|
133 |
+
return get_class($this);
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* @return string slug of the plugin to use as identifier.
|
138 |
+
* Just returns the class name in lowercase.
|
139 |
+
*/
|
140 |
+
public function getPluginSlug() {
|
141 |
+
return strtolower( $this->getClassnameWithoutNamespace() );
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Get the class name without the namespace
|
146 |
+
* @return string class name without the namespace.
|
147 |
+
* @link http://php.net/manual/de/function.get-class.php#114568
|
148 |
+
*/
|
149 |
+
private function getClassnameWithoutNamespace() {
|
150 |
+
$classname = get_class($this);
|
151 |
+
if ($pos = strrpos( $classname, '\\')) {
|
152 |
+
return substr($classname, $pos + 1);
|
153 |
+
}
|
154 |
+
return $classname;
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Get the prefixed version input $name suitable for storing in WP options
|
159 |
+
* Idempotent: if $optionName is already prefixed, it is not prefixed again, it is returned without change
|
160 |
+
* @param $name string option name to prefix. Defined in settings.php and set as keys of $this->optionMetaData
|
161 |
+
* @return string
|
162 |
+
*/
|
163 |
+
public function prefix($name) {
|
164 |
+
$optionNamePrefix = $this->getOptionNamePrefix();
|
165 |
+
if (strpos($name, $optionNamePrefix) === 0) { // 0 but not false
|
166 |
+
return $name; // already prefixed
|
167 |
+
}
|
168 |
+
return $optionNamePrefix . $name;
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Remove the prefix from the input $name.
|
173 |
+
* Idempotent: If no prefix found, just returns what was input.
|
174 |
+
* @param $name string
|
175 |
+
* @return string $optionName without the prefix.
|
176 |
+
*/
|
177 |
+
public function &unPrefix($name) {
|
178 |
+
$optionNamePrefix = $this->getOptionNamePrefix();
|
179 |
+
if (strpos($name, $optionNamePrefix) === 0) {
|
180 |
+
return substr($name, strlen($optionNamePrefix));
|
181 |
+
}
|
182 |
+
return $name;
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* A wrapper function delegating to WP get_option() but it prefixes the input $optionName
|
187 |
+
* to enforce "scoping" the options in the WP options table thereby avoiding name conflicts
|
188 |
+
* @param $optionName string defined in settings.php and set as keys of $this->optionMetaData
|
189 |
+
* @param $default string default value to return if the option is not set
|
190 |
+
* @return string the value from delegated call to get_option(), or optional default value
|
191 |
+
* if option is not set.
|
192 |
+
*/
|
193 |
+
public function getOption($optionName, $default = null) {
|
194 |
+
$prefixedOptionName = $this->prefix($optionName); // how it is stored in DB
|
195 |
+
$retVal = get_option($prefixedOptionName);
|
196 |
+
if (!$retVal && $default) {
|
197 |
+
$retVal = $default;
|
198 |
+
}
|
199 |
+
return $retVal;
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* A wrapper function delegating to WP delete_option() but it prefixes the input $optionName
|
204 |
+
* to enforce "scoping" the options in the WP options table thereby avoiding name conflicts
|
205 |
+
* @param $optionName string defined in settings.php and set as keys of $this->optionMetaData
|
206 |
+
* @return bool from delegated call to delete_option()
|
207 |
+
*/
|
208 |
+
public function deleteOption($optionName) {
|
209 |
+
$prefixedOptionName = $this->prefix($optionName); // how it is stored in DB
|
210 |
+
return delete_option($prefixedOptionName);
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
* A wrapper function delegating to WP add_option() but it prefixes the input $optionName
|
215 |
+
* to enforce "scoping" the options in the WP options table thereby avoiding name conflicts
|
216 |
+
* @param $optionName string defined in settings.php and set as keys of $this->optionMetaData
|
217 |
+
* @param $value mixed the new value
|
218 |
+
* @return null from delegated call to delete_option()
|
219 |
+
*/
|
220 |
+
public function addOption($optionName, $value) {
|
221 |
+
$prefixedOptionName = $this->prefix($optionName); // how it is stored in DB
|
222 |
+
return add_option($prefixedOptionName, $value);
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* A wrapper function delegating to WP add_option() but it prefixes the input $optionName
|
227 |
+
* to enforce "scoping" the options in the WP options table thereby avoiding name conflicts
|
228 |
+
* @param $optionName string defined in settings.php and set as keys of $this->optionMetaData
|
229 |
+
* @param $value mixed the new value
|
230 |
+
* @return null from delegated call to delete_option()
|
231 |
+
*/
|
232 |
+
public function updateOption($optionName, $value) {
|
233 |
+
$prefixedOptionName = $this->prefix($optionName); // how it is stored in DB
|
234 |
+
return update_option($prefixedOptionName, $value);
|
235 |
+
}
|
236 |
+
|
237 |
+
/**
|
238 |
+
* A Role Option is an option defined in getOptionMetaData() as a choice of WP standard roles, e.g.
|
239 |
+
* 'CanDoOperationX' => array('Can do Operation X', 'Administrator', 'Editor', 'Author', 'Contributor', 'Subscriber')
|
240 |
+
* The idea is use an option to indicate what role level a user must minimally have in order to do some operation.
|
241 |
+
* So if a Role Option 'CanDoOperationX' is set to 'Editor' then users which role 'Editor' or above should be
|
242 |
+
* able to do Operation X.
|
243 |
+
* Also see: canUserDoRoleOption()
|
244 |
+
* @param $optionName
|
245 |
+
* @return string role name
|
246 |
+
*/
|
247 |
+
public function getRoleOption($optionName) {
|
248 |
+
$roleAllowed = $this->getOption($optionName);
|
249 |
+
if (!$roleAllowed || $roleAllowed == '') {
|
250 |
+
$roleAllowed = 'Administrator';
|
251 |
+
}
|
252 |
+
return $roleAllowed;
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Given a WP role name (case insensitive), return a WP capability which only that role and roles above it have.
|
257 |
+
* http://codex.wordpress.org/Roles_and_Capabilities
|
258 |
+
* @param $roleName
|
259 |
+
* @return string a WP capability or '' if unknown input role
|
260 |
+
*/
|
261 |
+
protected function roleToCapability($roleName) {
|
262 |
+
switch ( ucfirst( $roleName ) ) {
|
263 |
+
case 'Super Admin':
|
264 |
+
return 'manage_options';
|
265 |
+
case 'Administrator':
|
266 |
+
return 'manage_options';
|
267 |
+
case 'Editor':
|
268 |
+
return 'publish_pages';
|
269 |
+
case 'Author':
|
270 |
+
return 'publish_posts';
|
271 |
+
case 'Contributor':
|
272 |
+
return 'edit_posts';
|
273 |
+
case 'Subscriber':
|
274 |
+
return 'read';
|
275 |
+
case 'Anyone':
|
276 |
+
return 'read';
|
277 |
+
}
|
278 |
+
return '';
|
279 |
+
}
|
280 |
+
|
281 |
+
/**
|
282 |
+
* @param $roleName string a standard WP role name like 'Administrator'
|
283 |
+
* @return bool
|
284 |
+
*/
|
285 |
+
public function isUserRoleEqualOrBetterThan($roleName) {
|
286 |
+
if ('Anyone' == $roleName) {
|
287 |
+
return true;
|
288 |
+
}
|
289 |
+
$capability = $this->roleToCapability($roleName);
|
290 |
+
return current_user_can($capability);
|
291 |
+
}
|
292 |
+
|
293 |
+
/**
|
294 |
+
* @param $optionName string name of a Role option (see comments in getRoleOption())
|
295 |
+
* @return bool indicates if the user has adequate permissions
|
296 |
+
*/
|
297 |
+
public function canUserDoRoleOption($optionName) {
|
298 |
+
$roleAllowed = $this->getRoleOption($optionName);
|
299 |
+
if ('Anyone' == $roleAllowed) {
|
300 |
+
return true;
|
301 |
+
}
|
302 |
+
return $this->isUserRoleEqualOrBetterThan($roleAllowed);
|
303 |
+
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* see: http://codex.wordpress.org/Creating_Options_Pages
|
307 |
+
* @return void
|
308 |
+
*/
|
309 |
+
public function createSettingsMenu() {
|
310 |
+
|
311 |
+
global $wp_version;
|
312 |
+
global $wp_logging_list_page;
|
313 |
+
|
314 |
+
$pluginIcon = '';
|
315 |
+
if ( $wp_version >= 3.8 ) $pluginIcon = 'dashicons-email-alt';
|
316 |
+
|
317 |
+
$pluginNameSlug = $this->getPluginSlug();
|
318 |
+
$capability = $this->getSetting( 'can-see-submission-data', 'manage_options' );
|
319 |
+
|
320 |
+
//create new top-level menu
|
321 |
+
$wp_logging_list_page = add_menu_page(__('WP Mail Log', 'wpml'),
|
322 |
+
__('WP Mail Log', 'wpml'),
|
323 |
+
$capability,
|
324 |
+
$pluginNameSlug . '_log',
|
325 |
+
array(&$this, 'LogMenu'),
|
326 |
+
$pluginIcon
|
327 |
+
);
|
328 |
+
|
329 |
+
// Add Action to load assets when page is loaded
|
330 |
+
add_action( 'load-' . $wp_logging_list_page, array( $this, 'load_assets' ) );
|
331 |
+
|
332 |
+
add_submenu_page($pluginNameSlug . '_log',
|
333 |
+
__('About', 'wpml'),
|
334 |
+
__('About', 'wpml'),
|
335 |
+
$capability,
|
336 |
+
$pluginNameSlug . '_about',
|
337 |
+
array(&$this, 'LogSubMenuAbout') );
|
338 |
+
|
339 |
+
add_action( 'contextual_help', array( &$this, 'create_settings_panel' ), 10, 3 );
|
340 |
+
}
|
341 |
+
|
342 |
+
public function LogSubMenuAbout() {
|
343 |
+
?>
|
344 |
+
<div class="wrap">
|
345 |
+
<h2><?php echo $this->getPluginDisplayName(); echo ' '; _e('About', 'wpml'); ?></h2>
|
346 |
+
<h3>Why use?</h3>
|
347 |
+
<p>Sometimes you may ask yourself if a mail was actually sent by WordPress - with
|
348 |
+
<strong>With <?php echo $this->getPluginDisplayName(); ?>, you can:</strong></p>
|
349 |
+
<ul>
|
350 |
+
<li>View a complete list of sent mails.</li>
|
351 |
+
<li>Search for mails.</li>
|
352 |
+
<li>Count on regular updates, enhancements, and troubleshooting.</li>
|
353 |
+
<li>Developer: Boost your development performance by keeping track of sent mails from your WordPress site.</li>
|
354 |
+
<li>Developer: Use Filters that are provided to extend the columns.</li>
|
355 |
+
</ul>
|
356 |
+
<h3>Contributors</h3>
|
357 |
+
<p>This plugin is open source and some people helped to make it better:</p>
|
358 |
+
<ul>
|
359 |
+
<li>tripflex</li>
|
360 |
+
<li><a href="http://www.grafixone.co.za" title="GrafixONE">André Groenewald</a> (Icon)</li>
|
361 |
+
</ul>
|
362 |
+
<h3>Donate</h3>
|
363 |
+
<p>Please consider to make a donation if you like the plugin. I spent a lot of time for support, enhancements and updates in general.</p>
|
364 |
+
<a title="Donate" href="http://no3x.de/web/donate">Donate</a>
|
365 |
+
</div>
|
366 |
+
<?php
|
367 |
+
}
|
368 |
+
|
369 |
+
public function load_assets() {
|
370 |
+
|
371 |
+
global $wp_logging_list_page;
|
372 |
+
$screen = get_current_screen();
|
373 |
+
|
374 |
+
if ( $screen->id != $wp_logging_list_page )
|
375 |
+
return;
|
376 |
+
|
377 |
+
// Enqueue Styles and Scripts if we're on the list page
|
378 |
+
wp_enqueue_script( 'wp-logging-modal', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/js/modal.js', array( 'jquery' ), '1.0.0', true );
|
379 |
+
wp_localize_script( 'wp-logging-modal', 'wpml_modal', array('ajax_nonce' => wp_create_nonce( 'wpml-modal-show' ) ) );
|
380 |
+
wp_enqueue_style( 'wp-logging-modal', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/css/modal.css', array(), '1.0.0' );
|
381 |
+
wp_enqueue_style( 'wp-logging-icons', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/lib/font-awesome/css/font-awesome.min.css', array(), '4.1.0' );
|
382 |
+
wp_enqueue_script( 'icheck', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/lib/icheck/icheck.min.js', array(), '1.0.2' );
|
383 |
+
wp_enqueue_style( 'icheck-square', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/lib/icheck/square/blue.css', array(), '1.0.2' );
|
384 |
+
}
|
385 |
+
|
386 |
+
/**
|
387 |
+
* Add settings Panel
|
388 |
+
*/
|
389 |
+
function create_settings_panel($contextual_help, $screen_id, $screen) {
|
390 |
+
|
391 |
+
global $hook_suffix;
|
392 |
+
|
393 |
+
// Just add if we are at the plugin page
|
394 |
+
if ( strpos($hook_suffix, $this->getPluginSlug() . '_log' ) == false )
|
395 |
+
return $contextual_help;
|
396 |
+
|
397 |
+
// The add_help_tab function for screen was introduced in WordPress 3.3.
|
398 |
+
if ( ! method_exists( $screen, 'add_help_tab' ) )
|
399 |
+
return $contextual_help;
|
400 |
+
|
401 |
+
|
402 |
+
// List screen properties
|
403 |
+
$left = '<div style="width:50%;float:left;">'
|
404 |
+
. '<h4>About this plugin</h4>'
|
405 |
+
. '<p>This plugin is open source.</p>'
|
406 |
+
. '</div>';
|
407 |
+
|
408 |
+
|
409 |
+
$right = '<div style="width:50%;float:right;">'
|
410 |
+
. '<h4>Donate</h4>'
|
411 |
+
. '<p>If you like the plugin please consider to make a donation. More information are provided on my <a href="http://no3x.de/web/donate">website</a>.</p>'
|
412 |
+
. '</div>';
|
413 |
+
|
414 |
+
$help_content = $left . $right;
|
415 |
+
|
416 |
+
/**
|
417 |
+
* Content specified inline
|
418 |
+
*/
|
419 |
+
$screen->add_help_tab(
|
420 |
+
array(
|
421 |
+
'title' => __('About Plugin', 'wpml'),
|
422 |
+
'id' => 'about_tab',
|
423 |
+
'content' => '<p>' . __( "{$this->getPluginDisplayName()}, logs each email sent by WordPress.", 'wpml') . '</p>' . $help_content,
|
424 |
+
'callback' => false
|
425 |
+
)
|
426 |
+
);
|
427 |
+
|
428 |
+
// Add help sidebar
|
429 |
+
$screen->set_help_sidebar(
|
430 |
+
'<p><strong>' . __('More information', 'wpml') . '</strong></p>' .
|
431 |
+
'<p><a href = "http://wordpress.org/extend/plugins/wp-mail-logging/">' . __('Plugin Homepage/support', 'wpml') . '</a></p>' .
|
432 |
+
'<p><a href = "http://no3x.de/">' . __("Plugin author's blog", 'wpml') . '</a></p>'
|
433 |
+
);
|
434 |
+
|
435 |
+
// Add screen options
|
436 |
+
$screen->add_option(
|
437 |
+
'per_page',
|
438 |
+
array(
|
439 |
+
'label' => __('Entries per page', 'wpml'),
|
440 |
+
'default' => 25,
|
441 |
+
'option' => 'per_page'
|
442 |
+
)
|
443 |
+
);
|
444 |
+
|
445 |
+
return $contextual_help;
|
446 |
+
}
|
447 |
+
|
448 |
+
/**
|
449 |
+
* Save Screen option
|
450 |
+
* @since 1.3
|
451 |
+
*/
|
452 |
+
function save_screen_options( $status, $option, $value ) {
|
453 |
+
if ( 'per_page' == $option ) return $value;
|
454 |
+
return $status;
|
455 |
+
}
|
456 |
+
|
457 |
+
public function LogMenu() {
|
458 |
+
global $wp_version, $wpml_settings;
|
459 |
+
|
460 |
+
if ( !current_user_can( $this->getSetting( 'can-see-submission-data', 'manage_options' ) ) ) {
|
461 |
+
wp_die(__('You do not have sufficient permissions to access this page.', 'wpml'));
|
462 |
+
}
|
463 |
+
|
464 |
+
if (!class_exists( 'Email_Log_List_Table' ) ) {
|
465 |
+
require_once ( plugin_dir_path( __FILE__ ) . 'WPML_Email_Log_List.php' );
|
466 |
+
}
|
467 |
+
|
468 |
+
?>
|
469 |
+
<div class="wrap">
|
470 |
+
<h2><?php echo $this->getPluginDisplayName(); echo ' '; _e('Log', 'wpml'); ?></h2>
|
471 |
+
<script>
|
472 |
+
jQuery(document).ready(function($) {
|
473 |
+
$('#wp-mail-logging-modal-content-header-format-switch input').iCheck({
|
474 |
+
checkboxClass: 'icheckbox_square-blue',
|
475 |
+
radioClass: 'iradio_square-blue',
|
476 |
+
increaseArea: '20%' // optional
|
477 |
+
});
|
478 |
+
});
|
479 |
+
</script>
|
480 |
+
<div id="wp-mail-logging-modal-wrap">
|
481 |
+
<div id="wp-mail-logging-modal-backdrop"></div>
|
482 |
+
<div id="wp-mail-logging-modal-content-wrap">
|
483 |
+
<div id="wp-mail-logging-modal-content">
|
484 |
+
<div id="wp-mail-logging-modal-content-header">
|
485 |
+
<a id="wp-mail-logging-modal-content-header-close" class="wp-mail-logging-modal-close" href="#" title="Close">
|
486 |
+
<?php if ( $wp_version >= 3.8 ): ?>
|
487 |
+
<div class="dashicons dashicons-no"></div>
|
488 |
+
<?php else: ?>
|
489 |
+
<span class="wp-mail-logging-modal-content-header-compat-close">X</span>
|
490 |
+
<?php endif; ?>
|
491 |
+
</a>
|
492 |
+
<?php if ( $wp_version >= 3.8 ): ?>
|
493 |
+
<div id="wp-mail-logging-modal-content-header-icon" class="dashicons dashicons-email-alt"></div>
|
494 |
+
<?php endif; ?>
|
495 |
+
<div id="wp-mail-logging-modal-content-header-title">
|
496 |
+
<?php _e( 'Message', 'wpml' ); ?>
|
497 |
+
</div>
|
498 |
+
<div id="wp-mail-logging-modal-content-header-format-switch">
|
499 |
+
<?php
|
500 |
+
$supported_formats = apply_filters( WPML_Plugin::HOOK_LOGGING_SUPPORTED_FORMATS, array('html') );
|
501 |
+
foreach( $supported_formats as $key => $format ) {
|
502 |
+
$checked = checked($format, $wpml_settings['preferred-mail-format'], false);
|
503 |
+
echo ' <input type="radio" name="format" ' . $checked . ' id="' . esc_attr( $format ) . '"> ' . esc_html( $format ) . '</input> ';
|
504 |
+
}
|
505 |
+
?>
|
506 |
+
</div>
|
507 |
+
</div>
|
508 |
+
<div id="wp-mail-logging-modal-content-body">
|
509 |
+
<div id="wp-mail-logging-modal-content-body-content">
|
510 |
+
|
511 |
+
</div>
|
512 |
+
</div>
|
513 |
+
<div id="wp-mail-logging-modal-content-footer">
|
514 |
+
<a class="wp-mail-logging-modal-close button button-primary" href="#"><?php _e( 'Close', 'wpml' ); ?></a>
|
515 |
+
</div>
|
516 |
+
</div>
|
517 |
+
</div>
|
518 |
+
</div>
|
519 |
+
|
520 |
+
<form id="email-list" method="post">
|
521 |
+
<input type="hidden" name="page" value="<?php echo esc_attr( $_REQUEST['page'] ); ?>" />
|
522 |
+
<?php
|
523 |
+
wp_nonce_field( WPML_Email_Log_List::NONCE_LIST_TABLE, WPML_Email_Log_List::NONCE_LIST_TABLE . '_nonce' );
|
524 |
+
$search = ( isset( $_REQUEST['s'] ) ) ? $_REQUEST['s'] : false;
|
525 |
+
$emailLogList = WPML_Init::getInstance()->getService('emailLogList');
|
526 |
+
$emailLogList->prepare_items( $search );
|
527 |
+
$emailLogList->search_box( __( 'Search' ), 's' );
|
528 |
+
$emailLogList->display();
|
529 |
+
?>
|
530 |
+
</form>
|
531 |
+
</div>
|
532 |
+
<?php
|
533 |
+
}
|
534 |
+
|
535 |
+
/**
|
536 |
+
* Override this method and follow its format.
|
537 |
+
* The purpose of this method is to provide i18n display strings for the values of options.
|
538 |
+
* For example, you may create a options with values 'true' or 'false'.
|
539 |
+
* In the options page, this will show as a drop down list with these choices.
|
540 |
+
* But when the the language is not English, you would like to display different strings
|
541 |
+
* for 'true' and 'false' while still keeping the value of that option that is actually saved in
|
542 |
+
* the DB as 'true' or 'false'.
|
543 |
+
* To do this, follow the convention of defining option values in getOptionMetaData() as canonical names
|
544 |
+
* (what you want them to literally be, like 'true') and then add each one to the switch statement in this
|
545 |
+
* function, returning the "__()" i18n name of that string.
|
546 |
+
* @param $optionValue string
|
547 |
+
* @return string __($optionValue) if it is listed in this method, otherwise just returns $optionValue
|
548 |
+
*/
|
549 |
+
protected function getOptionValueI18nString($optionValue) {
|
550 |
+
switch ($optionValue) {
|
551 |
+
case 'true':
|
552 |
+
return __('true', 'wpml');
|
553 |
+
case 'false':
|
554 |
+
return __('false', 'wpml');
|
555 |
+
|
556 |
+
case 'Administrator':
|
557 |
+
return __('Administrator', 'wpml');
|
558 |
+
case 'Editor':
|
559 |
+
return __('Editor', 'wpml');
|
560 |
+
case 'Author':
|
561 |
+
return __('Author', 'wpml');
|
562 |
+
case 'Contributor':
|
563 |
+
return __('Contributor', 'wpml');
|
564 |
+
case 'Subscriber':
|
565 |
+
return __('Subscriber', 'wpml');
|
566 |
+
case 'Anyone':
|
567 |
+
return __('Anyone', 'wpml');
|
568 |
+
}
|
569 |
+
return $optionValue;
|
570 |
+
}
|
571 |
+
|
572 |
+
/**
|
573 |
+
* Query MySQL DB for its version
|
574 |
+
* @return string|false
|
575 |
+
*/
|
576 |
+
protected function getMySqlVersion() {
|
577 |
+
global $wpdb;
|
578 |
+
$rows = $wpdb->get_results('select version() as mysqlversion');
|
579 |
+
if (!empty($rows)) {
|
580 |
+
return $rows[0]->mysqlversion;
|
581 |
+
}
|
582 |
+
return false;
|
583 |
+
}
|
584 |
+
|
585 |
+
/**
|
586 |
+
* If you want to generate an email address like "no-reply@your-site.com" then
|
587 |
+
* you can use this to get the domain name part.
|
588 |
+
* E.g. 'no-reply@' . $this->getEmailDomain();
|
589 |
+
* This code was stolen from the wp_mail function, where it generates a default
|
590 |
+
* from "wordpress@your-site.com"
|
591 |
+
* @return string domain name
|
592 |
+
*/
|
593 |
+
public function getEmailDomain() {
|
594 |
+
// Get the site domain and get rid of www.
|
595 |
+
$sitename = strtolower($_SERVER['SERVER_NAME']);
|
596 |
+
if (substr($sitename, 0, 4) == 'www.') {
|
597 |
+
$sitename = substr($sitename, 4);
|
598 |
+
}
|
599 |
+
return $sitename;
|
600 |
+
}
|
601 |
+
}
|
602 |
+
|
WPML_Plugin.php
CHANGED
@@ -1,195 +1,201 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
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 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace No3x\WPML;
|
4 |
+
|
5 |
+
use No3x\WPML\Model\WPML_Mail as Mail;
|
6 |
+
|
7 |
+
// Exit if accessed directly.
|
8 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
9 |
+
|
10 |
+
class WPML_Plugin extends WPML_LifeCycle {
|
11 |
+
|
12 |
+
protected $emailLogList;
|
13 |
+
|
14 |
+
const HOOK_LOGGING_COLUMNS = 'wpml_hook_mail_columns';
|
15 |
+
const HOOK_LOGGING_COLUMNS_RENDER = 'wpml_hook_mail_columns_render';
|
16 |
+
const HOOK_LOGGING_SUPPORTED_FORMATS = 'wpml_hook_supported_formats';
|
17 |
+
const HOOK_LOGGING_FORMAT_CONTENT = 'wpml_hook_format_content';
|
18 |
+
|
19 |
+
public static function getTablename( $name ) {
|
20 |
+
global $wpdb;
|
21 |
+
return $wpdb->prefix . 'wpml_' . $name;
|
22 |
+
}
|
23 |
+
|
24 |
+
public function getPluginDisplayName() {
|
25 |
+
return 'WP Mail Logging';
|
26 |
+
}
|
27 |
+
|
28 |
+
public function getMainPluginFileName() {
|
29 |
+
return 'wp-mail-logging.php';
|
30 |
+
}
|
31 |
+
|
32 |
+
public function getVersionSaved() {
|
33 |
+
return parent::getVersionSaved();
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* See: http://plugin.michael-simpson.com/?page_id=101
|
38 |
+
* Called by install() to create any database tables if needed.
|
39 |
+
* Best Practice:
|
40 |
+
* (1) Prefix all table names with $wpdb->prefix
|
41 |
+
* (2) make table names lower case only
|
42 |
+
* @return void
|
43 |
+
*/
|
44 |
+
protected function installDatabaseTables() {
|
45 |
+
global $wpdb;
|
46 |
+
$tableName = WPML_Plugin::getTablename('mails');
|
47 |
+
$wpdb->query("CREATE TABLE IF NOT EXISTS `$tableName` (
|
48 |
+
`mail_id` INT NOT NULL AUTO_INCREMENT,
|
49 |
+
`timestamp` TIMESTAMP NOT NULL,
|
50 |
+
`receiver` VARCHAR(200) NOT NULL DEFAULT '0',
|
51 |
+
`subject` VARCHAR(200) NOT NULL DEFAULT '0',
|
52 |
+
`message` TEXT NULL,
|
53 |
+
`headers` TEXT NULL,
|
54 |
+
`attachments` VARCHAR(800) NOT NULL DEFAULT '0',
|
55 |
+
`plugin_version` VARCHAR(200) NOT NULL DEFAULT '0',
|
56 |
+
PRIMARY KEY (`mail_id`)
|
57 |
+
) DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE utf8_general_ci;");
|
58 |
+
}
|
59 |
+
|
60 |
+
|
61 |
+
/**
|
62 |
+
* See: http://plugin.michael-simpson.com/?page_id=101
|
63 |
+
* Drop plugin-created tables on uninstall.
|
64 |
+
* @return void
|
65 |
+
*/
|
66 |
+
protected function unInstallDatabaseTables() {
|
67 |
+
global $wpdb;
|
68 |
+
$tableName = WPML_Plugin::getTablename('mails');
|
69 |
+
$wpdb->query("DROP TABLE IF EXISTS `$tableName`");
|
70 |
+
}
|
71 |
+
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Perform actions when upgrading from version X to version Y
|
75 |
+
* See: http://plugin.michael-simpson.com/?page_id=35
|
76 |
+
* @return void
|
77 |
+
*/
|
78 |
+
public function upgrade() {
|
79 |
+
global $wpdb;
|
80 |
+
$upgradeOk = true;
|
81 |
+
$savedVersion = $this->getVersionSaved();
|
82 |
+
$tableName = $this->getTablename('mails');
|
83 |
+
|
84 |
+
if ($this->isVersionLessThan($savedVersion, '2.0')) {
|
85 |
+
if ($this->isVersionLessThan($savedVersion, '1.2')) {
|
86 |
+
$wpdb->query("ALTER TABLE `$tableName` CHANGE COLUMN `to` `receiver` VARCHAR(200)");
|
87 |
+
}
|
88 |
+
if ($this->isVersionLessThan($savedVersion, '1.3')) {
|
89 |
+
$wpdb->query("ALTER TABLE `$tableName` MODIFY COLUMN `attachments` VARCHAR(800) NOT NULL DEFAULT '0'");
|
90 |
+
}
|
91 |
+
if ($this->isVersionLessThan($savedVersion, '1.4')) {
|
92 |
+
$wpdb->query("ALTER TABLE `$tableName` CHARACTER SET utf8 COLLATE utf8_general_ci;");
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
+
if ( !empty( $wpdb->last_error ) ) {
|
97 |
+
$upgradeOk = false;
|
98 |
+
if ( is_admin() ) {
|
99 |
+
echo "There was at least one error while upgrading the database schema. Please report the following error: {$wpdb->last_error}";
|
100 |
+
}
|
101 |
+
}
|
102 |
+
|
103 |
+
// Post-upgrade, set the current version in the options
|
104 |
+
$codeVersion = $this->getVersion();
|
105 |
+
if ($upgradeOk && $savedVersion != $codeVersion) {
|
106 |
+
$this->saveInstalledVersion();
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
public function addActionsAndFilters() {
|
111 |
+
// Add options administration page
|
112 |
+
// http://plugin.michael-simpson.com/?page_id=47
|
113 |
+
add_action( 'admin_menu', array(&$this, 'createSettingsMenu'), 9 );
|
114 |
+
|
115 |
+
// Example adding a script & style just for the options administration page
|
116 |
+
// http://plugin.michael-simpson.com/?page_id=47
|
117 |
+
// if (strpos($_SERVER['REQUEST_URI'], $this->getSettingsSlug()) !== false) {
|
118 |
+
// wp_enqueue_script('my-script', plugins_url('/js/my-script.js', __FILE__));
|
119 |
+
// wp_enqueue_style('my-style', plugins_url('/css/my-style.css', __FILE__));
|
120 |
+
// }
|
121 |
+
|
122 |
+
|
123 |
+
// Add Actions & Filters
|
124 |
+
// http://plugin.michael-simpson.com/?page_id=37
|
125 |
+
add_filter( 'plugin_action_links', array( &$this, 'registerPluginActionLinks'), 10, 5 );
|
126 |
+
add_filter( 'wp_mail', array( &$this, 'log_email' ), PHP_INT_MAX );
|
127 |
+
add_filter( 'set-screen-option', array( &$this, 'save_screen_options' ), 10, 3);
|
128 |
+
add_filter( 'wpml_get_plugin_version', array( &$this, 'getVersion' ) );
|
129 |
+
add_filter( 'wpml_get_plugin_name', array( &$this, 'getPluginDisplayName' ) );
|
130 |
+
add_filter( 'wpml_get_date_time_format', array( &$this, 'getDateTimeFormatString' ) );
|
131 |
+
// Adding scripts & styles to all pages
|
132 |
+
// Examples:
|
133 |
+
// wp_enqueue_script('jquery');
|
134 |
+
// wp_enqueue_style('my-style', plugins_url('/css/my-style.css', __FILE__));
|
135 |
+
// wp_enqueue_script('my-script', plugins_url('/js/my-script.js', __FILE__));
|
136 |
+
|
137 |
+
|
138 |
+
// Register short codes
|
139 |
+
// http://plugin.michael-simpson.com/?page_id=39
|
140 |
+
|
141 |
+
|
142 |
+
// Register AJAX hooks
|
143 |
+
// http://plugin.michael-simpson.com/?page_id=41
|
144 |
+
|
145 |
+
}
|
146 |
+
|
147 |
+
private function extractReceiver( $receiver ) {
|
148 |
+
return is_array( $receiver ) ? implode( ',\n', $receiver ) : $receiver;
|
149 |
+
}
|
150 |
+
|
151 |
+
private function extractHeader( $headers ) {
|
152 |
+
return is_array( $headers ) ? implode( ',\n', $headers ) : $headers;
|
153 |
+
}
|
154 |
+
|
155 |
+
private function extractAttachments( $attachments ) {
|
156 |
+
$attachments = is_array( $attachments ) ? $attachments : array( $attachments );
|
157 |
+
$attachment_urls = array();
|
158 |
+
$uploads = wp_upload_dir();
|
159 |
+
$basename = 'uploads';
|
160 |
+
$basename_needle = '/'.$basename.'/';
|
161 |
+
foreach ( $attachments as $attachment ) {
|
162 |
+
$append_url = substr( $attachment, strrpos( $attachment, $basename_needle ) + strlen($basename_needle) - 1 );
|
163 |
+
$attachment_urls[] = $append_url;
|
164 |
+
}
|
165 |
+
return implode( ',\n', $attachment_urls );
|
166 |
+
}
|
167 |
+
|
168 |
+
private function extractMessage( $mail ) {
|
169 |
+
if ( isset($mail['message']) ) {
|
170 |
+
// usually the message is stored in the message field
|
171 |
+
return $mail['message'];
|
172 |
+
} elseif ( isset($mail['html']) ) {
|
173 |
+
// for example Mandrill stores the message in the 'html' field (see gh-22)
|
174 |
+
return $mail['html'];
|
175 |
+
}
|
176 |
+
return "";
|
177 |
+
}
|
178 |
+
|
179 |
+
|
180 |
+
private function extractFields( $mail ) {
|
181 |
+
return array(
|
182 |
+
'receiver' => $this->extractReceiver( $mail['to'] ),
|
183 |
+
'subject' => $mail['subject'],
|
184 |
+
'message' => $this->extractMessage( $mail ),
|
185 |
+
'headers' => $this->extractHeader( $mail['headers'] ),
|
186 |
+
'attachments' => $this->extractAttachments( $mail['attachments'] ),
|
187 |
+
'plugin_version' => $this->getVersionSaved(),
|
188 |
+
'timestamp' => current_time( 'mysql' )
|
189 |
+
);
|
190 |
+
}
|
191 |
+
|
192 |
+
public function log_email( $mailOriginal ) {
|
193 |
+
// make copy to avoid any changes on the original mail
|
194 |
+
$mail = $mailOriginal;
|
195 |
+
|
196 |
+
$fields = $this->extractFields( $mail );
|
197 |
+
Mail::create($fields)->save();
|
198 |
+
|
199 |
+
return $mailOriginal;
|
200 |
+
}
|
201 |
+
}
|
WPML_ShortCodeLoader.php
CHANGED
@@ -1,65 +1,67 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
"WordPress Plugin Template" Copyright (C) 2013 Michael Simpson (email : michael.d.simpson@gmail.com)
|
4 |
-
|
5 |
-
This file is part of WordPress Plugin Template for WordPress.
|
6 |
-
|
7 |
-
WordPress Plugin Template is free software: you can redistribute it and/or modify
|
8 |
-
it under the terms of the GNU General Public License as published by
|
9 |
-
the Free Software Foundation, either version 3 of the License, or
|
10 |
-
(at your option) any later version.
|
11 |
-
|
12 |
-
WordPress Plugin Template is distributed in the hope that it will be useful,
|
13 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
-
GNU General Public License for more details.
|
16 |
-
|
17 |
-
You should have received a copy of the GNU General Public License
|
18 |
-
along with Contact Form to Database Extension.
|
19 |
-
If not, see http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
-
*/
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
*
|
31 |
-
*
|
32 |
-
*
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
*
|
42 |
-
*
|
43 |
-
*
|
44 |
-
* shortcode
|
45 |
-
* @
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
* @
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
"WordPress Plugin Template" Copyright (C) 2013 Michael Simpson (email : michael.d.simpson@gmail.com)
|
4 |
+
|
5 |
+
This file is part of WordPress Plugin Template for WordPress.
|
6 |
+
|
7 |
+
WordPress Plugin Template is free software: you can redistribute it and/or modify
|
8 |
+
it under the terms of the GNU General Public License as published by
|
9 |
+
the Free Software Foundation, either version 3 of the License, or
|
10 |
+
(at your option) any later version.
|
11 |
+
|
12 |
+
WordPress Plugin Template is distributed in the hope that it will be useful,
|
13 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
+
GNU General Public License for more details.
|
16 |
+
|
17 |
+
You should have received a copy of the GNU General Public License
|
18 |
+
along with Contact Form to Database Extension.
|
19 |
+
If not, see http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
+
*/
|
21 |
+
|
22 |
+
namespace No3x\WPML;
|
23 |
+
|
24 |
+
// Exit if accessed directly.
|
25 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
26 |
+
|
27 |
+
abstract class WPML_ShortCodeLoader {
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @param $shortcodeName mixed either string name of the shortcode
|
31 |
+
* (as it would appear in a post, e.g. [shortcodeName])
|
32 |
+
* or an array of such names in case you want to have more than one name
|
33 |
+
* for the same shortcode
|
34 |
+
* @return void
|
35 |
+
*/
|
36 |
+
public function register($shortcodeName) {
|
37 |
+
$this->registerShortcodeToFunction($shortcodeName, 'handleShortcode');
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @param $shortcodeName mixed either string name of the shortcode
|
42 |
+
* (as it would appear in a post, e.g. [shortcodeName])
|
43 |
+
* or an array of such names in case you want to have more than one name
|
44 |
+
* for the same shortcode
|
45 |
+
* @param $functionName string name of public function in this class to call as the
|
46 |
+
* shortcode handler
|
47 |
+
* @return void
|
48 |
+
*/
|
49 |
+
protected function registerShortcodeToFunction($shortcodeName, $functionName) {
|
50 |
+
if (is_array($shortcodeName)) {
|
51 |
+
foreach ($shortcodeName as $aName) {
|
52 |
+
add_shortcode($aName, array($this, $functionName));
|
53 |
+
}
|
54 |
+
}
|
55 |
+
else {
|
56 |
+
add_shortcode($shortcodeName, array($this, $functionName));
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* @abstract Override this function and add actual shortcode handling here
|
62 |
+
* @param $atts shortcode inputs
|
63 |
+
* @return string shortcode content
|
64 |
+
*/
|
65 |
+
public abstract function handleShortcode($atts);
|
66 |
+
|
67 |
+
}
|
WPML_ShortCodeScriptLoader.php
CHANGED
@@ -1,69 +1,69 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
"WordPress Plugin Template" Copyright (C) 2013 Michael Simpson (email : michael.d.simpson@gmail.com)
|
4 |
-
|
5 |
-
This file is part of WordPress Plugin Template for WordPress.
|
6 |
-
|
7 |
-
WordPress Plugin Template is free software: you can redistribute it and/or modify
|
8 |
-
it under the terms of the GNU General Public License as published by
|
9 |
-
the Free Software Foundation, either version 3 of the License, or
|
10 |
-
(at your option) any later version.
|
11 |
-
|
12 |
-
WordPress Plugin Template is distributed in the hope that it will be useful,
|
13 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
-
GNU General Public License for more details.
|
16 |
-
|
17 |
-
You should have received a copy of the GNU General Public License
|
18 |
-
along with Contact Form to Database Extension.
|
19 |
-
If not, see http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
-
*/
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Adapted from this excellent article:
|
29 |
-
* http://scribu.net/wordpress/optimal-script-loading.html
|
30 |
-
*
|
31 |
-
* The idea is you have a shortcode that needs a script loaded, but you only
|
32 |
-
* want to load it if the shortcode is actually called.
|
33 |
-
*/
|
34 |
-
abstract class WPML_ShortCodeScriptLoader extends WPML_ShortCodeLoader {
|
35 |
-
|
36 |
-
var $doAddScript;
|
37 |
-
|
38 |
-
public function register($shortcodeName) {
|
39 |
-
$this->registerShortcodeToFunction($shortcodeName, 'handleShortcodeWrapper');
|
40 |
-
|
41 |
-
// It will be too late to enqueue the script in the header,
|
42 |
-
// but can add them to the footer
|
43 |
-
add_action('wp_footer', array($this, 'addScriptWrapper'));
|
44 |
-
}
|
45 |
-
|
46 |
-
public function handleShortcodeWrapper($atts) {
|
47 |
-
// Flag that we need to add the script
|
48 |
-
$this->doAddScript = true;
|
49 |
-
return $this->handleShortcode($atts);
|
50 |
-
}
|
51 |
-
|
52 |
-
|
53 |
-
public function addScriptWrapper() {
|
54 |
-
// Only add the script if the shortcode was actually called
|
55 |
-
if ($this->doAddScript) {
|
56 |
-
$this->addScript();
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
/**
|
61 |
-
* @abstract override this function with calls to insert scripts needed by your shortcode in the footer
|
62 |
-
* Example:
|
63 |
-
* wp_register_script('my-script', plugins_url('js/my-script.js', __FILE__), array('jquery'), '1.0', true);
|
64 |
-
* wp_print_scripts('my-script');
|
65 |
-
* @return void
|
66 |
-
*/
|
67 |
-
public abstract function addScript();
|
68 |
-
|
69 |
-
}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
"WordPress Plugin Template" Copyright (C) 2013 Michael Simpson (email : michael.d.simpson@gmail.com)
|
4 |
+
|
5 |
+
This file is part of WordPress Plugin Template for WordPress.
|
6 |
+
|
7 |
+
WordPress Plugin Template is free software: you can redistribute it and/or modify
|
8 |
+
it under the terms of the GNU General Public License as published by
|
9 |
+
the Free Software Foundation, either version 3 of the License, or
|
10 |
+
(at your option) any later version.
|
11 |
+
|
12 |
+
WordPress Plugin Template is distributed in the hope that it will be useful,
|
13 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
+
GNU General Public License for more details.
|
16 |
+
|
17 |
+
You should have received a copy of the GNU General Public License
|
18 |
+
along with Contact Form to Database Extension.
|
19 |
+
If not, see http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
+
*/
|
21 |
+
|
22 |
+
namespace No3x\WPML;
|
23 |
+
|
24 |
+
// Exit if accessed directly.
|
25 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Adapted from this excellent article:
|
29 |
+
* http://scribu.net/wordpress/optimal-script-loading.html
|
30 |
+
*
|
31 |
+
* The idea is you have a shortcode that needs a script loaded, but you only
|
32 |
+
* want to load it if the shortcode is actually called.
|
33 |
+
*/
|
34 |
+
abstract class WPML_ShortCodeScriptLoader extends WPML_ShortCodeLoader {
|
35 |
+
|
36 |
+
var $doAddScript;
|
37 |
+
|
38 |
+
public function register($shortcodeName) {
|
39 |
+
$this->registerShortcodeToFunction($shortcodeName, 'handleShortcodeWrapper');
|
40 |
+
|
41 |
+
// It will be too late to enqueue the script in the header,
|
42 |
+
// but can add them to the footer
|
43 |
+
add_action('wp_footer', array($this, 'addScriptWrapper'));
|
44 |
+
}
|
45 |
+
|
46 |
+
public function handleShortcodeWrapper($atts) {
|
47 |
+
// Flag that we need to add the script
|
48 |
+
$this->doAddScript = true;
|
49 |
+
return $this->handleShortcode($atts);
|
50 |
+
}
|
51 |
+
|
52 |
+
|
53 |
+
public function addScriptWrapper() {
|
54 |
+
// Only add the script if the shortcode was actually called
|
55 |
+
if ($this->doAddScript) {
|
56 |
+
$this->addScript();
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* @abstract override this function with calls to insert scripts needed by your shortcode in the footer
|
62 |
+
* Example:
|
63 |
+
* wp_register_script('my-script', plugins_url('js/my-script.js', __FILE__), array('jquery'), '1.0', true);
|
64 |
+
* wp_print_scripts('my-script');
|
65 |
+
* @return void
|
66 |
+
*/
|
67 |
+
public abstract function addScript();
|
68 |
+
|
69 |
+
}
|
WPML_Utils.php
CHANGED
@@ -1,106 +1,113 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
*
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
*
|
16 |
-
* @
|
17 |
-
* @param string $
|
18 |
-
* @
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
if(
|
25 |
-
return $
|
26 |
-
|
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 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace No3x\WPML;
|
4 |
+
|
5 |
+
// Exit if accessed directly.
|
6 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Utils
|
10 |
+
* @author No3x
|
11 |
+
* @since 1.6.0
|
12 |
+
*/
|
13 |
+
class WPML_Utils {
|
14 |
+
/**
|
15 |
+
* Ensure value is subset of given set
|
16 |
+
* @since 1.6.0
|
17 |
+
* @param string $value expected value.
|
18 |
+
* @param array $allowed_values allowed values.
|
19 |
+
* @param string $default_value default value.
|
20 |
+
* @return mixed
|
21 |
+
*/
|
22 |
+
public static function sanitize_expected_value( $value, $allowed_values, $default_value = null ) {
|
23 |
+
$allowed_values = (is_array( $allowed_values ) ) ? $allowed_values : array( $allowed_values );
|
24 |
+
if ( $value && in_array( $value, $allowed_values ) ) {
|
25 |
+
return $value;
|
26 |
+
}
|
27 |
+
if ( null !== $default_value ) {
|
28 |
+
return $default_value;
|
29 |
+
}
|
30 |
+
return false;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Multilevel array_search
|
35 |
+
* @since 1.3
|
36 |
+
* @param string $needle the searched value.
|
37 |
+
* @param array $haystack the array.
|
38 |
+
* @return mixed Returns the value if needle is found in the array, false otherwise.
|
39 |
+
* @see array_search()
|
40 |
+
*/
|
41 |
+
public static function recursive_array_search( $needle, $haystack ) {
|
42 |
+
foreach ( $haystack as $key => $value ) {
|
43 |
+
$current_key = $key;
|
44 |
+
if ( $needle === $value or ( is_array( $value ) && self::recursive_array_search( $needle, $value ) !== false ) ) {
|
45 |
+
return $current_key;
|
46 |
+
}
|
47 |
+
}
|
48 |
+
return false;
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Determines appropriate fa icon for a file
|
53 |
+
* @sine 1.3
|
54 |
+
* @param string $file_path path to file.
|
55 |
+
* @return Ambigous <boolean, string> Returns the most suitable icon or false if not possible.
|
56 |
+
*/
|
57 |
+
public static function determine_fa_icon( $file_path ) {
|
58 |
+
$supported = array(
|
59 |
+
'archive' => array(
|
60 |
+
'application/zip',
|
61 |
+
'application/x-rar-compressed',
|
62 |
+
'application/x-rar',
|
63 |
+
'application/x-gzip',
|
64 |
+
'application/x-msdownload',
|
65 |
+
'application/x-msdownload',
|
66 |
+
'application/vnd.ms-cab-compressed',
|
67 |
+
),
|
68 |
+
'audio',
|
69 |
+
'code' => array(
|
70 |
+
'text/x-c',
|
71 |
+
'text/x-c++',
|
72 |
+
),
|
73 |
+
'excel' => array( 'application/vnd.ms-excel'
|
74 |
+
),
|
75 |
+
'image', 'text', 'movie', 'pdf', 'photo', 'picture',
|
76 |
+
'powerpoint' => array(
|
77 |
+
'application/vnd.ms-powerpoint'
|
78 |
+
), 'sound', 'video', 'word' => array(
|
79 |
+
'application/msword'
|
80 |
+
), 'zip'
|
81 |
+
);
|
82 |
+
|
83 |
+
$mime = mime_content_type( $file_path );
|
84 |
+
$mime_parts = explode( '/', $mime );
|
85 |
+
$attribute = $mime_parts[0];
|
86 |
+
$type = $mime_parts[1];
|
87 |
+
|
88 |
+
$fa_icon = false;
|
89 |
+
if ( ($key = self::recursive_array_search( $mime, $supported ) ) !== false ) {
|
90 |
+
// Use specific icon for mime first.
|
91 |
+
$fa_icon = $key;
|
92 |
+
} elseif ( in_array( $attribute, $supported ) ) {
|
93 |
+
// Use generic file icon.
|
94 |
+
$fa_icon = $attribute;
|
95 |
+
}
|
96 |
+
|
97 |
+
if ( false === $fa_icon ) {
|
98 |
+
return '<i class="fa fa-file-o"></i>';
|
99 |
+
} else {
|
100 |
+
return '<i class="fa fa-file-' . $fa_icon . '-o"></i>';
|
101 |
+
}
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Find appropriate fa icon from file path
|
106 |
+
* @since 1.3
|
107 |
+
* @param string $file_path path to file.
|
108 |
+
* @return string
|
109 |
+
*/
|
110 |
+
public static function generate_attachment_icon( $file_path ) {
|
111 |
+
return self::determine_fa_icon( $file_path );
|
112 |
+
}
|
113 |
+
}
|
autoload.php
ADDED
@@ -0,0 +1,168 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* An example of a general-purpose implementation that includes the optional
|
5 |
+
* functionality of allowing multiple base directories for a single namespace
|
6 |
+
* prefix.
|
7 |
+
*
|
8 |
+
* Given a foo-bar package of classes in the file system at the following
|
9 |
+
* paths ...
|
10 |
+
*
|
11 |
+
* /path/to/packages/foo-bar/
|
12 |
+
* src/
|
13 |
+
* Baz.php # Foo\Bar\Baz
|
14 |
+
* Qux/
|
15 |
+
* Quux.php # Foo\Bar\Qux\Quux
|
16 |
+
* tests/
|
17 |
+
* BazTest.php # Foo\Bar\BazTest
|
18 |
+
* Qux/
|
19 |
+
* QuuxTest.php # Foo\Bar\Qux\QuuxTest
|
20 |
+
*
|
21 |
+
* ... add the path to the class files for the \Foo\Bar\ namespace prefix
|
22 |
+
* as follows:
|
23 |
+
*
|
24 |
+
* <?php
|
25 |
+
* // instantiate the loader
|
26 |
+
* $loader = new \Example\Psr4AutoloaderClass;
|
27 |
+
*
|
28 |
+
* // register the autoloader
|
29 |
+
* $loader->register();
|
30 |
+
*
|
31 |
+
* // register the base directories for the namespace prefix
|
32 |
+
* $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/src');
|
33 |
+
* $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/tests');
|
34 |
+
*
|
35 |
+
* The following line would cause the autoloader to attempt to load the
|
36 |
+
* \Foo\Bar\Qux\Quux class from /path/to/packages/foo-bar/src/Qux/Quux.php:
|
37 |
+
*
|
38 |
+
* <?php
|
39 |
+
* new \Foo\Bar\Qux\Quux;
|
40 |
+
*
|
41 |
+
* The following line would cause the autoloader to attempt to load the
|
42 |
+
* \Foo\Bar\Qux\QuuxTest class from /path/to/packages/foo-bar/tests/Qux/QuuxTest.php:
|
43 |
+
*
|
44 |
+
* <?php
|
45 |
+
* new \Foo\Bar\Qux\QuuxTest;
|
46 |
+
*/
|
47 |
+
class WPML_Psr4AutoloaderClass
|
48 |
+
{
|
49 |
+
/**
|
50 |
+
* An associative array where the key is a namespace prefix and the value
|
51 |
+
* is an array of base directories for classes in that namespace.
|
52 |
+
*
|
53 |
+
* @var array
|
54 |
+
*/
|
55 |
+
protected $prefixes = array();
|
56 |
+
/**
|
57 |
+
* Register loader with SPL autoloader stack.
|
58 |
+
*
|
59 |
+
* @return void
|
60 |
+
*/
|
61 |
+
public function register()
|
62 |
+
{
|
63 |
+
spl_autoload_register(array($this, 'loadClass'));
|
64 |
+
}
|
65 |
+
/**
|
66 |
+
* Adds a base directory for a namespace prefix.
|
67 |
+
*
|
68 |
+
* @param string $prefix The namespace prefix.
|
69 |
+
* @param string $base_dir A base directory for class files in the
|
70 |
+
* namespace.
|
71 |
+
* @param bool $prepend If true, prepend the base directory to the stack
|
72 |
+
* instead of appending it; this causes it to be searched first rather
|
73 |
+
* than last.
|
74 |
+
* @return void
|
75 |
+
*/
|
76 |
+
public function addNamespace($prefix, $base_dir, $prepend = false)
|
77 |
+
{
|
78 |
+
// normalize namespace prefix
|
79 |
+
$prefix = trim($prefix, '\\') . '\\';
|
80 |
+
// normalize the base directory with a trailing separator
|
81 |
+
$base_dir = rtrim($base_dir, DIRECTORY_SEPARATOR) . '/';
|
82 |
+
// initialize the namespace prefix array
|
83 |
+
if (isset($this->prefixes[$prefix]) === false) {
|
84 |
+
$this->prefixes[$prefix] = array();
|
85 |
+
}
|
86 |
+
// retain the base directory for the namespace prefix
|
87 |
+
if ($prepend) {
|
88 |
+
array_unshift($this->prefixes[$prefix], $base_dir);
|
89 |
+
} else {
|
90 |
+
array_push($this->prefixes[$prefix], $base_dir);
|
91 |
+
}
|
92 |
+
}
|
93 |
+
/**
|
94 |
+
* Loads the class file for a given class name.
|
95 |
+
*
|
96 |
+
* @param string $class The fully-qualified class name.
|
97 |
+
* @return mixed The mapped file name on success, or boolean false on
|
98 |
+
* failure.
|
99 |
+
*/
|
100 |
+
public function loadClass($class)
|
101 |
+
{
|
102 |
+
// the current namespace prefix
|
103 |
+
$prefix = $class;
|
104 |
+
// work backwards through the namespace names of the fully-qualified
|
105 |
+
// class name to find a mapped file name
|
106 |
+
while (false !== $pos = strrpos($prefix, '\\')) {
|
107 |
+
// retain the trailing namespace separator in the prefix
|
108 |
+
$prefix = substr($class, 0, $pos + 1);
|
109 |
+
// the rest is the relative class name
|
110 |
+
$relative_class = substr($class, $pos + 1);
|
111 |
+
// try to load a mapped file for the prefix and relative class
|
112 |
+
$mapped_file = $this->loadMappedFile($prefix, $relative_class);
|
113 |
+
if ($mapped_file) {
|
114 |
+
return $mapped_file;
|
115 |
+
}
|
116 |
+
// remove the trailing namespace separator for the next iteration
|
117 |
+
// of strrpos()
|
118 |
+
$prefix = rtrim($prefix, '\\');
|
119 |
+
}
|
120 |
+
// never found a mapped file
|
121 |
+
return false;
|
122 |
+
}
|
123 |
+
/**
|
124 |
+
* Load the mapped file for a namespace prefix and relative class.
|
125 |
+
*
|
126 |
+
* @param string $prefix The namespace prefix.
|
127 |
+
* @param string $relative_class The relative class name.
|
128 |
+
* @return mixed Boolean false if no mapped file can be loaded, or the
|
129 |
+
* name of the mapped file that was loaded.
|
130 |
+
*/
|
131 |
+
protected function loadMappedFile($prefix, $relative_class)
|
132 |
+
{
|
133 |
+
// are there any base directories for this namespace prefix?
|
134 |
+
if (isset($this->prefixes[$prefix]) === false) {
|
135 |
+
return false;
|
136 |
+
}
|
137 |
+
// look through base directories for this namespace prefix
|
138 |
+
foreach ($this->prefixes[$prefix] as $base_dir) {
|
139 |
+
// replace the namespace prefix with the base directory,
|
140 |
+
// replace namespace separators with directory separators
|
141 |
+
// in the relative class name, append with .php
|
142 |
+
$file = $base_dir
|
143 |
+
. str_replace('\\', '/', $relative_class)
|
144 |
+
. '.php';
|
145 |
+
// if the mapped file exists, require it
|
146 |
+
if ($this->requireFile($file)) {
|
147 |
+
// yes, we're done
|
148 |
+
return $file;
|
149 |
+
}
|
150 |
+
}
|
151 |
+
// never found it
|
152 |
+
return false;
|
153 |
+
}
|
154 |
+
/**
|
155 |
+
* If a file exists, require it from the file system.
|
156 |
+
*
|
157 |
+
* @param string $file The file to require.
|
158 |
+
* @return bool True if the file exists, false if not.
|
159 |
+
*/
|
160 |
+
protected function requireFile($file)
|
161 |
+
{
|
162 |
+
if (file_exists($file)) {
|
163 |
+
require $file;
|
164 |
+
return true;
|
165 |
+
}
|
166 |
+
return false;
|
167 |
+
}
|
168 |
+
}
|
css/modal.css
CHANGED
@@ -1,93 +1,98 @@
|
|
1 |
-
#wp-mail-logging-modal-wrap {
|
2 |
-
display: none;
|
3 |
-
}
|
4 |
-
#wp-mail-logging-modal-backdrop {
|
5 |
-
background: none repeat scroll 0 0 #000000;
|
6 |
-
bottom: 0;
|
7 |
-
left: 0;
|
8 |
-
min-height: 360px;
|
9 |
-
opacity: 0.7;
|
10 |
-
position: fixed;
|
11 |
-
right: 0;
|
12 |
-
top: 0;
|
13 |
-
z-index: 159900;
|
14 |
-
}
|
15 |
-
#wp-mail-logging-modal-content {
|
16 |
-
background: none repeat scroll 0 0 #ffffff;
|
17 |
-
bottom: 0;
|
18 |
-
left: 0;
|
19 |
-
margin: auto;
|
20 |
-
max-width: 650px;
|
21 |
-
min-height: 300px;
|
22 |
-
padding: 15px;
|
23 |
-
position: absolute;
|
24 |
-
right: 0;
|
25 |
-
top: 0;
|
26 |
-
}
|
27 |
-
#wp-mail-logging-modal-content-wrap {
|
28 |
-
bottom: 30px;
|
29 |
-
left: 30px;
|
30 |
-
position: fixed;
|
31 |
-
right: 30px;
|
32 |
-
top: 30px;
|
33 |
-
z-index: 300010;
|
34 |
-
}
|
35 |
-
#wp-mail-logging-modal-content-header {
|
36 |
-
background-color: #eeeeee;
|
37 |
-
border-bottom: 1px solid #cccccc;
|
38 |
-
left: 0;
|
39 |
-
padding: 15px 10px 15px 10px;
|
40 |
-
position: absolute;
|
41 |
-
right: 0;
|
42 |
-
top: 0;
|
43 |
-
font-size: 26px;
|
44 |
-
}
|
45 |
-
#wp-mail-logging-modal-content-header-close {
|
46 |
-
height: 30px;
|
47 |
-
position: absolute;
|
48 |
-
right: 10px;
|
49 |
-
text-decoration: none;
|
50 |
-
top: 25%;
|
51 |
-
width: 30px;
|
52 |
-
z-index: 1000;
|
53 |
-
}
|
54 |
-
#wp-mail-logging-modal-content-header-icon {
|
55 |
-
float: left;
|
56 |
-
font-size: 30px;
|
57 |
-
width: 30px;
|
58 |
-
height: 30px;
|
59 |
-
}
|
60 |
-
#wp-mail-logging-modal-content-header-title {
|
61 |
-
float: left;
|
62 |
-
line-height: 30px;
|
63 |
-
padding-left: 5px;
|
64 |
-
}
|
65 |
-
#wp-mail-logging-modal-content-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
#wp-mail-logging-modal-wrap {
|
2 |
+
display: none;
|
3 |
+
}
|
4 |
+
#wp-mail-logging-modal-backdrop {
|
5 |
+
background: none repeat scroll 0 0 #000000;
|
6 |
+
bottom: 0;
|
7 |
+
left: 0;
|
8 |
+
min-height: 360px;
|
9 |
+
opacity: 0.7;
|
10 |
+
position: fixed;
|
11 |
+
right: 0;
|
12 |
+
top: 0;
|
13 |
+
z-index: 159900;
|
14 |
+
}
|
15 |
+
#wp-mail-logging-modal-content {
|
16 |
+
background: none repeat scroll 0 0 #ffffff;
|
17 |
+
bottom: 0;
|
18 |
+
left: 0;
|
19 |
+
margin: auto;
|
20 |
+
max-width: 650px;
|
21 |
+
min-height: 300px;
|
22 |
+
padding: 15px;
|
23 |
+
position: absolute;
|
24 |
+
right: 0;
|
25 |
+
top: 0;
|
26 |
+
}
|
27 |
+
#wp-mail-logging-modal-content-wrap {
|
28 |
+
bottom: 30px;
|
29 |
+
left: 30px;
|
30 |
+
position: fixed;
|
31 |
+
right: 30px;
|
32 |
+
top: 30px;
|
33 |
+
z-index: 300010;
|
34 |
+
}
|
35 |
+
#wp-mail-logging-modal-content-header {
|
36 |
+
background-color: #eeeeee;
|
37 |
+
border-bottom: 1px solid #cccccc;
|
38 |
+
left: 0;
|
39 |
+
padding: 15px 10px 15px 10px;
|
40 |
+
position: absolute;
|
41 |
+
right: 0;
|
42 |
+
top: 0;
|
43 |
+
font-size: 26px;
|
44 |
+
}
|
45 |
+
#wp-mail-logging-modal-content-header-close {
|
46 |
+
height: 30px;
|
47 |
+
position: absolute;
|
48 |
+
right: 10px;
|
49 |
+
text-decoration: none;
|
50 |
+
top: 25%;
|
51 |
+
width: 30px;
|
52 |
+
z-index: 1000;
|
53 |
+
}
|
54 |
+
#wp-mail-logging-modal-content-header-icon {
|
55 |
+
float: left;
|
56 |
+
font-size: 30px;
|
57 |
+
width: 30px;
|
58 |
+
height: 30px;
|
59 |
+
}
|
60 |
+
#wp-mail-logging-modal-content-header-title {
|
61 |
+
float: left;
|
62 |
+
line-height: 30px;
|
63 |
+
padding-left: 5px;
|
64 |
+
}
|
65 |
+
#wp-mail-logging-modal-content-header-format-switch {
|
66 |
+
float: right;
|
67 |
+
line-height: 30px;
|
68 |
+
padding-right: 45px;
|
69 |
+
}
|
70 |
+
#wp-mail-logging-modal-content-body {
|
71 |
+
bottom: 40px;
|
72 |
+
left: 0;
|
73 |
+
position: absolute;
|
74 |
+
overflow: auto;
|
75 |
+
right: 0;
|
76 |
+
top: 60px;
|
77 |
+
}
|
78 |
+
#wp-mail-logging-modal-content-body-content {
|
79 |
+
position: relative;
|
80 |
+
padding: 15px;
|
81 |
+
}
|
82 |
+
#wp-mail-logging-modal-content-body .title {
|
83 |
+
font-weight: bold;
|
84 |
+
display: block;
|
85 |
+
}
|
86 |
+
#wp-mail-logging-modal-content-footer {
|
87 |
+
background-color: #eeeeee;
|
88 |
+
border-top: 1px solid #cccccc;
|
89 |
+
bottom: 0;
|
90 |
+
left: 0;
|
91 |
+
padding: 15px 10px 15px 10px;
|
92 |
+
position: absolute;
|
93 |
+
right: 0;
|
94 |
+
text-align: right;
|
95 |
+
}
|
96 |
+
#wp-mail-logging-modal-content-footer .wp-mail-logging-modal-close {
|
97 |
+
margin-bottom: 0;
|
98 |
+
}
|
css/modal.less
CHANGED
@@ -1,134 +1,140 @@
|
|
1 |
-
@header-bg: #eee;
|
2 |
-
@header-bottom-border: #ccc;
|
3 |
-
@header-bottom-padding: 15px;
|
4 |
-
@header-top-padding: 15px;
|
5 |
-
@header-side-padding: 10px;
|
6 |
-
|
7 |
-
@footer-bottom-height: 10px;
|
8 |
-
@footer-bottom-padding: 15px;
|
9 |
-
@footer-top-padding: 15px;
|
10 |
-
@footer-side-padding: 10px;
|
11 |
-
|
12 |
-
@backdrop-bg: #000;
|
13 |
-
@backdrop-opacity: 0.7;
|
14 |
-
|
15 |
-
@content-bg: #fff;
|
16 |
-
|
17 |
-
@body-content-padding: 15px;
|
18 |
-
|
19 |
-
@modal-padding: 30px;
|
20 |
-
@icon-size: 30px;
|
21 |
-
|
22 |
-
#wp-mail-logging-modal {
|
23 |
-
|
24 |
-
&-wrap {
|
25 |
-
display: none;
|
26 |
-
}
|
27 |
-
|
28 |
-
&-backdrop {
|
29 |
-
background: none repeat scroll 0 0 @backdrop-bg;
|
30 |
-
bottom: 0;
|
31 |
-
left: 0;
|
32 |
-
min-height: 360px;
|
33 |
-
opacity: @backdrop-opacity;
|
34 |
-
position: fixed;
|
35 |
-
right: 0;
|
36 |
-
top: 0;
|
37 |
-
z-index: 159900;
|
38 |
-
}
|
39 |
-
|
40 |
-
&-content {
|
41 |
-
background: none repeat scroll 0 0 @content-bg;
|
42 |
-
bottom: 0;
|
43 |
-
left: 0;
|
44 |
-
margin: auto;
|
45 |
-
max-width: 650px;
|
46 |
-
min-height: 300px;
|
47 |
-
padding: 15px;
|
48 |
-
position: absolute;
|
49 |
-
right: 0;
|
50 |
-
top: 0;
|
51 |
-
|
52 |
-
&-wrap {
|
53 |
-
bottom: @modal-padding;
|
54 |
-
left: @modal-padding;
|
55 |
-
position: fixed;
|
56 |
-
right: @modal-padding;
|
57 |
-
top: @modal-padding;
|
58 |
-
z-index: 300010;
|
59 |
-
}
|
60 |
-
|
61 |
-
&-header {
|
62 |
-
background-color: @header-bg;
|
63 |
-
border-bottom: 1px solid @header-bottom-border;
|
64 |
-
left: 0;
|
65 |
-
padding: @header-top-padding @header-side-padding @header-bottom-padding @header-side-padding;
|
66 |
-
position: absolute;
|
67 |
-
right: 0;
|
68 |
-
top: 0;
|
69 |
-
font-size: 26px;
|
70 |
-
|
71 |
-
&-close {
|
72 |
-
height: 30px;
|
73 |
-
position: absolute;
|
74 |
-
right: 10px;
|
75 |
-
text-decoration: none;
|
76 |
-
top: 25%;
|
77 |
-
width: 30px;
|
78 |
-
z-index: 1000;
|
79 |
-
}
|
80 |
-
|
81 |
-
&-icon {
|
82 |
-
float: left;
|
83 |
-
font-size: @icon-size;
|
84 |
-
width: @icon-size;
|
85 |
-
height: @icon-size;
|
86 |
-
}
|
87 |
-
|
88 |
-
&-title {
|
89 |
-
float: left;
|
90 |
-
line-height: @icon-size;
|
91 |
-
padding-left: 5px;
|
92 |
-
}
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@header-bg: #eee;
|
2 |
+
@header-bottom-border: #ccc;
|
3 |
+
@header-bottom-padding: 15px;
|
4 |
+
@header-top-padding: 15px;
|
5 |
+
@header-side-padding: 10px;
|
6 |
+
|
7 |
+
@footer-bottom-height: 10px;
|
8 |
+
@footer-bottom-padding: 15px;
|
9 |
+
@footer-top-padding: 15px;
|
10 |
+
@footer-side-padding: 10px;
|
11 |
+
|
12 |
+
@backdrop-bg: #000;
|
13 |
+
@backdrop-opacity: 0.7;
|
14 |
+
|
15 |
+
@content-bg: #fff;
|
16 |
+
|
17 |
+
@body-content-padding: 15px;
|
18 |
+
|
19 |
+
@modal-padding: 30px;
|
20 |
+
@icon-size: 30px;
|
21 |
+
|
22 |
+
#wp-mail-logging-modal {
|
23 |
+
|
24 |
+
&-wrap {
|
25 |
+
display: none;
|
26 |
+
}
|
27 |
+
|
28 |
+
&-backdrop {
|
29 |
+
background: none repeat scroll 0 0 @backdrop-bg;
|
30 |
+
bottom: 0;
|
31 |
+
left: 0;
|
32 |
+
min-height: 360px;
|
33 |
+
opacity: @backdrop-opacity;
|
34 |
+
position: fixed;
|
35 |
+
right: 0;
|
36 |
+
top: 0;
|
37 |
+
z-index: 159900;
|
38 |
+
}
|
39 |
+
|
40 |
+
&-content {
|
41 |
+
background: none repeat scroll 0 0 @content-bg;
|
42 |
+
bottom: 0;
|
43 |
+
left: 0;
|
44 |
+
margin: auto;
|
45 |
+
max-width: 650px;
|
46 |
+
min-height: 300px;
|
47 |
+
padding: 15px;
|
48 |
+
position: absolute;
|
49 |
+
right: 0;
|
50 |
+
top: 0;
|
51 |
+
|
52 |
+
&-wrap {
|
53 |
+
bottom: @modal-padding;
|
54 |
+
left: @modal-padding;
|
55 |
+
position: fixed;
|
56 |
+
right: @modal-padding;
|
57 |
+
top: @modal-padding;
|
58 |
+
z-index: 300010;
|
59 |
+
}
|
60 |
+
|
61 |
+
&-header {
|
62 |
+
background-color: @header-bg;
|
63 |
+
border-bottom: 1px solid @header-bottom-border;
|
64 |
+
left: 0;
|
65 |
+
padding: @header-top-padding @header-side-padding @header-bottom-padding @header-side-padding;
|
66 |
+
position: absolute;
|
67 |
+
right: 0;
|
68 |
+
top: 0;
|
69 |
+
font-size: 26px;
|
70 |
+
|
71 |
+
&-close {
|
72 |
+
height: 30px;
|
73 |
+
position: absolute;
|
74 |
+
right: 10px;
|
75 |
+
text-decoration: none;
|
76 |
+
top: 25%;
|
77 |
+
width: 30px;
|
78 |
+
z-index: 1000;
|
79 |
+
}
|
80 |
+
|
81 |
+
&-icon {
|
82 |
+
float: left;
|
83 |
+
font-size: @icon-size;
|
84 |
+
width: @icon-size;
|
85 |
+
height: @icon-size;
|
86 |
+
}
|
87 |
+
|
88 |
+
&-title {
|
89 |
+
float: left;
|
90 |
+
line-height: @icon-size;
|
91 |
+
padding-left: 5px;
|
92 |
+
}
|
93 |
+
|
94 |
+
&-format-switch {
|
95 |
+
float: right;
|
96 |
+
line-height: @icon-size;
|
97 |
+
padding-right: 45px;
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
&-body {
|
102 |
+
bottom: @footer-top-padding + @footer-bottom-padding + @footer-bottom-height;
|
103 |
+
left: 0;
|
104 |
+
position: absolute;
|
105 |
+
overflow: auto;
|
106 |
+
right: 0;
|
107 |
+
top: @icon-size + @header-top-padding + @header-bottom-padding;
|
108 |
+
|
109 |
+
&-content {
|
110 |
+
position: relative;
|
111 |
+
padding: @body-content-padding;
|
112 |
+
}
|
113 |
+
|
114 |
+
& .title {
|
115 |
+
font-weight: bold;
|
116 |
+
display: block;
|
117 |
+
}
|
118 |
+
|
119 |
+
}
|
120 |
+
|
121 |
+
&-footer {
|
122 |
+
background-color: @header-bg;
|
123 |
+
border-top: 1px solid @header-bottom-border;
|
124 |
+
bottom: 0;
|
125 |
+
left: 0;
|
126 |
+
padding: @footer-top-padding @footer-side-padding @footer-bottom-padding @footer-side-padding;
|
127 |
+
position: absolute;
|
128 |
+
right: 0;
|
129 |
+
text-align: right;
|
130 |
+
|
131 |
+
.wp-mail-logging-modal-close {
|
132 |
+
|
133 |
+
margin-bottom: 0;
|
134 |
+
|
135 |
+
}
|
136 |
+
|
137 |
+
}
|
138 |
+
|
139 |
+
}
|
140 |
+
}
|
inc/redux/{options-init.php → WPML_Redux_Framework_config.php}
RENAMED
@@ -1,586 +1,611 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
public $
|
15 |
-
|
16 |
-
public
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
if (
|
24 |
-
|
25 |
-
}
|
26 |
-
|
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 |
-
if( $wp_filesystem ) {
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
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 |
-
|
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 |
-
array(
|
289 |
-
'id'
|
290 |
-
'type'
|
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 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
//
|
386 |
-
'
|
387 |
-
//
|
388 |
-
'
|
389 |
-
//
|
390 |
-
'
|
391 |
-
//
|
392 |
-
'
|
393 |
-
//
|
394 |
-
'
|
395 |
-
//
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
//
|
400 |
-
'
|
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 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
$this->args['
|
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 |
-
public function
|
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 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
$
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace No3x\WPML\Settings;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* ReduxFramework Sample Config File
|
7 |
+
* For full documentation, please visit: http://docs.reduxframework.com/
|
8 |
+
*/
|
9 |
+
|
10 |
+
if (!class_exists('WPML_Redux_Framework_config')) {
|
11 |
+
|
12 |
+
class WPML_Redux_Framework_config {
|
13 |
+
|
14 |
+
public $args = array();
|
15 |
+
public $sections = array();
|
16 |
+
public $theme;
|
17 |
+
public $ReduxFramework;
|
18 |
+
protected $plugin_meta = array();
|
19 |
+
|
20 |
+
public function __construct( $plugin_meta ) {
|
21 |
+
$this->plugin_meta = $plugin_meta;
|
22 |
+
|
23 |
+
if ( ! class_exists( 'ReduxFramework' ) ) {
|
24 |
+
return;
|
25 |
+
}
|
26 |
+
|
27 |
+
// This is needed. Bah WordPress bugs. ;)
|
28 |
+
if ( true == \Redux_Helpers::isTheme( __FILE__ ) ) {
|
29 |
+
$this->initSettings();
|
30 |
+
} else {
|
31 |
+
add_action( 'plugins_loaded', array( $this, 'initSettings' ), 10 );
|
32 |
+
}
|
33 |
+
|
34 |
+
}
|
35 |
+
|
36 |
+
public function initSettings() {
|
37 |
+
|
38 |
+
// Just for demo purposes. Not needed per say.
|
39 |
+
$this->theme = wp_get_theme();
|
40 |
+
|
41 |
+
// Set the default arguments
|
42 |
+
$this->setArguments();
|
43 |
+
|
44 |
+
// Set a few help tabs so you can see how it's done
|
45 |
+
// $this->setHelpTabs();
|
46 |
+
|
47 |
+
// Create the sections and fields
|
48 |
+
$this->setSections();
|
49 |
+
|
50 |
+
if ( ! isset( $this->args['opt_name'] ) ) { // No errors please
|
51 |
+
return;
|
52 |
+
}
|
53 |
+
|
54 |
+
// If Redux is running as a plugin, this will remove the demo notice and links
|
55 |
+
//add_action( 'redux/loaded', array( $this, 'remove_demo' ) );
|
56 |
+
|
57 |
+
// Function to test the compiler hook and demo CSS output.
|
58 |
+
// Above 10 is a priority, but 2 in necessary to include the dynamically generated CSS to be sent to the function.
|
59 |
+
//add_filter('redux/options/'.$this->args['opt_name'].'/compiler', array( $this, 'compiler_action' ), 10, 3);
|
60 |
+
|
61 |
+
// Change the arguments after they've been declared, but before the panel is created
|
62 |
+
//add_filter('redux/options/'.$this->args['opt_name'].'/args', array( $this, 'change_arguments' ) );
|
63 |
+
|
64 |
+
// Change the default value of a field after it's been set, but before it's been useds
|
65 |
+
//add_filter('redux/options/'.$this->args['opt_name'].'/defaults', array( $this,'change_defaults' ) );
|
66 |
+
|
67 |
+
// Dynamically add a section. Can be also used to modify sections/fields
|
68 |
+
//add_filter('redux/options/' . $this->args['opt_name'] . '/sections', array($this, 'dynamic_section'));
|
69 |
+
|
70 |
+
$this->ReduxFramework = new \ReduxFramework( $this->sections, $this->args );
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* This is a test function that will let you see when the compiler hook occurs.
|
75 |
+
* It only runs if a field set with compiler=>true is changed.
|
76 |
+
* */
|
77 |
+
function compiler_action( $options, $css, $changed_values ) {
|
78 |
+
echo '<h1>The compiler hook has run!</h1>';
|
79 |
+
echo "<pre>";
|
80 |
+
print_r( $changed_values ); // Values that have changed since the last save
|
81 |
+
echo "</pre>";
|
82 |
+
//print_r($options); //Option values
|
83 |
+
//print_r($css); // Compiler selector CSS values compiler => array( CSS SELECTORS )
|
84 |
+
|
85 |
+
/*
|
86 |
+
// Demo of how to use the dynamic CSS and write your own static CSS file
|
87 |
+
$filename = dirname(__FILE__) . '/style' . '.css';
|
88 |
+
global $wp_filesystem;
|
89 |
+
if( empty( $wp_filesystem ) ) {
|
90 |
+
require_once( ABSPATH .'/wp-admin/includes/file.php' );
|
91 |
+
WP_Filesystem();
|
92 |
+
}
|
93 |
+
|
94 |
+
if( $wp_filesystem ) {
|
95 |
+
$wp_filesystem->put_contents(
|
96 |
+
$filename,
|
97 |
+
$css,
|
98 |
+
FS_CHMOD_FILE // predefined mode settings for WP files
|
99 |
+
);
|
100 |
+
}
|
101 |
+
*/
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Custom function for filtering the sections array. Good for child themes to override or add to the sections.
|
106 |
+
* Simply include this function in the child themes functions.php file.
|
107 |
+
* NOTE: the defined constants for URLs, and directories will NOT be available at this point in a child theme,
|
108 |
+
* so you must use get_template_directory_uri() if you want to use any of the built in icons
|
109 |
+
* */
|
110 |
+
function dynamic_section( $sections ) {
|
111 |
+
//$sections = array();
|
112 |
+
$sections[] = array(
|
113 |
+
'title' => __( 'Section via hook', 'redux-framework-demo' ),
|
114 |
+
'desc' => __( '<p class="description">This is a section created by adding a filter to the sections array. Can be used by child themes to add/remove sections from the options.</p>', 'redux-framework-demo' ),
|
115 |
+
'icon' => 'el-icon-paper-clip',
|
116 |
+
// Leave this as a blank section, no options just some intro text set above.
|
117 |
+
'fields' => array()
|
118 |
+
);
|
119 |
+
|
120 |
+
return $sections;
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Filter hook for filtering the args. Good for child themes to override or add to the args array. Can also be used in other functions.
|
125 |
+
* */
|
126 |
+
function change_arguments( $args ) {
|
127 |
+
//$args['dev_mode'] = true;
|
128 |
+
|
129 |
+
return $args;
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Filter hook for filtering the default value of any given field. Very useful in development mode.
|
134 |
+
* */
|
135 |
+
function change_defaults( $defaults ) {
|
136 |
+
$defaults['str_replace'] = 'Testing filter hook!';
|
137 |
+
|
138 |
+
return $defaults;
|
139 |
+
}
|
140 |
+
|
141 |
+
// Remove the demo link and the notice of integrated demo from the redux-framework plugin
|
142 |
+
function remove_demo() {
|
143 |
+
|
144 |
+
// Used to hide the demo mode link from the plugin page. Only used when Redux is a plugin.
|
145 |
+
if ( class_exists( 'ReduxFrameworkPlugin' ) ) {
|
146 |
+
remove_filter( 'plugin_row_meta', array(
|
147 |
+
ReduxFrameworkPlugin::instance(),
|
148 |
+
'plugin_metalinks'
|
149 |
+
), null, 2 );
|
150 |
+
|
151 |
+
// Used to hide the activation notice informing users of the demo panel. Only used when Redux is a plugin.
|
152 |
+
remove_action( 'admin_notices', array( ReduxFrameworkPlugin::instance(), 'admin_notices' ) );
|
153 |
+
}
|
154 |
+
}
|
155 |
+
|
156 |
+
public function setSections() {
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Used within different fields. Simply examples. Search for ACTUAL DECLARATION for field examples
|
160 |
+
* */
|
161 |
+
// Background Patterns Reader
|
162 |
+
$sample_patterns_path = \ReduxFramework::$_dir . '../sample/patterns/';
|
163 |
+
$sample_patterns_url = \ReduxFramework::$_url . '../sample/patterns/';
|
164 |
+
$sample_patterns = array();
|
165 |
+
|
166 |
+
if ( is_dir( $sample_patterns_path ) ) :
|
167 |
+
|
168 |
+
if ( $sample_patterns_dir = opendir( $sample_patterns_path ) ) :
|
169 |
+
$sample_patterns = array();
|
170 |
+
|
171 |
+
while ( ( $sample_patterns_file = readdir( $sample_patterns_dir ) ) !== false ) {
|
172 |
+
|
173 |
+
if ( stristr( $sample_patterns_file, '.png' ) !== false || stristr( $sample_patterns_file, '.jpg' ) !== false ) {
|
174 |
+
$name = explode( '.', $sample_patterns_file );
|
175 |
+
$name = str_replace( '.' . end( $name ), '', $sample_patterns_file );
|
176 |
+
$sample_patterns[] = array(
|
177 |
+
'alt' => $name,
|
178 |
+
'img' => $sample_patterns_url . $sample_patterns_file
|
179 |
+
);
|
180 |
+
}
|
181 |
+
}
|
182 |
+
endif;
|
183 |
+
endif;
|
184 |
+
|
185 |
+
ob_start();
|
186 |
+
|
187 |
+
$ct = wp_get_theme();
|
188 |
+
$this->theme = $ct;
|
189 |
+
$item_name = $this->theme->get( 'Name' );
|
190 |
+
$tags = $this->theme->Tags;
|
191 |
+
$screenshot = $this->theme->get_screenshot();
|
192 |
+
$class = $screenshot ? 'has-screenshot' : '';
|
193 |
+
|
194 |
+
$customize_title = sprintf( __( 'Customize “%s”', 'redux-framework-demo' ), $this->theme->display( 'Name' ) );
|
195 |
+
|
196 |
+
?>
|
197 |
+
<div id="current-theme" class="<?php echo esc_attr( $class ); ?>">
|
198 |
+
<?php if ( $screenshot ) : ?>
|
199 |
+
<?php if ( current_user_can( 'edit_theme_options' ) ) : ?>
|
200 |
+
<a href="<?php echo wp_customize_url(); ?>" class="load-customize hide-if-no-customize"
|
201 |
+
title="<?php echo esc_attr( $customize_title ); ?>">
|
202 |
+
<img src="<?php echo esc_url( $screenshot ); ?>"
|
203 |
+
alt="<?php esc_attr_e( 'Current theme preview', 'redux-framework-demo' ); ?>"/>
|
204 |
+
</a>
|
205 |
+
<?php endif; ?>
|
206 |
+
<img class="hide-if-customize" src="<?php echo esc_url( $screenshot ); ?>"
|
207 |
+
alt="<?php esc_attr_e( 'Current theme preview', 'redux-framework-demo' ); ?>"/>
|
208 |
+
<?php endif; ?>
|
209 |
+
|
210 |
+
<h4><?php echo $this->theme->display( 'Name' ); ?></h4>
|
211 |
+
|
212 |
+
<div>
|
213 |
+
<ul class="theme-info">
|
214 |
+
<li><?php printf( __( 'By %s', 'redux-framework-demo' ), $this->theme->display( 'Author' ) ); ?></li>
|
215 |
+
<li><?php printf( __( 'Version %s', 'redux-framework-demo' ), $this->theme->display( 'Version' ) ); ?></li>
|
216 |
+
<li><?php echo '<strong>' . __( 'Tags', 'redux-framework-demo' ) . ':</strong> '; ?><?php printf( $this->theme->display( 'Tags' ) ); ?></li>
|
217 |
+
</ul>
|
218 |
+
<p class="theme-description"><?php echo $this->theme->display( 'Description' ); ?></p>
|
219 |
+
<?php
|
220 |
+
if ( $this->theme->parent() ) {
|
221 |
+
printf( ' <p class="howto">' . __( 'This <a href="%1$s">child theme</a> requires its parent theme, %2$s.', 'redux-framework-demo' ) . '</p>', __( 'http://codex.wordpress.org/Child_Themes', 'redux-framework-demo' ), $this->theme->parent()->display( 'Name' ) );
|
222 |
+
}
|
223 |
+
?>
|
224 |
+
|
225 |
+
</div>
|
226 |
+
</div>
|
227 |
+
|
228 |
+
<?php
|
229 |
+
$item_info = ob_get_contents();
|
230 |
+
|
231 |
+
ob_end_clean();
|
232 |
+
|
233 |
+
$sampleHTML = '';
|
234 |
+
if ( file_exists( dirname( __FILE__ ) . '/info-html.html' ) ) {
|
235 |
+
Redux_Functions::initWpFilesystem();
|
236 |
+
|
237 |
+
global $wp_filesystem;
|
238 |
+
|
239 |
+
$sampleHTML = $wp_filesystem->get_contents( dirname( __FILE__ ) . '/info-html.html' );
|
240 |
+
}
|
241 |
+
|
242 |
+
// ACTUAL DECLARATION OF SECTIONS
|
243 |
+
$this->sections[] = array(
|
244 |
+
'title' => __('General Settings', 'wpml'),
|
245 |
+
'desc' => __('', 'wpml'),
|
246 |
+
'icon' => 'el-icon-cogs',
|
247 |
+
// 'submenu' => false, // Setting submenu to false on a given section will hide it from the WordPress sidebar menu!
|
248 |
+
'fields' => array(
|
249 |
+
|
250 |
+
array(
|
251 |
+
'id' => 'delete-on-deactivation',
|
252 |
+
'type' => 'switch',
|
253 |
+
'title' => __('Cleanup', 'wpml' ),
|
254 |
+
'subtitle' => __('Delete all data on deactivation? (emails and settings)?', 'wpml'),
|
255 |
+
'default' => 0,
|
256 |
+
'on' => 'Enabled',
|
257 |
+
'off' => 'Disabled',
|
258 |
+
),
|
259 |
+
array(
|
260 |
+
'id' => 'can-see-submission-data',
|
261 |
+
'type' => 'select',
|
262 |
+
'data' => 'capabilities',
|
263 |
+
'default' => 'manage_options',
|
264 |
+
'title' => __('Can See Submission data', 'wpml'),
|
265 |
+
'subtitle' => __('Select the minimum role.', 'wpml'),
|
266 |
+
),
|
267 |
+
array(
|
268 |
+
'id' => 'datetimeformat-use-wordpress',
|
269 |
+
'type' => 'switch',
|
270 |
+
'title' => __('WordPress Date Time Format', 'wpml' ),
|
271 |
+
'subtitle' => __( sprintf("Use format from WordPress settings (%s)", date_i18n( $this->wordpress_default_format(), current_time( 'timestamp' ) ) ), 'wpml'),
|
272 |
+
'default' => 0,
|
273 |
+
'on' => 'Enabled',
|
274 |
+
'off' => 'Disabled',
|
275 |
+
),
|
276 |
+
array(
|
277 |
+
'id' => 'preferred-mail-format',
|
278 |
+
'type' => 'select',
|
279 |
+
'options' => array(
|
280 |
+
'html' => 'html',
|
281 |
+
'raw' => 'raw',
|
282 |
+
'json' => 'json'
|
283 |
+
),
|
284 |
+
'default' => 'html',
|
285 |
+
'title' => __('Default Format for Message', 'wpml'),
|
286 |
+
'subtitle' => __('Select your preferred display format.', 'wpml'),
|
287 |
+
),
|
288 |
+
array(
|
289 |
+
'id' => 'section-log-rotation-start',
|
290 |
+
'type' => 'section',
|
291 |
+
'title' => __('Log Rotation', 'wpml' ),
|
292 |
+
'subtitle' => __('Save space by deleting logs regularly.', 'wpml'),
|
293 |
+
'indent' => true, // Indent all options below until the next 'section' option is set.
|
294 |
+
),
|
295 |
+
array(
|
296 |
+
'id' => 'log-rotation-limit-amout',
|
297 |
+
'type' => 'switch',
|
298 |
+
'title' => __('Cleanup by Amount', 'wpml' ),
|
299 |
+
'subtitle' => __('Setup a automated cleanup routine!', 'wpml'),
|
300 |
+
'default' => 0,
|
301 |
+
'on' => 'Enabled',
|
302 |
+
'off' => 'Disabled',
|
303 |
+
),
|
304 |
+
array(
|
305 |
+
'id' => 'log-rotation-limit-amout-keep',
|
306 |
+
'type' => 'slider',
|
307 |
+
'required' => array('log-rotation-limit-amout', '=', '1'),
|
308 |
+
'title' => __('Amount', 'wpml' ),
|
309 |
+
'subtitle' => __('When should mails are deleted?', 'wpml'),
|
310 |
+
'desc' => __('Cleanup when the stored mails exceed...', 'wpml'),
|
311 |
+
'default' => 75,
|
312 |
+
'min' => 25,
|
313 |
+
'step' => 50,
|
314 |
+
'max' => 3000,
|
315 |
+
'display_value' => 'text'
|
316 |
+
),
|
317 |
+
array(
|
318 |
+
'id' => 'log-rotation-delete-time',
|
319 |
+
'type' => 'switch',
|
320 |
+
'title' => __('Cleanup by Time', 'wpml' ),
|
321 |
+
'subtitle' => __('Setup a automated cleanup routine!', 'wpml'),
|
322 |
+
'default' => 0,
|
323 |
+
'on' => 'Enabled',
|
324 |
+
'off' => 'Disabled',
|
325 |
+
),
|
326 |
+
array(
|
327 |
+
'id' => 'log-rotation-delete-time-days',
|
328 |
+
'type' => 'slider',
|
329 |
+
'required' => array('log-rotation-delete-time', '=', '1'),
|
330 |
+
'title' => __('Time', 'wpml' ),
|
331 |
+
'subtitle' => __('When should mails are deleted?', 'wpml'),
|
332 |
+
'desc' => __('Delete mails older than days...', 'wpml'),
|
333 |
+
'default' => 30,
|
334 |
+
'min' => 1,
|
335 |
+
'step' => 7,
|
336 |
+
'max' => 400,
|
337 |
+
'display_value' => 'text'
|
338 |
+
),
|
339 |
+
array(
|
340 |
+
'id' => 'section-log-rotation-end',
|
341 |
+
'type' => 'section',
|
342 |
+
'indent' => false // Indent all options below until the next 'section' option is set.
|
343 |
+
),
|
344 |
+
),
|
345 |
+
);
|
346 |
+
}
|
347 |
+
|
348 |
+
public function wordpress_default_format()
|
349 |
+
{
|
350 |
+
$date_format = get_option( 'date_format' );
|
351 |
+
$time_format = get_option( 'time_format' );
|
352 |
+
$date_format = empty( $date_format ) ? 'F j, Y' : $date_format;
|
353 |
+
$time_format = empty( $time_format ) ? 'g:i a' : $time_format;
|
354 |
+
return "{$date_format} {$time_format}";
|
355 |
+
}
|
356 |
+
|
357 |
+
public function setHelpTabs() {
|
358 |
+
|
359 |
+
// Custom page help tabs, displayed using the help API. Tabs are shown in order of definition.
|
360 |
+
$this->args['help_tabs'][] = array(
|
361 |
+
'id' => 'redux-help-tab-1',
|
362 |
+
'title' => __( 'Theme Information 1', 'redux-framework-demo' ),
|
363 |
+
'content' => __( '<p>This is the tab content, HTML is allowed.</p>', 'redux-framework-demo' )
|
364 |
+
);
|
365 |
+
|
366 |
+
$this->args['help_tabs'][] = array(
|
367 |
+
'id' => 'redux-help-tab-2',
|
368 |
+
'title' => __( 'Theme Information 2', 'redux-framework-demo' ),
|
369 |
+
'content' => __( '<p>This is the tab content, HTML is allowed.</p>', 'redux-framework-demo' )
|
370 |
+
);
|
371 |
+
|
372 |
+
// Set the help sidebar
|
373 |
+
$this->args['help_sidebar'] = __( '<p>This is the sidebar content, HTML is allowed.</p>', 'redux-framework-demo' );
|
374 |
+
}
|
375 |
+
|
376 |
+
/**
|
377 |
+
* All the possible arguments for Redux.
|
378 |
+
* For full documentation on arguments, please refer to: https://github.com/ReduxFramework/ReduxFramework/wiki/Arguments
|
379 |
+
* */
|
380 |
+
public function setArguments() {
|
381 |
+
|
382 |
+
$theme = wp_get_theme(); // For use with some settings. Not necessary.
|
383 |
+
|
384 |
+
$this->args = array(
|
385 |
+
// TYPICAL -> Change these values as you need/desire
|
386 |
+
'opt_name' => 'wpml_settings',
|
387 |
+
// This is where your data is stored in the database and also becomes your global variable name.
|
388 |
+
'display_name' => 'WP Mail Logging Settings',
|
389 |
+
// Name that appears at the top of your panel
|
390 |
+
'display_version' => $this->plugin_meta['version_installed'],
|
391 |
+
// Version that appears at the top of your panel
|
392 |
+
'menu_type' => 'submenu',
|
393 |
+
//Specify if the admin menu should appear or not. Options: menu or submenu (Under appearance only)
|
394 |
+
'allow_sub_menu' => true,
|
395 |
+
// Show the sections below the admin menu item or not
|
396 |
+
'menu_title' => 'Settings',
|
397 |
+
'page_title' => $this->plugin_meta['display_name'],
|
398 |
+
// You will need to generate a Google API key to use this feature.
|
399 |
+
// Please visit: https://developers.google.com/fonts/docs/developer_api#Auth
|
400 |
+
'google_api_key' => '',
|
401 |
+
// Set it you want google fonts to update weekly. A google_api_key value is required.
|
402 |
+
'google_update_weekly' => false,
|
403 |
+
// Must be defined to add google fonts to the typography module
|
404 |
+
'async_typography' => true,
|
405 |
+
// Use a asynchronous font on the front end or font string
|
406 |
+
//'disable_google_fonts_link' => true, // Disable this in case you want to create your own google fonts loader
|
407 |
+
'admin_bar' => false,
|
408 |
+
// Show the panel pages on the admin bar
|
409 |
+
'admin_bar_icon' => 'dashicons-portfolio',
|
410 |
+
// Choose an icon for the admin bar menu
|
411 |
+
'admin_bar_priority' => 50,
|
412 |
+
// Choose an priority for the admin bar menu
|
413 |
+
'global_variable' => '',
|
414 |
+
// Set a different name for your global variable other than the opt_name
|
415 |
+
'dev_mode' => false,
|
416 |
+
// Show the time the page took to load, etc
|
417 |
+
'update_notice' => true,
|
418 |
+
// If dev_mode is enabled, will notify developer of updated versions available in the GitHub Repo
|
419 |
+
'customizer' => false,
|
420 |
+
// Enable basic customizer support
|
421 |
+
//'open_expanded' => true, // Allow you to start the panel in an expanded way initially.
|
422 |
+
//'disable_save_warn' => true, // Disable the save warning when a user changes a field
|
423 |
+
|
424 |
+
// OPTIONAL -> Give you extra features
|
425 |
+
'page_priority' => null,
|
426 |
+
// Order where the menu appears in the admin area. If there is any conflict, something will not show. Warning.
|
427 |
+
'page_parent' => 'wpml_plugin_log',
|
428 |
+
// For a full list of options, visit: http://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters
|
429 |
+
'page_permissions' => 'manage_options',
|
430 |
+
// Permissions needed to access the options panel.
|
431 |
+
'menu_icon' => '',
|
432 |
+
// Specify a custom URL to an icon
|
433 |
+
'last_tab' => '',
|
434 |
+
// Force your panel to always open to a specific tab (by id)
|
435 |
+
'page_icon' => 'icon-themes',
|
436 |
+
// Icon displayed in the admin panel next to your menu_title
|
437 |
+
'page_slug' => 'wpml_plugin_settings',
|
438 |
+
// Page slug used to denote the panel
|
439 |
+
'save_defaults' => true,
|
440 |
+
// On load save the defaults to DB before user clicks save or not
|
441 |
+
'default_show' => false,
|
442 |
+
// If true, shows the default value next to each field that is not the default value.
|
443 |
+
'default_mark' => '*',
|
444 |
+
// What to print by the field's title if the value shown is default. Suggested: *
|
445 |
+
'show_import_export' => true,
|
446 |
+
// Shows the Import/Export panel when not used as a field.
|
447 |
+
|
448 |
+
// CAREFUL -> These options are for advanced use only
|
449 |
+
'transient_time' => 60 * MINUTE_IN_SECONDS,
|
450 |
+
'output' => true,
|
451 |
+
// Global shut-off for dynamic CSS output by the framework. Will also disable google fonts output
|
452 |
+
'output_tag' => true,
|
453 |
+
// Allows dynamic CSS to be generated for customizer and google fonts, but stops the dynamic CSS from going to the head
|
454 |
+
// 'footer_credit' => '', // Disable the footer credit of Redux. Please leave if you can help it.
|
455 |
+
|
456 |
+
// FUTURE -> Not in use yet, but reserved or partially implemented. Use at your own risk.
|
457 |
+
'database' => '',
|
458 |
+
// possible: options, theme_mods, theme_mods_expanded, transient. Not fully functional, warning!
|
459 |
+
'system_info' => false,
|
460 |
+
// REMOVE
|
461 |
+
|
462 |
+
// HINTS
|
463 |
+
'hints' => array(
|
464 |
+
'icon' => 'icon-question-sign',
|
465 |
+
'icon_position' => 'right',
|
466 |
+
'icon_color' => 'lightgray',
|
467 |
+
'icon_size' => 'normal',
|
468 |
+
'tip_style' => array(
|
469 |
+
'color' => 'light',
|
470 |
+
'shadow' => true,
|
471 |
+
'rounded' => false,
|
472 |
+
'style' => 'bootstrap',
|
473 |
+
),
|
474 |
+
'tip_position' => array(
|
475 |
+
'my' => 'top left',
|
476 |
+
'at' => 'bottom right',
|
477 |
+
),
|
478 |
+
'tip_effect' => array(
|
479 |
+
'show' => array(
|
480 |
+
'effect' => 'slide',
|
481 |
+
'duration' => '500',
|
482 |
+
'event' => 'mouseover',
|
483 |
+
),
|
484 |
+
'hide' => array(
|
485 |
+
'effect' => 'slide',
|
486 |
+
'duration' => '500',
|
487 |
+
'event' => 'click mouseleave',
|
488 |
+
),
|
489 |
+
),
|
490 |
+
)
|
491 |
+
);
|
492 |
+
|
493 |
+
// ADMIN BAR LINKS -> Setup custom links in the admin bar menu as external items.
|
494 |
+
$this->args['admin_bar_links'][] = array(
|
495 |
+
'id' => 'redux-docs',
|
496 |
+
'href' => 'http://docs.reduxframework.com/',
|
497 |
+
'title' => __( 'Documentation', 'redux-framework-demo' ),
|
498 |
+
);
|
499 |
+
|
500 |
+
$this->args['admin_bar_links'][] = array(
|
501 |
+
//'id' => 'redux-support',
|
502 |
+
'href' => 'https://github.com/ReduxFramework/redux-framework/issues',
|
503 |
+
'title' => __( 'Support', 'redux-framework-demo' ),
|
504 |
+
);
|
505 |
+
|
506 |
+
$this->args['admin_bar_links'][] = array(
|
507 |
+
'id' => 'redux-extensions',
|
508 |
+
'href' => 'reduxframework.com/extensions',
|
509 |
+
'title' => __( 'Extensions', 'redux-framework-demo' ),
|
510 |
+
);
|
511 |
+
|
512 |
+
// SOCIAL ICONS -> Setup custom links in the footer for quick links in your panel footer icons.
|
513 |
+
$this->args['share_icons'][] = array(
|
514 |
+
'url' => 'https://github.com/No3x/wp-mail-logging',
|
515 |
+
'title' => 'Visit us on GitHub',
|
516 |
+
'icon' => 'el-icon-github'
|
517 |
+
//'img' => '', // You can use icon OR img. IMG needs to be a full URL.
|
518 |
+
);
|
519 |
+
$this->args['share_icons'][] = array(
|
520 |
+
'url' => $this->plugin_meta['wp_uri'],
|
521 |
+
'title' => 'Visit us on WordPress',
|
522 |
+
'icon' => 'el-icon-wordpress'
|
523 |
+
);
|
524 |
+
|
525 |
+
|
526 |
+
// Add content before the form.
|
527 |
+
// $this->args['intro_text'] = __( '<p>This text is displayed above the options panel. It isn\'t required, but more info is always better! The intro_text field accepts all HTML.</p>', 'redux-framework-demo' );
|
528 |
+
|
529 |
+
// Add content after the form.
|
530 |
+
// $this->args['footer_text'] = __( '<p>This text is displayed below the options panel. It isn\'t required, but more info is always better! The footer_text field accepts all HTML.</p>', 'redux-framework-demo' );
|
531 |
+
}
|
532 |
+
|
533 |
+
public function validate_callback_function( $field, $value, $existing_value ) {
|
534 |
+
$error = true;
|
535 |
+
$value = 'just testing';
|
536 |
+
|
537 |
+
/*
|
538 |
+
do your validation
|
539 |
+
|
540 |
+
if(something) {
|
541 |
+
$value = $value;
|
542 |
+
} elseif(something else) {
|
543 |
+
$error = true;
|
544 |
+
$value = $existing_value;
|
545 |
+
|
546 |
+
}
|
547 |
+
*/
|
548 |
+
|
549 |
+
$return['value'] = $value;
|
550 |
+
$field['msg'] = 'your custom error message';
|
551 |
+
if ( $error == true ) {
|
552 |
+
$return['error'] = $field;
|
553 |
+
}
|
554 |
+
|
555 |
+
return $return;
|
556 |
+
}
|
557 |
+
|
558 |
+
public function class_field_callback( $field, $value ) {
|
559 |
+
print_r( $field );
|
560 |
+
echo '<br/>CLASS CALLBACK';
|
561 |
+
print_r( $value );
|
562 |
+
}
|
563 |
+
|
564 |
+
}
|
565 |
+
|
566 |
+
global $reduxConfig;
|
567 |
+
//$reduxConfig = new WPML_Redux_Framework_config();
|
568 |
+
} else {
|
569 |
+
echo "The class named Redux_Framework_sample_config has already been called. <strong>Developers, you need to prefix this class with your company name or you'll run into problems!</strong>";
|
570 |
+
}
|
571 |
+
|
572 |
+
/**
|
573 |
+
* Custom function for the callback referenced above
|
574 |
+
*/
|
575 |
+
if ( ! function_exists( 'redux_my_custom_field' ) ):
|
576 |
+
function redux_my_custom_field( $field, $value ) {
|
577 |
+
print_r( $field );
|
578 |
+
echo '<br/>';
|
579 |
+
print_r( $value );
|
580 |
+
}
|
581 |
+
endif;
|
582 |
+
|
583 |
+
/**
|
584 |
+
* Custom function for the callback validation referenced above
|
585 |
+
* */
|
586 |
+
if ( ! function_exists( 'redux_validate_callback_function' ) ):
|
587 |
+
function redux_validate_callback_function( $field, $value, $existing_value ) {
|
588 |
+
$error = true;
|
589 |
+
$value = 'just testing';
|
590 |
+
|
591 |
+
/*
|
592 |
+
do your validation
|
593 |
+
|
594 |
+
if(something) {
|
595 |
+
$value = $value;
|
596 |
+
} elseif(something else) {
|
597 |
+
$error = true;
|
598 |
+
$value = $existing_value;
|
599 |
+
|
600 |
+
}
|
601 |
+
*/
|
602 |
+
|
603 |
+
$return['value'] = $value;
|
604 |
+
$field['msg'] = 'your custom error message';
|
605 |
+
if ( $error == true ) {
|
606 |
+
$return['error'] = $field;
|
607 |
+
}
|
608 |
+
|
609 |
+
return $return;
|
610 |
+
}
|
611 |
+
endif;
|
inc/redux/admin-init.php
CHANGED
@@ -1,18 +1,11 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// Load the
|
4 |
-
if (file_exists(dirname(__FILE__).'/
|
5 |
-
|
6 |
-
}
|
7 |
-
// Load
|
8 |
-
if (file_exists(dirname(__FILE__).'/
|
9 |
-
|
10 |
-
}
|
11 |
-
|
12 |
-
if (file_exists(dirname(__FILE__).'/redux-framework/ReduxCore/framework.php')) {
|
13 |
-
require_once( dirname(__FILE__).'/redux-framework/ReduxCore/framework.php' );
|
14 |
-
}
|
15 |
-
// Load the theme/plugin options
|
16 |
-
if (file_exists(dirname(__FILE__).'/options-init.php')) {
|
17 |
-
require_once( dirname(__FILE__).'/options-init.php' );
|
18 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Load the embedded Redux Framework
|
4 |
+
if ( file_exists( dirname( __FILE__ ).'/../../lib/vendor/redux-framework/framework.php' ) ) {
|
5 |
+
require_once dirname(__FILE__).'/../../lib/vendor/redux-framework/framework.php';
|
6 |
+
}
|
7 |
+
// Load the theme/plugin options
|
8 |
+
if ( file_exists( dirname( __FILE__ ) . '/options-init.php' ) ) {
|
9 |
+
require_once dirname( __FILE__ ) . '/options-init.php';
|
10 |
+
}
|
11 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-extensions/LICENSE
DELETED
@@ -1,674 +0,0 @@
|
|
1 |
-
GNU GENERAL PUBLIC LICENSE
|
2 |
-
Version 3, 29 June 2007
|
3 |
-
|
4 |
-
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
5 |
-
Everyone is permitted to copy and distribute verbatim copies
|
6 |
-
of this license document, but changing it is not allowed.
|
7 |
-
|
8 |
-
Preamble
|
9 |
-
|
10 |
-
The GNU General Public License is a free, copyleft license for
|
11 |
-
software and other kinds of works.
|
12 |
-
|
13 |
-
The licenses for most software and other practical works are designed
|
14 |
-
to take away your freedom to share and change the works. By contrast,
|
15 |
-
the GNU General Public License is intended to guarantee your freedom to
|
16 |
-
share and change all versions of a program--to make sure it remains free
|
17 |
-
software for all its users. We, the Free Software Foundation, use the
|
18 |
-
GNU General Public License for most of our software; it applies also to
|
19 |
-
any other work released this way by its authors. You can apply it to
|
20 |
-
your programs, too.
|
21 |
-
|
22 |
-
When we speak of free software, we are referring to freedom, not
|
23 |
-
price. Our General Public Licenses are designed to make sure that you
|
24 |
-
have the freedom to distribute copies of free software (and charge for
|
25 |
-
them if you wish), that you receive source code or can get it if you
|
26 |
-
want it, that you can change the software or use pieces of it in new
|
27 |
-
free programs, and that you know you can do these things.
|
28 |
-
|
29 |
-
To protect your rights, we need to prevent others from denying you
|
30 |
-
these rights or asking you to surrender the rights. Therefore, you have
|
31 |
-
certain responsibilities if you distribute copies of the software, or if
|
32 |
-
you modify it: responsibilities to respect the freedom of others.
|
33 |
-
|
34 |
-
For example, if you distribute copies of such a program, whether
|
35 |
-
gratis or for a fee, you must pass on to the recipients the same
|
36 |
-
freedoms that you received. You must make sure that they, too, receive
|
37 |
-
or can get the source code. And you must show them these terms so they
|
38 |
-
know their rights.
|
39 |
-
|
40 |
-
Developers that use the GNU GPL protect your rights with two steps:
|
41 |
-
(1) assert copyright on the software, and (2) offer you this License
|
42 |
-
giving you legal permission to copy, distribute and/or modify it.
|
43 |
-
|
44 |
-
For the developers' and authors' protection, the GPL clearly explains
|
45 |
-
that there is no warranty for this free software. For both users' and
|
46 |
-
authors' sake, the GPL requires that modified versions be marked as
|
47 |
-
changed, so that their problems will not be attributed erroneously to
|
48 |
-
authors of previous versions.
|
49 |
-
|
50 |
-
Some devices are designed to deny users access to install or run
|
51 |
-
modified versions of the software inside them, although the manufacturer
|
52 |
-
can do so. This is fundamentally incompatible with the aim of
|
53 |
-
protecting users' freedom to change the software. The systematic
|
54 |
-
pattern of such abuse occurs in the area of products for individuals to
|
55 |
-
use, which is precisely where it is most unacceptable. Therefore, we
|
56 |
-
have designed this version of the GPL to prohibit the practice for those
|
57 |
-
products. If such problems arise substantially in other domains, we
|
58 |
-
stand ready to extend this provision to those domains in future versions
|
59 |
-
of the GPL, as needed to protect the freedom of users.
|
60 |
-
|
61 |
-
Finally, every program is threatened constantly by software patents.
|
62 |
-
States should not allow patents to restrict development and use of
|
63 |
-
software on general-purpose computers, but in those that do, we wish to
|
64 |
-
avoid the special danger that patents applied to a free program could
|
65 |
-
make it effectively proprietary. To prevent this, the GPL assures that
|
66 |
-
patents cannot be used to render the program non-free.
|
67 |
-
|
68 |
-
The precise terms and conditions for copying, distribution and
|
69 |
-
modification follow.
|
70 |
-
|
71 |
-
TERMS AND CONDITIONS
|
72 |
-
|
73 |
-
0. Definitions.
|
74 |
-
|
75 |
-
"This License" refers to version 3 of the GNU General Public License.
|
76 |
-
|
77 |
-
"Copyright" also means copyright-like laws that apply to other kinds of
|
78 |
-
works, such as semiconductor masks.
|
79 |
-
|
80 |
-
"The Program" refers to any copyrightable work licensed under this
|
81 |
-
License. Each licensee is addressed as "you". "Licensees" and
|
82 |
-
"recipients" may be individuals or organizations.
|
83 |
-
|
84 |
-
To "modify" a work means to copy from or adapt all or part of the work
|
85 |
-
in a fashion requiring copyright permission, other than the making of an
|
86 |
-
exact copy. The resulting work is called a "modified version" of the
|
87 |
-
earlier work or a work "based on" the earlier work.
|
88 |
-
|
89 |
-
A "covered work" means either the unmodified Program or a work based
|
90 |
-
on the Program.
|
91 |
-
|
92 |
-
To "propagate" a work means to do anything with it that, without
|
93 |
-
permission, would make you directly or secondarily liable for
|
94 |
-
infringement under applicable copyright law, except executing it on a
|
95 |
-
computer or modifying a private copy. Propagation includes copying,
|
96 |
-
distribution (with or without modification), making available to the
|
97 |
-
public, and in some countries other activities as well.
|
98 |
-
|
99 |
-
To "convey" a work means any kind of propagation that enables other
|
100 |
-
parties to make or receive copies. Mere interaction with a user through
|
101 |
-
a computer network, with no transfer of a copy, is not conveying.
|
102 |
-
|
103 |
-
An interactive user interface displays "Appropriate Legal Notices"
|
104 |
-
to the extent that it includes a convenient and prominently visible
|
105 |
-
feature that (1) displays an appropriate copyright notice, and (2)
|
106 |
-
tells the user that there is no warranty for the work (except to the
|
107 |
-
extent that warranties are provided), that licensees may convey the
|
108 |
-
work under this License, and how to view a copy of this License. If
|
109 |
-
the interface presents a list of user commands or options, such as a
|
110 |
-
menu, a prominent item in the list meets this criterion.
|
111 |
-
|
112 |
-
1. Source Code.
|
113 |
-
|
114 |
-
The "source code" for a work means the preferred form of the work
|
115 |
-
for making modifications to it. "Object code" means any non-source
|
116 |
-
form of a work.
|
117 |
-
|
118 |
-
A "Standard Interface" means an interface that either is an official
|
119 |
-
standard defined by a recognized standards body, or, in the case of
|
120 |
-
interfaces specified for a particular programming language, one that
|
121 |
-
is widely used among developers working in that language.
|
122 |
-
|
123 |
-
The "System Libraries" of an executable work include anything, other
|
124 |
-
than the work as a whole, that (a) is included in the normal form of
|
125 |
-
packaging a Major Component, but which is not part of that Major
|
126 |
-
Component, and (b) serves only to enable use of the work with that
|
127 |
-
Major Component, or to implement a Standard Interface for which an
|
128 |
-
implementation is available to the public in source code form. A
|
129 |
-
"Major Component", in this context, means a major essential component
|
130 |
-
(kernel, window system, and so on) of the specific operating system
|
131 |
-
(if any) on which the executable work runs, or a compiler used to
|
132 |
-
produce the work, or an object code interpreter used to run it.
|
133 |
-
|
134 |
-
The "Corresponding Source" for a work in object code form means all
|
135 |
-
the source code needed to generate, install, and (for an executable
|
136 |
-
work) run the object code and to modify the work, including scripts to
|
137 |
-
control those activities. However, it does not include the work's
|
138 |
-
System Libraries, or general-purpose tools or generally available free
|
139 |
-
programs which are used unmodified in performing those activities but
|
140 |
-
which are not part of the work. For example, Corresponding Source
|
141 |
-
includes interface definition files associated with source files for
|
142 |
-
the work, and the source code for shared libraries and dynamically
|
143 |
-
linked subprograms that the work is specifically designed to require,
|
144 |
-
such as by intimate data communication or control flow between those
|
145 |
-
subprograms and other parts of the work.
|
146 |
-
|
147 |
-
The Corresponding Source need not include anything that users
|
148 |
-
can regenerate automatically from other parts of the Corresponding
|
149 |
-
Source.
|
150 |
-
|
151 |
-
The Corresponding Source for a work in source code form is that
|
152 |
-
same work.
|
153 |
-
|
154 |
-
2. Basic Permissions.
|
155 |
-
|
156 |
-
All rights granted under this License are granted for the term of
|
157 |
-
copyright on the Program, and are irrevocable provided the stated
|
158 |
-
conditions are met. This License explicitly affirms your unlimited
|
159 |
-
permission to run the unmodified Program. The output from running a
|
160 |
-
covered work is covered by this License only if the output, given its
|
161 |
-
content, constitutes a covered work. This License acknowledges your
|
162 |
-
rights of fair use or other equivalent, as provided by copyright law.
|
163 |
-
|
164 |
-
You may make, run and propagate covered works that you do not
|
165 |
-
convey, without conditions so long as your license otherwise remains
|
166 |
-
in force. You may convey covered works to others for the sole purpose
|
167 |
-
of having them make modifications exclusively for you, or provide you
|
168 |
-
with facilities for running those works, provided that you comply with
|
169 |
-
the terms of this License in conveying all material for which you do
|
170 |
-
not control copyright. Those thus making or running the covered works
|
171 |
-
for you must do so exclusively on your behalf, under your direction
|
172 |
-
and control, on terms that prohibit them from making any copies of
|
173 |
-
your copyrighted material outside their relationship with you.
|
174 |
-
|
175 |
-
Conveying under any other circumstances is permitted solely under
|
176 |
-
the conditions stated below. Sublicensing is not allowed; section 10
|
177 |
-
makes it unnecessary.
|
178 |
-
|
179 |
-
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
180 |
-
|
181 |
-
No covered work shall be deemed part of an effective technological
|
182 |
-
measure under any applicable law fulfilling obligations under article
|
183 |
-
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
184 |
-
similar laws prohibiting or restricting circumvention of such
|
185 |
-
measures.
|
186 |
-
|
187 |
-
When you convey a covered work, you waive any legal power to forbid
|
188 |
-
circumvention of technological measures to the extent such circumvention
|
189 |
-
is effected by exercising rights under this License with respect to
|
190 |
-
the covered work, and you disclaim any intention to limit operation or
|
191 |
-
modification of the work as a means of enforcing, against the work's
|
192 |
-
users, your or third parties' legal rights to forbid circumvention of
|
193 |
-
technological measures.
|
194 |
-
|
195 |
-
4. Conveying Verbatim Copies.
|
196 |
-
|
197 |
-
You may convey verbatim copies of the Program's source code as you
|
198 |
-
receive it, in any medium, provided that you conspicuously and
|
199 |
-
appropriately publish on each copy an appropriate copyright notice;
|
200 |
-
keep intact all notices stating that this License and any
|
201 |
-
non-permissive terms added in accord with section 7 apply to the code;
|
202 |
-
keep intact all notices of the absence of any warranty; and give all
|
203 |
-
recipients a copy of this License along with the Program.
|
204 |
-
|
205 |
-
You may charge any price or no price for each copy that you convey,
|
206 |
-
and you may offer support or warranty protection for a fee.
|
207 |
-
|
208 |
-
5. Conveying Modified Source Versions.
|
209 |
-
|
210 |
-
You may convey a work based on the Program, or the modifications to
|
211 |
-
produce it from the Program, in the form of source code under the
|
212 |
-
terms of section 4, provided that you also meet all of these conditions:
|
213 |
-
|
214 |
-
a) The work must carry prominent notices stating that you modified
|
215 |
-
it, and giving a relevant date.
|
216 |
-
|
217 |
-
b) The work must carry prominent notices stating that it is
|
218 |
-
released under this License and any conditions added under section
|
219 |
-
7. This requirement modifies the requirement in section 4 to
|
220 |
-
"keep intact all notices".
|
221 |
-
|
222 |
-
c) You must license the entire work, as a whole, under this
|
223 |
-
License to anyone who comes into possession of a copy. This
|
224 |
-
License will therefore apply, along with any applicable section 7
|
225 |
-
additional terms, to the whole of the work, and all its parts,
|
226 |
-
regardless of how they are packaged. This License gives no
|
227 |
-
permission to license the work in any other way, but it does not
|
228 |
-
invalidate such permission if you have separately received it.
|
229 |
-
|
230 |
-
d) If the work has interactive user interfaces, each must display
|
231 |
-
Appropriate Legal Notices; however, if the Program has interactive
|
232 |
-
interfaces that do not display Appropriate Legal Notices, your
|
233 |
-
work need not make them do so.
|
234 |
-
|
235 |
-
A compilation of a covered work with other separate and independent
|
236 |
-
works, which are not by their nature extensions of the covered work,
|
237 |
-
and which are not combined with it such as to form a larger program,
|
238 |
-
in or on a volume of a storage or distribution medium, is called an
|
239 |
-
"aggregate" if the compilation and its resulting copyright are not
|
240 |
-
used to limit the access or legal rights of the compilation's users
|
241 |
-
beyond what the individual works permit. Inclusion of a covered work
|
242 |
-
in an aggregate does not cause this License to apply to the other
|
243 |
-
parts of the aggregate.
|
244 |
-
|
245 |
-
6. Conveying Non-Source Forms.
|
246 |
-
|
247 |
-
You may convey a covered work in object code form under the terms
|
248 |
-
of sections 4 and 5, provided that you also convey the
|
249 |
-
machine-readable Corresponding Source under the terms of this License,
|
250 |
-
in one of these ways:
|
251 |
-
|
252 |
-
a) Convey the object code in, or embodied in, a physical product
|
253 |
-
(including a physical distribution medium), accompanied by the
|
254 |
-
Corresponding Source fixed on a durable physical medium
|
255 |
-
customarily used for software interchange.
|
256 |
-
|
257 |
-
b) Convey the object code in, or embodied in, a physical product
|
258 |
-
(including a physical distribution medium), accompanied by a
|
259 |
-
written offer, valid for at least three years and valid for as
|
260 |
-
long as you offer spare parts or customer support for that product
|
261 |
-
model, to give anyone who possesses the object code either (1) a
|
262 |
-
copy of the Corresponding Source for all the software in the
|
263 |
-
product that is covered by this License, on a durable physical
|
264 |
-
medium customarily used for software interchange, for a price no
|
265 |
-
more than your reasonable cost of physically performing this
|
266 |
-
conveying of source, or (2) access to copy the
|
267 |
-
Corresponding Source from a network server at no charge.
|
268 |
-
|
269 |
-
c) Convey individual copies of the object code with a copy of the
|
270 |
-
written offer to provide the Corresponding Source. This
|
271 |
-
alternative is allowed only occasionally and noncommercially, and
|
272 |
-
only if you received the object code with such an offer, in accord
|
273 |
-
with subsection 6b.
|
274 |
-
|
275 |
-
d) Convey the object code by offering access from a designated
|
276 |
-
place (gratis or for a charge), and offer equivalent access to the
|
277 |
-
Corresponding Source in the same way through the same place at no
|
278 |
-
further charge. You need not require recipients to copy the
|
279 |
-
Corresponding Source along with the object code. If the place to
|
280 |
-
copy the object code is a network server, the Corresponding Source
|
281 |
-
may be on a different server (operated by you or a third party)
|
282 |
-
that supports equivalent copying facilities, provided you maintain
|
283 |
-
clear directions next to the object code saying where to find the
|
284 |
-
Corresponding Source. Regardless of what server hosts the
|
285 |
-
Corresponding Source, you remain obligated to ensure that it is
|
286 |
-
available for as long as needed to satisfy these requirements.
|
287 |
-
|
288 |
-
e) Convey the object code using peer-to-peer transmission, provided
|
289 |
-
you inform other peers where the object code and Corresponding
|
290 |
-
Source of the work are being offered to the general public at no
|
291 |
-
charge under subsection 6d.
|
292 |
-
|
293 |
-
A separable portion of the object code, whose source code is excluded
|
294 |
-
from the Corresponding Source as a System Library, need not be
|
295 |
-
included in conveying the object code work.
|
296 |
-
|
297 |
-
A "User Product" is either (1) a "consumer product", which means any
|
298 |
-
tangible personal property which is normally used for personal, family,
|
299 |
-
or household purposes, or (2) anything designed or sold for incorporation
|
300 |
-
into a dwelling. In determining whether a product is a consumer product,
|
301 |
-
doubtful cases shall be resolved in favor of coverage. For a particular
|
302 |
-
product received by a particular user, "normally used" refers to a
|
303 |
-
typical or common use of that class of product, regardless of the status
|
304 |
-
of the particular user or of the way in which the particular user
|
305 |
-
actually uses, or expects or is expected to use, the product. A product
|
306 |
-
is a consumer product regardless of whether the product has substantial
|
307 |
-
commercial, industrial or non-consumer uses, unless such uses represent
|
308 |
-
the only significant mode of use of the product.
|
309 |
-
|
310 |
-
"Installation Information" for a User Product means any methods,
|
311 |
-
procedures, authorization keys, or other information required to install
|
312 |
-
and execute modified versions of a covered work in that User Product from
|
313 |
-
a modified version of its Corresponding Source. The information must
|
314 |
-
suffice to ensure that the continued functioning of the modified object
|
315 |
-
code is in no case prevented or interfered with solely because
|
316 |
-
modification has been made.
|
317 |
-
|
318 |
-
If you convey an object code work under this section in, or with, or
|
319 |
-
specifically for use in, a User Product, and the conveying occurs as
|
320 |
-
part of a transaction in which the right of possession and use of the
|
321 |
-
User Product is transferred to the recipient in perpetuity or for a
|
322 |
-
fixed term (regardless of how the transaction is characterized), the
|
323 |
-
Corresponding Source conveyed under this section must be accompanied
|
324 |
-
by the Installation Information. But this requirement does not apply
|
325 |
-
if neither you nor any third party retains the ability to install
|
326 |
-
modified object code on the User Product (for example, the work has
|
327 |
-
been installed in ROM).
|
328 |
-
|
329 |
-
The requirement to provide Installation Information does not include a
|
330 |
-
requirement to continue to provide support service, warranty, or updates
|
331 |
-
for a work that has been modified or installed by the recipient, or for
|
332 |
-
the User Product in which it has been modified or installed. Access to a
|
333 |
-
network may be denied when the modification itself materially and
|
334 |
-
adversely affects the operation of the network or violates the rules and
|
335 |
-
protocols for communication across the network.
|
336 |
-
|
337 |
-
Corresponding Source conveyed, and Installation Information provided,
|
338 |
-
in accord with this section must be in a format that is publicly
|
339 |
-
documented (and with an implementation available to the public in
|
340 |
-
source code form), and must require no special password or key for
|
341 |
-
unpacking, reading or copying.
|
342 |
-
|
343 |
-
7. Additional Terms.
|
344 |
-
|
345 |
-
"Additional permissions" are terms that supplement the terms of this
|
346 |
-
License by making exceptions from one or more of its conditions.
|
347 |
-
Additional permissions that are applicable to the entire Program shall
|
348 |
-
be treated as though they were included in this License, to the extent
|
349 |
-
that they are valid under applicable law. If additional permissions
|
350 |
-
apply only to part of the Program, that part may be used separately
|
351 |
-
under those permissions, but the entire Program remains governed by
|
352 |
-
this License without regard to the additional permissions.
|
353 |
-
|
354 |
-
When you convey a copy of a covered work, you may at your option
|
355 |
-
remove any additional permissions from that copy, or from any part of
|
356 |
-
it. (Additional permissions may be written to require their own
|
357 |
-
removal in certain cases when you modify the work.) You may place
|
358 |
-
additional permissions on material, added by you to a covered work,
|
359 |
-
for which you have or can give appropriate copyright permission.
|
360 |
-
|
361 |
-
Notwithstanding any other provision of this License, for material you
|
362 |
-
add to a covered work, you may (if authorized by the copyright holders of
|
363 |
-
that material) supplement the terms of this License with terms:
|
364 |
-
|
365 |
-
a) Disclaiming warranty or limiting liability differently from the
|
366 |
-
terms of sections 15 and 16 of this License; or
|
367 |
-
|
368 |
-
b) Requiring preservation of specified reasonable legal notices or
|
369 |
-
author attributions in that material or in the Appropriate Legal
|
370 |
-
Notices displayed by works containing it; or
|
371 |
-
|
372 |
-
c) Prohibiting misrepresentation of the origin of that material, or
|
373 |
-
requiring that modified versions of such material be marked in
|
374 |
-
reasonable ways as different from the original version; or
|
375 |
-
|
376 |
-
d) Limiting the use for publicity purposes of names of licensors or
|
377 |
-
authors of the material; or
|
378 |
-
|
379 |
-
e) Declining to grant rights under trademark law for use of some
|
380 |
-
trade names, trademarks, or service marks; or
|
381 |
-
|
382 |
-
f) Requiring indemnification of licensors and authors of that
|
383 |
-
material by anyone who conveys the material (or modified versions of
|
384 |
-
it) with contractual assumptions of liability to the recipient, for
|
385 |
-
any liability that these contractual assumptions directly impose on
|
386 |
-
those licensors and authors.
|
387 |
-
|
388 |
-
All other non-permissive additional terms are considered "further
|
389 |
-
restrictions" within the meaning of section 10. If the Program as you
|
390 |
-
received it, or any part of it, contains a notice stating that it is
|
391 |
-
governed by this License along with a term that is a further
|
392 |
-
restriction, you may remove that term. If a license document contains
|
393 |
-
a further restriction but permits relicensing or conveying under this
|
394 |
-
License, you may add to a covered work material governed by the terms
|
395 |
-
of that license document, provided that the further restriction does
|
396 |
-
not survive such relicensing or conveying.
|
397 |
-
|
398 |
-
If you add terms to a covered work in accord with this section, you
|
399 |
-
must place, in the relevant source files, a statement of the
|
400 |
-
additional terms that apply to those files, or a notice indicating
|
401 |
-
where to find the applicable terms.
|
402 |
-
|
403 |
-
Additional terms, permissive or non-permissive, may be stated in the
|
404 |
-
form of a separately written license, or stated as exceptions;
|
405 |
-
the above requirements apply either way.
|
406 |
-
|
407 |
-
8. Termination.
|
408 |
-
|
409 |
-
You may not propagate or modify a covered work except as expressly
|
410 |
-
provided under this License. Any attempt otherwise to propagate or
|
411 |
-
modify it is void, and will automatically terminate your rights under
|
412 |
-
this License (including any patent licenses granted under the third
|
413 |
-
paragraph of section 11).
|
414 |
-
|
415 |
-
However, if you cease all violation of this License, then your
|
416 |
-
license from a particular copyright holder is reinstated (a)
|
417 |
-
provisionally, unless and until the copyright holder explicitly and
|
418 |
-
finally terminates your license, and (b) permanently, if the copyright
|
419 |
-
holder fails to notify you of the violation by some reasonable means
|
420 |
-
prior to 60 days after the cessation.
|
421 |
-
|
422 |
-
Moreover, your license from a particular copyright holder is
|
423 |
-
reinstated permanently if the copyright holder notifies you of the
|
424 |
-
violation by some reasonable means, this is the first time you have
|
425 |
-
received notice of violation of this License (for any work) from that
|
426 |
-
copyright holder, and you cure the violation prior to 30 days after
|
427 |
-
your receipt of the notice.
|
428 |
-
|
429 |
-
Termination of your rights under this section does not terminate the
|
430 |
-
licenses of parties who have received copies or rights from you under
|
431 |
-
this License. If your rights have been terminated and not permanently
|
432 |
-
reinstated, you do not qualify to receive new licenses for the same
|
433 |
-
material under section 10.
|
434 |
-
|
435 |
-
9. Acceptance Not Required for Having Copies.
|
436 |
-
|
437 |
-
You are not required to accept this License in order to receive or
|
438 |
-
run a copy of the Program. Ancillary propagation of a covered work
|
439 |
-
occurring solely as a consequence of using peer-to-peer transmission
|
440 |
-
to receive a copy likewise does not require acceptance. However,
|
441 |
-
nothing other than this License grants you permission to propagate or
|
442 |
-
modify any covered work. These actions infringe copyright if you do
|
443 |
-
not accept this License. Therefore, by modifying or propagating a
|
444 |
-
covered work, you indicate your acceptance of this License to do so.
|
445 |
-
|
446 |
-
10. Automatic Licensing of Downstream Recipients.
|
447 |
-
|
448 |
-
Each time you convey a covered work, the recipient automatically
|
449 |
-
receives a license from the original licensors, to run, modify and
|
450 |
-
propagate that work, subject to this License. You are not responsible
|
451 |
-
for enforcing compliance by third parties with this License.
|
452 |
-
|
453 |
-
An "entity transaction" is a transaction transferring control of an
|
454 |
-
organization, or substantially all assets of one, or subdividing an
|
455 |
-
organization, or merging organizations. If propagation of a covered
|
456 |
-
work results from an entity transaction, each party to that
|
457 |
-
transaction who receives a copy of the work also receives whatever
|
458 |
-
licenses to the work the party's predecessor in interest had or could
|
459 |
-
give under the previous paragraph, plus a right to possession of the
|
460 |
-
Corresponding Source of the work from the predecessor in interest, if
|
461 |
-
the predecessor has it or can get it with reasonable efforts.
|
462 |
-
|
463 |
-
You may not impose any further restrictions on the exercise of the
|
464 |
-
rights granted or affirmed under this License. For example, you may
|
465 |
-
not impose a license fee, royalty, or other charge for exercise of
|
466 |
-
rights granted under this License, and you may not initiate litigation
|
467 |
-
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
468 |
-
any patent claim is infringed by making, using, selling, offering for
|
469 |
-
sale, or importing the Program or any portion of it.
|
470 |
-
|
471 |
-
11. Patents.
|
472 |
-
|
473 |
-
A "contributor" is a copyright holder who authorizes use under this
|
474 |
-
License of the Program or a work on which the Program is based. The
|
475 |
-
work thus licensed is called the contributor's "contributor version".
|
476 |
-
|
477 |
-
A contributor's "essential patent claims" are all patent claims
|
478 |
-
owned or controlled by the contributor, whether already acquired or
|
479 |
-
hereafter acquired, that would be infringed by some manner, permitted
|
480 |
-
by this License, of making, using, or selling its contributor version,
|
481 |
-
but do not include claims that would be infringed only as a
|
482 |
-
consequence of further modification of the contributor version. For
|
483 |
-
purposes of this definition, "control" includes the right to grant
|
484 |
-
patent sublicenses in a manner consistent with the requirements of
|
485 |
-
this License.
|
486 |
-
|
487 |
-
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
488 |
-
patent license under the contributor's essential patent claims, to
|
489 |
-
make, use, sell, offer for sale, import and otherwise run, modify and
|
490 |
-
propagate the contents of its contributor version.
|
491 |
-
|
492 |
-
In the following three paragraphs, a "patent license" is any express
|
493 |
-
agreement or commitment, however denominated, not to enforce a patent
|
494 |
-
(such as an express permission to practice a patent or covenant not to
|
495 |
-
sue for patent infringement). To "grant" such a patent license to a
|
496 |
-
party means to make such an agreement or commitment not to enforce a
|
497 |
-
patent against the party.
|
498 |
-
|
499 |
-
If you convey a covered work, knowingly relying on a patent license,
|
500 |
-
and the Corresponding Source of the work is not available for anyone
|
501 |
-
to copy, free of charge and under the terms of this License, through a
|
502 |
-
publicly available network server or other readily accessible means,
|
503 |
-
then you must either (1) cause the Corresponding Source to be so
|
504 |
-
available, or (2) arrange to deprive yourself of the benefit of the
|
505 |
-
patent license for this particular work, or (3) arrange, in a manner
|
506 |
-
consistent with the requirements of this License, to extend the patent
|
507 |
-
license to downstream recipients. "Knowingly relying" means you have
|
508 |
-
actual knowledge that, but for the patent license, your conveying the
|
509 |
-
covered work in a country, or your recipient's use of the covered work
|
510 |
-
in a country, would infringe one or more identifiable patents in that
|
511 |
-
country that you have reason to believe are valid.
|
512 |
-
|
513 |
-
If, pursuant to or in connection with a single transaction or
|
514 |
-
arrangement, you convey, or propagate by procuring conveyance of, a
|
515 |
-
covered work, and grant a patent license to some of the parties
|
516 |
-
receiving the covered work authorizing them to use, propagate, modify
|
517 |
-
or convey a specific copy of the covered work, then the patent license
|
518 |
-
you grant is automatically extended to all recipients of the covered
|
519 |
-
work and works based on it.
|
520 |
-
|
521 |
-
A patent license is "discriminatory" if it does not include within
|
522 |
-
the scope of its coverage, prohibits the exercise of, or is
|
523 |
-
conditioned on the non-exercise of one or more of the rights that are
|
524 |
-
specifically granted under this License. You may not convey a covered
|
525 |
-
work if you are a party to an arrangement with a third party that is
|
526 |
-
in the business of distributing software, under which you make payment
|
527 |
-
to the third party based on the extent of your activity of conveying
|
528 |
-
the work, and under which the third party grants, to any of the
|
529 |
-
parties who would receive the covered work from you, a discriminatory
|
530 |
-
patent license (a) in connection with copies of the covered work
|
531 |
-
conveyed by you (or copies made from those copies), or (b) primarily
|
532 |
-
for and in connection with specific products or compilations that
|
533 |
-
contain the covered work, unless you entered into that arrangement,
|
534 |
-
or that patent license was granted, prior to 28 March 2007.
|
535 |
-
|
536 |
-
Nothing in this License shall be construed as excluding or limiting
|
537 |
-
any implied license or other defenses to infringement that may
|
538 |
-
otherwise be available to you under applicable patent law.
|
539 |
-
|
540 |
-
12. No Surrender of Others' Freedom.
|
541 |
-
|
542 |
-
If conditions are imposed on you (whether by court order, agreement or
|
543 |
-
otherwise) that contradict the conditions of this License, they do not
|
544 |
-
excuse you from the conditions of this License. If you cannot convey a
|
545 |
-
covered work so as to satisfy simultaneously your obligations under this
|
546 |
-
License and any other pertinent obligations, then as a consequence you may
|
547 |
-
not convey it at all. For example, if you agree to terms that obligate you
|
548 |
-
to collect a royalty for further conveying from those to whom you convey
|
549 |
-
the Program, the only way you could satisfy both those terms and this
|
550 |
-
License would be to refrain entirely from conveying the Program.
|
551 |
-
|
552 |
-
13. Use with the GNU Affero General Public License.
|
553 |
-
|
554 |
-
Notwithstanding any other provision of this License, you have
|
555 |
-
permission to link or combine any covered work with a work licensed
|
556 |
-
under version 3 of the GNU Affero General Public License into a single
|
557 |
-
combined work, and to convey the resulting work. The terms of this
|
558 |
-
License will continue to apply to the part which is the covered work,
|
559 |
-
but the special requirements of the GNU Affero General Public License,
|
560 |
-
section 13, concerning interaction through a network will apply to the
|
561 |
-
combination as such.
|
562 |
-
|
563 |
-
14. Revised Versions of this License.
|
564 |
-
|
565 |
-
The Free Software Foundation may publish revised and/or new versions of
|
566 |
-
the GNU General Public License from time to time. Such new versions will
|
567 |
-
be similar in spirit to the present version, but may differ in detail to
|
568 |
-
address new problems or concerns.
|
569 |
-
|
570 |
-
Each version is given a distinguishing version number. If the
|
571 |
-
Program specifies that a certain numbered version of the GNU General
|
572 |
-
Public License "or any later version" applies to it, you have the
|
573 |
-
option of following the terms and conditions either of that numbered
|
574 |
-
version or of any later version published by the Free Software
|
575 |
-
Foundation. If the Program does not specify a version number of the
|
576 |
-
GNU General Public License, you may choose any version ever published
|
577 |
-
by the Free Software Foundation.
|
578 |
-
|
579 |
-
If the Program specifies that a proxy can decide which future
|
580 |
-
versions of the GNU General Public License can be used, that proxy's
|
581 |
-
public statement of acceptance of a version permanently authorizes you
|
582 |
-
to choose that version for the Program.
|
583 |
-
|
584 |
-
Later license versions may give you additional or different
|
585 |
-
permissions. However, no additional obligations are imposed on any
|
586 |
-
author or copyright holder as a result of your choosing to follow a
|
587 |
-
later version.
|
588 |
-
|
589 |
-
15. Disclaimer of Warranty.
|
590 |
-
|
591 |
-
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
592 |
-
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
593 |
-
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
594 |
-
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
595 |
-
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
596 |
-
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
597 |
-
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
598 |
-
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
599 |
-
|
600 |
-
16. Limitation of Liability.
|
601 |
-
|
602 |
-
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
603 |
-
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
604 |
-
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
605 |
-
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
606 |
-
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
607 |
-
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
608 |
-
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
609 |
-
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
610 |
-
SUCH DAMAGES.
|
611 |
-
|
612 |
-
17. Interpretation of Sections 15 and 16.
|
613 |
-
|
614 |
-
If the disclaimer of warranty and limitation of liability provided
|
615 |
-
above cannot be given local legal effect according to their terms,
|
616 |
-
reviewing courts shall apply local law that most closely approximates
|
617 |
-
an absolute waiver of all civil liability in connection with the
|
618 |
-
Program, unless a warranty or assumption of liability accompanies a
|
619 |
-
copy of the Program in return for a fee.
|
620 |
-
|
621 |
-
END OF TERMS AND CONDITIONS
|
622 |
-
|
623 |
-
How to Apply These Terms to Your New Programs
|
624 |
-
|
625 |
-
If you develop a new program, and you want it to be of the greatest
|
626 |
-
possible use to the public, the best way to achieve this is to make it
|
627 |
-
free software which everyone can redistribute and change under these terms.
|
628 |
-
|
629 |
-
To do so, attach the following notices to the program. It is safest
|
630 |
-
to attach them to the start of each source file to most effectively
|
631 |
-
state the exclusion of warranty; and each file should have at least
|
632 |
-
the "copyright" line and a pointer to where the full notice is found.
|
633 |
-
|
634 |
-
{one line to give the program's name and a brief idea of what it does.}
|
635 |
-
Copyright (C) {year} {name of author}
|
636 |
-
|
637 |
-
This program is free software: you can redistribute it and/or modify
|
638 |
-
it under the terms of the GNU General Public License as published by
|
639 |
-
the Free Software Foundation, either version 3 of the License, or
|
640 |
-
(at your option) any later version.
|
641 |
-
|
642 |
-
This program is distributed in the hope that it will be useful,
|
643 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
644 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
645 |
-
GNU General Public License for more details.
|
646 |
-
|
647 |
-
You should have received a copy of the GNU General Public License
|
648 |
-
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
649 |
-
|
650 |
-
Also add information on how to contact you by electronic and paper mail.
|
651 |
-
|
652 |
-
If the program does terminal interaction, make it output a short
|
653 |
-
notice like this when it starts in an interactive mode:
|
654 |
-
|
655 |
-
{project} Copyright (C) {year} {fullname}
|
656 |
-
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
657 |
-
This is free software, and you are welcome to redistribute it
|
658 |
-
under certain conditions; type `show c' for details.
|
659 |
-
|
660 |
-
The hypothetical commands `show w' and `show c' should show the appropriate
|
661 |
-
parts of the General Public License. Of course, your program's commands
|
662 |
-
might be different; for a GUI interface, you would use an "about box".
|
663 |
-
|
664 |
-
You should also get your employer (if you work as a programmer) or school,
|
665 |
-
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
666 |
-
For more information on this, and how to apply and follow the GNU GPL, see
|
667 |
-
<http://www.gnu.org/licenses/>.
|
668 |
-
|
669 |
-
The GNU General Public License does not permit incorporating your program
|
670 |
-
into proprietary programs. If your program is a subroutine library, you
|
671 |
-
may consider it more useful to permit linking proprietary applications with
|
672 |
-
the library. If this is what you want to do, use the GNU Lesser General
|
673 |
-
Public License instead of this License. But first, please read
|
674 |
-
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-extensions/README.md
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
redux-extensions-loader
|
2 |
-
================
|
3 |
-
|
4 |
-
The loader code needed to instantiate any Redux extension. To load any Redux extension, you need but do two things:
|
5 |
-
|
6 |
-
* Inside loader.php change `{$redux_opt_name}` to match your opt_name or set `$redux_opt_name` to your `opt_name` and make sure it's accessible by loader.php.
|
7 |
-
* Change the function name and hook reference of `redux_register_custom_extension_loader` as not to conflict with another developer's code.
|
8 |
-
|
9 |
-
Then place any extension folder within ~/extensions.
|
10 |
-
|
11 |
-
Depending on the extension you may also need to load a config file of some type to declare the options for that extension.
|
12 |
-
|
13 |
-
# Make sure this is included before you declare your Redux Framework object.
|
14 |
-
Because of WordPress hooks you need to include this before you create your ReduxFramework instance. It has to do with hooks. Just load this loader and your config settings prior to creating that object.
|
15 |
-
|
16 |
-
## Note: DO NOT place extensions within ~/ReduxCore/Extensions
|
17 |
-
If you do so any other plugin could override your extensions and they would be inaccessible by your code.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-extensions/extensions-init.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$redux_opt_name = "wpml_settings";
|
4 |
-
|
5 |
-
// Place any extra hooks/configs in here for extensions and
|
6 |
-
// place the actual extension within the /extensions dir
|
7 |
-
|
8 |
-
|
9 |
-
// The loader will load all of the extensions automatically.
|
10 |
-
// Alternatively you can run the include/init statements below.
|
11 |
-
require_once(dirname(__FILE__).'/loader.php');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-extensions/extensions/readme.txt
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
please extensions in here
|
|
inc/redux/redux-extensions/loader.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// Replace {$redux_opt_name} with your opt_name.
|
4 |
-
// Also be sure to change this function name!
|
5 |
-
|
6 |
-
if(!function_exists('redux_register_custom_extension_loader')) :
|
7 |
-
function redux_register_custom_extension_loader($ReduxFramework) {
|
8 |
-
$path = dirname( __FILE__ ) . '/extensions/';
|
9 |
-
$folders = scandir( $path, 1 );
|
10 |
-
foreach ( $folders as $folder ) {
|
11 |
-
if ( $folder === '.' or $folder === '..' or ! is_dir( $path . $folder ) ) {
|
12 |
-
continue;
|
13 |
-
}
|
14 |
-
$extension_class = 'ReduxFramework_Extension_' . $folder;
|
15 |
-
if ( ! class_exists( $extension_class ) ) {
|
16 |
-
// In case you wanted override your override, hah.
|
17 |
-
$class_file = $path . $folder . '/extension_' . $folder . '.php';
|
18 |
-
$class_file = apply_filters( 'redux/extension/' . $ReduxFramework->args['opt_name'] . '/' . $folder, $class_file );
|
19 |
-
if ( $class_file ) {
|
20 |
-
require_once( $class_file );
|
21 |
-
}
|
22 |
-
}
|
23 |
-
if ( ! isset( $ReduxFramework->extensions[ $folder ] ) ) {
|
24 |
-
$ReduxFramework->extensions[ $folder ] = new $extension_class( $ReduxFramework );
|
25 |
-
}
|
26 |
-
}
|
27 |
-
}
|
28 |
-
// Modify {$redux_opt_name} to match your opt_name
|
29 |
-
add_action("redux/extensions/{$redux_opt_name}/before", 'redux_register_custom_extension_loader', 0);
|
30 |
-
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/.jshintrc
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"boss": true,
|
3 |
-
"immed": true,
|
4 |
-
"noarg": true,
|
5 |
-
"onevar": true,
|
6 |
-
|
7 |
-
"browser": true,
|
8 |
-
|
9 |
-
"globals": {
|
10 |
-
"_": false,
|
11 |
-
"jQuery": true,
|
12 |
-
"module": true,
|
13 |
-
"console": true,
|
14 |
-
"document": true,
|
15 |
-
"window": true,
|
16 |
-
"redux_change": true,
|
17 |
-
"redux": true
|
18 |
-
}
|
19 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/.tx/config
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
[main]
|
2 |
-
host = https://www.transifex.com
|
3 |
-
|
4 |
-
[redux-framework.redux-framework]
|
5 |
-
file_filter = ReduxCore/languages/<lang>.po
|
6 |
-
source_file = ReduxCore/languages/redux-framework.pot
|
7 |
-
source_lang = en_US
|
8 |
-
type = PO
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/CHANGELOG.md
DELETED
@@ -1,1596 +0,0 @@
|
|
1 |
-
# Redux Framework Changelog
|
2 |
-
|
3 |
-
## 3.5.4.3
|
4 |
-
* Fixed: #2258 - welcome redirect error with embedding plugin scenarios.
|
5 |
-
* Fixed: Redux plugin load order when activating plugins.
|
6 |
-
|
7 |
-
## 3.5.4.2
|
8 |
-
* Fixed: #2271 - stuck redirect on godaddy (seriously, get a real host, people) servers.
|
9 |
-
|
10 |
-
## 3.5.4.1
|
11 |
-
* Fixed: #2216 - Reset section not always working within FF.
|
12 |
-
|
13 |
-
## 3.5.4
|
14 |
-
* Modified: update_notice arg only truly shows up if dev_mode is on.
|
15 |
-
|
16 |
-
## 3.5.3.3
|
17 |
-
* Added: Tooltip to developer mode badge, for informational purposes.
|
18 |
-
* Modified: Added css_layout ext to default value filter, to avoid errors.
|
19 |
-
|
20 |
-
## 3.5.3.2
|
21 |
-
* Fixed: #2239 - Various extensions didn't support default values for default arg. Filtered out offending extensions.
|
22 |
-
|
23 |
-
## 3.5.3.1
|
24 |
-
* Fixed: WP.org ONLY SVN mixup.
|
25 |
-
|
26 |
-
## 3.5.3
|
27 |
-
* Fixed: #2228 - Submenu items still visible if permissions not allowed.
|
28 |
-
* Fixed: Import/Export showing up in customizer.
|
29 |
-
* Modified: Admin-fresh theme to match new WordPress 4.2
|
30 |
-
* Modified: Redux widget now has a proper ID. Thanks @corradomatt!
|
31 |
-
* Modified: Added text-shadow to submenu items to give a stronger "pop"
|
32 |
-
* Modified: Page_slug now dynamically generated if not specified.
|
33 |
-
|
34 |
-
## 3.5.2.2
|
35 |
-
* Modified: Admin blast message pinging server on each load after three day expiration. Possible slow down of the overall panel loading time.
|
36 |
-
|
37 |
-
## 3.5.2.1
|
38 |
-
* Fixed: #2221 - Background field media not enqueueing when used with no other media based fields.
|
39 |
-
|
40 |
-
## 3.5.2
|
41 |
-
* Fixed: #2214: Bad path for import/export enqueue.
|
42 |
-
* Release: Wp.org release.
|
43 |
-
|
44 |
-
## 3.5.1
|
45 |
-
* Release: Wp.org release.
|
46 |
-
|
47 |
-
## 3.5.0.7
|
48 |
-
* Modified: Redux News dashboard widget appears only when dev_mode is true or in a local host environment.
|
49 |
-
|
50 |
-
## 3.5.0.6
|
51 |
-
* Fixed #2127 - Elusive icons not working in footer as before.
|
52 |
-
* Fixed Issue where Status tab not showing extension versions properly.
|
53 |
-
* Fixed Issue in support URL not passing data correctly.
|
54 |
-
|
55 |
-
## 3.5.0.5
|
56 |
-
* Fixed Support URLs now work even if max_input_vars is way low in PHP 5.3+
|
57 |
-
|
58 |
-
## 3.5.0.4
|
59 |
-
* Fixed #2197 - Import/export not loading proper for those who have opted to install Wordpress in ways it was never intended.
|
60 |
-
|
61 |
-
## 3.5.0.3
|
62 |
-
* Fixed: 'Generate Support URL' feature kicking back error.
|
63 |
-
|
64 |
-
## 3.5.0.2
|
65 |
-
* Fixed Sortable checkbox labels not displaying properly.
|
66 |
-
* Fixed Sortable textbox not displaying default value as placeholder.
|
67 |
-
* Updated: sample-config with accurate example for both sortable modes.
|
68 |
-
|
69 |
-
## 3.5.0.1
|
70 |
-
* Fixed #2181 - Fixed issue with Ajax Save when PHP 5.3 Magic Quotes were disabled.
|
71 |
-
|
72 |
-
## 3.5.0 OFFICIAL RELEASE
|
73 |
-
Various fixes and improvements for release.
|
74 |
-
|
75 |
-
## 3.4.4.9.4
|
76 |
-
* Fixed: #2181 - Issue with PHP < 5.4 and the Ace Editor field. Oy.
|
77 |
-
|
78 |
-
## 3.4.4.9.3
|
79 |
-
* Fixed: #2163 - Undefined error in JS.
|
80 |
-
|
81 |
-
## 3.4.4.9.2
|
82 |
-
* Fixed: #2176 - Infinite loop in the customizer for live preview of themes.
|
83 |
-
|
84 |
-
## 3.4.4.9.1
|
85 |
-
* Fixed: Support page now works.
|
86 |
-
* Fixed: Fix for MySQL deprecated functions in php 5.5+.
|
87 |
-
|
88 |
-
## 3.4.4.9
|
89 |
-
* Added: Dynamic admin messages (aka Newsflash). Dismissable admin messages announcing breaking Redux news.
|
90 |
-
Messages will not appear for users when dev_mode is set to `false`. However, messages remain active
|
91 |
-
on localhosts, so devs may benefit.
|
92 |
-
|
93 |
-
## 3.4.4.8
|
94 |
-
* Fixed: #2155 - Fixed import with ajax_save.
|
95 |
-
* Fixed: Changelog now uses raw field parsedown if present.
|
96 |
-
|
97 |
-
## 3.4.4.7
|
98 |
-
* Added: Redux Framework News Widget on the WP Dashboard.
|
99 |
-
|
100 |
-
## 3.4.4.6
|
101 |
-
* Fixed: #2156: `label` argument not recognized when using sortable as textbox.
|
102 |
-
|
103 |
-
## 3.4.4.5
|
104 |
-
* Fixed: #2140 Another PHP 5.2 issue with ajax_save.
|
105 |
-
* Modified: Opt groups for select field now working in customizer even if not supported.
|
106 |
-
|
107 |
-
## 3.4.4.4
|
108 |
-
* Added: `full_width` arg now makes ANY field full-width. :)
|
109 |
-
|
110 |
-
## 3.4.4.3
|
111 |
-
* Fixed: #2133 - Ajax save adding extra backspashes in PHP 5.2 only (They didn't use array map properly).
|
112 |
-
* Fixed: Customizer wasn't working. Thanks @sgssandhu!
|
113 |
-
|
114 |
-
## 3.4.4.2
|
115 |
-
* Fixed: #2125 - Compiler not firing on first save, when using ajax_save.
|
116 |
-
|
117 |
-
## 3.4.4.1
|
118 |
-
* Fixed: #2118 - Typography JS error.
|
119 |
-
|
120 |
-
## 3.4.4
|
121 |
-
* Fixed: Odd typography bug no one has reported.
|
122 |
-
* Modified: Sticky header and footer to remain within the redux-main container.
|
123 |
-
|
124 |
-
## 3.4.3.9
|
125 |
-
* Fixed #2097 - Slash fix for ajax_save that was previously believed to be an isolated issue. Now applied on all ajax saves.
|
126 |
-
|
127 |
-
## 3.4.3.8
|
128 |
-
* Fixed: #2086 - color_rgba improperly functioning when transparent mode set to false.
|
129 |
-
|
130 |
-
## 3.4.3.7
|
131 |
-
* Fixed Import/Export bug where it wasn't running.
|
132 |
-
* Modified Locations of the core extensions directory as well as grunt configuration.
|
133 |
-
|
134 |
-
## 3.4.3.6
|
135 |
-
* Fixed #2047 - Validation will now accept 0 as a value to be tested. Thanks @Ninos!
|
136 |
-
* Added url_slug validation with option flush_permalinks!
|
137 |
-
* Fixed Issue where the remove of background field was always showing an empty preview box.
|
138 |
-
* Modified Turned ajax_save on by default for additional bug reports. ;)
|
139 |
-
* Modified Added some margin above validation errors/warnings so they look better.
|
140 |
-
* Modified Removed previous element border for any section so it looks better.
|
141 |
-
|
142 |
-
## 3.4.3.5
|
143 |
-
* Fixed #2081 - Section field hiding any field after. Weird.
|
144 |
-
|
145 |
-
## 3.4.3.4
|
146 |
-
* Added #2047 - `output_transparent` argument to output the blank color feature as 'transparent'.
|
147 |
-
* Fixed #2080 - missing 'rem' unit and inability to process float values. Thanks to @HELWATANY for the fixes!
|
148 |
-
* Fixed #2043 - misaligned images in image_select field.
|
149 |
-
|
150 |
-
## 3.4.3.3
|
151 |
-
* Added: #2064 - Merge argument for image_select. Thanks @Ninos
|
152 |
-
* Modified: Import/Export is now an extensiona and decoupled from the core.
|
153 |
-
* Fixed: Spinner had a nasty number bug, now resolved.
|
154 |
-
* Fixed: #2076 - RTL bug with old ID's. Thanks @mahfoozroy.
|
155 |
-
* Fixed: #2072 - Ajax_save editor type bug fix.
|
156 |
-
|
157 |
-
## 3.4.3.2
|
158 |
-
* Fixed: #2058 - Incorrect path in include statement for sysinfo.php
|
159 |
-
|
160 |
-
## 3.4.3.1
|
161 |
-
* Modified: Templates now have versioning with a warning (dev_mode only) if they are outdated from the core templates.
|
162 |
-
|
163 |
-
## 3.4.3
|
164 |
-
* Modified: Ajax saving now has overlay during save to avoid confusion for users.
|
165 |
-
|
166 |
-
## 3.4.2.9
|
167 |
-
* Modified: Template files even more for simplicity and ease.
|
168 |
-
* Modified: Saving. Redux now has the ajax_save argument if you want it!
|
169 |
-
* Modified: Validation warnings now work.
|
170 |
-
|
171 |
-
## 3.4.2.8
|
172 |
-
* Fixed: Changed set_transient function to public to avoid errors in new templating code.
|
173 |
-
|
174 |
-
## 3.4.2.7
|
175 |
-
* Modified: Entire panel template is now decoupled from the theme and implemented with many filters for easy customization.
|
176 |
-
|
177 |
-
## 3.4.2.6
|
178 |
-
* Fixed: #1478 - Import/export failing when two instances if Redux in use. Thanks, @desaiuditd!
|
179 |
-
* Fixed: Section field not indenting properly, if at all.
|
180 |
-
|
181 |
-
## 3.4.2.5
|
182 |
-
* Added: #2031 - Proper CSS sanitization for compliancy with WP.org.
|
183 |
-
|
184 |
-
## 3.4.2.4
|
185 |
-
* Fixed: #2027 - added isset()
|
186 |
-
|
187 |
-
## 3.4.2.3
|
188 |
-
* Fixed: #2019 - Reset issues with PHP 5.2. Thanks a bunch, @Webcreations907!
|
189 |
-
|
190 |
-
## 3.4.2.2
|
191 |
-
* Fixed: #2023: Issue with custom submenus in menu.
|
192 |
-
|
193 |
-
## 3.4.2.1
|
194 |
-
* Fixed: #2025: Issue with select sorting.
|
195 |
-
|
196 |
-
## 3.4.2
|
197 |
-
* Update: ACE Editor. Thanks @corradomatt.
|
198 |
-
|
199 |
-
## 3.4.1
|
200 |
-
* Fixed: Small filesystem option with bad filter key reference.
|
201 |
-
* Added: Small return if $section filter returned the section empty.
|
202 |
-
|
203 |
-
## 3.4.0
|
204 |
-
* WP.org Release
|
205 |
-
|
206 |
-
## 3.3.10.7
|
207 |
-
* Fixed: Reset section hook firing too early.
|
208 |
-
|
209 |
-
## 3.3.10.6
|
210 |
-
* Modified: The Redux Repeater field has landed!
|
211 |
-
|
212 |
-
## 3.3.10.5
|
213 |
-
* Fixed: #1983 - color_rgba not outputting default values on first load (before save).
|
214 |
-
|
215 |
-
## 3.3.10.4
|
216 |
-
* Fixed: Google font enqueues with opt_name to avoid collision with multiple Redux instances.
|
217 |
-
|
218 |
-
## 3.3.10.3
|
219 |
-
* Fixed: #1980 - JS errors with sorter & sortable.
|
220 |
-
* Fixed: color_rgba field outputting incorrect information via output/compiler.
|
221 |
-
|
222 |
-
## 3.3.10.2
|
223 |
-
* Fixed: #1979 - Goole fonts not properly loading in typography dropdown.
|
224 |
-
|
225 |
-
## 3.3.10.1
|
226 |
-
* Fixed: Undefined index error on MU installs.
|
227 |
-
|
228 |
-
## 3.3.10
|
229 |
-
* Removed: SASS compile of field CSS, for the time being. Compiler remains in core.
|
230 |
-
* Improved: Panel load time, most notable when not in dev_mode. Better for your clients. :)
|
231 |
-
* Updated: Elusive Font library.
|
232 |
-
* Fixed: #1961 - color_rgba field defaulting to black on reset.
|
233 |
-
|
234 |
-
## 3.3.9.35
|
235 |
-
* Fixed: #1941 - Datepicker opened off screen.
|
236 |
-
* Fixed: #1756, #1957 - Slider issues. Thanks @FFIN!
|
237 |
-
* Fixed: #1960 - Duplicate slide when clicking Add. Again, thanks to @FFIN for the fix.
|
238 |
-
* Added: New filter: apply_filters 'redux/validate/{opt_name}/before_validation'
|
239 |
-
* Fixed: #1745 - Adding settings submenu to empty submenu now works. Many, many thanks to @No3x for cracking this one!
|
240 |
-
|
241 |
-
## 3.3.9.34
|
242 |
-
* Fixed: #1955 - Undefined index rgba in output routine.
|
243 |
-
|
244 |
-
## 3.3.9.33
|
245 |
-
* Modified: #1947 - Added display:none to TR tag under info field.
|
246 |
-
|
247 |
-
## 3.3.9.32
|
248 |
-
* Replaced: #1951 - Replaced develop branch of scssphp to master branch due to PHP 5.2 incompatibililty.
|
249 |
-
|
250 |
-
## 3.3.9.31
|
251 |
-
* Fixed: #1943 - Removed premature DIV close.
|
252 |
-
* Fixed: #1945 - Media preview not rendering when default ID specified.
|
253 |
-
|
254 |
-
## 3.3.9.30
|
255 |
-
* Modified: #1930 - reorder 'psedo-class of link_color field. Thanks @freddessaint
|
256 |
-
* Modified: SASS compiler outputs to page by default. Faster.
|
257 |
-
* Fixed: #1927 - Incorrect dir path to spectrum library in color_rgba field corrected.
|
258 |
-
|
259 |
-
## 3.3.9.29
|
260 |
-
* Modified: color_rgba field now usees spectrum color picker. minicolors removed. Just...too buggy.
|
261 |
-
|
262 |
-
## 3.3.9.28
|
263 |
-
* Modified: #1922 - Filesystem output function.
|
264 |
-
|
265 |
-
## 3.3.9.27
|
266 |
-
* Fixed: Added PHP 5.2 support (ugh!) for SASS compiler.
|
267 |
-
|
268 |
-
## 3.3.9.26
|
269 |
-
* Fixed: More SASS compiler tweaking.
|
270 |
-
|
271 |
-
## 3.3.9.25
|
272 |
-
* Fixed: PHP errors when disabling SASS.
|
273 |
-
|
274 |
-
## 3.3.9.24
|
275 |
-
* Fixed #1909 - malformed DIV class HTML in slider field.
|
276 |
-
|
277 |
-
## 3.3.9.23
|
278 |
-
* Removed Argument for SASS compile file output location removed. Didn't work, too much trouble.
|
279 |
-
|
280 |
-
## 3.3.9.22
|
281 |
-
* Fixed: #1904 - select_image field not displaying saved value on page reload.
|
282 |
-
|
283 |
-
## 3.3.9.21
|
284 |
-
* Fixed: SASS compile under multi-instance outputting incorrect CSS file
|
285 |
-
|
286 |
-
## 3.3.9.20
|
287 |
-
* Fixed: redux-admin scss images converted to base64
|
288 |
-
|
289 |
-
## 3.3.9.17
|
290 |
-
* Added SASS compiler for admin CSS.
|
291 |
-
* Added SASS to CSS for grunt compiler.
|
292 |
-
|
293 |
-
## 3.3.9.16
|
294 |
-
* Added SASS compiler for fields.
|
295 |
-
|
296 |
-
## 3.3.9.16
|
297 |
-
* Updated: select2 3.5.2
|
298 |
-
|
299 |
-
## 3.3.9.15
|
300 |
-
* Fixed: #1856 - Illegal offset string warnings in framework.php. Thanks @CGlingener.
|
301 |
-
* Fixed: #1874 - Required operator 'contains' and 'not_contains' not working with select set to multi.
|
302 |
-
* Fixed: #1829 - Required operator '=' and '!=' not working with select set to multi.
|
303 |
-
|
304 |
-
## 3.3.9.14
|
305 |
-
* Fixed: #1870 - Border field doubling up on px in output/compiler.
|
306 |
-
* Added: `hidden` argument for fields.
|
307 |
-
* Added: `hidden` argument for sections.
|
308 |
-
|
309 |
-
## 3.3.9.12
|
310 |
-
* Fixed: #1868 - Improper panel render when opening expanded, when `open_expanded` set to true.
|
311 |
-
* Added: `hide_expand` argument, to hide the expand options button.
|
312 |
-
|
313 |
-
## 3.3.9.11
|
314 |
-
* Fixed: #1865 - Sortable select not saving proper order.
|
315 |
-
* Fixed: #1864 - Footer z-index CSS adjusted.
|
316 |
-
|
317 |
-
## 3.3.9.10
|
318 |
-
* Fixed: #1848 - Import-export filed buttons not functioning properly.
|
319 |
-
|
320 |
-
## 3.3.9.9
|
321 |
-
* Fixed: #1834 - Wordpress data dealing with IDs as array keys not rendering properly.
|
322 |
-
* Fixed: #1830 - Font lists were added in quotes. Thanks @karimhossenbux.
|
323 |
-
|
324 |
-
## 3.3.9.8
|
325 |
-
* Fixed: #1798 - Fixed lazy load JS to only load visible sections. Much more optimized.
|
326 |
-
|
327 |
-
## 3.3.9.7
|
328 |
-
* Fixed: #1821 - Exo 2 font not working, issue with typography and escaping.
|
329 |
-
|
330 |
-
## 3.3.9.6
|
331 |
-
* Added: #1803 - Optgroup support for select field.
|
332 |
-
|
333 |
-
## 3.3.9.5
|
334 |
-
* Added: Decimal increments to spinner.
|
335 |
-
|
336 |
-
## 3.3.9.4
|
337 |
-
* Added: Customizer now supports PANEL! Yay 4.0.
|
338 |
-
|
339 |
-
## 3.3.9.3
|
340 |
-
* Fixed: #1789 - Customizer now properly working again with WP 4.0. Odd bug.
|
341 |
-
* Modified: README.md updates as per @cmwwebfx suggestions.
|
342 |
-
|
343 |
-
## 3.3.9.2
|
344 |
-
* Fixed: #1782 - Fixed some extra themecheck and customizer issues.
|
345 |
-
|
346 |
-
## 3.3.9.1
|
347 |
-
* Fixed: #1782 - Media field not showing files after upload? Hopefully this fixes it.
|
348 |
-
|
349 |
-
## 3.3.9
|
350 |
-
* Fixed: #1775 - Call to undefined function is_customize_preview() in pre WP 4.0.
|
351 |
-
* Fixed: Issue where in some cases tracking still occuring after opt-out.
|
352 |
-
* Modified: Documentation URL.
|
353 |
-
|
354 |
-
## 3.3.8.8
|
355 |
-
* Fixed: #1742 - Sidebar subsections don't always expand.
|
356 |
-
|
357 |
-
## 3.3.8.7
|
358 |
-
* Fixed: #1758 - Thanks @echo1consulting!
|
359 |
-
* Added: 'hidden' to menu_type argument to allow for hidden menus until available.
|
360 |
-
|
361 |
-
## 3.3.8.6
|
362 |
-
* Fixed: #1749 - Remove font-wight and font-style from css output when not in use.
|
363 |
-
|
364 |
-
## 3.3.8.5
|
365 |
-
* Modified: Added the "redux/options/{$this->args['opt_name']}/compiler/advanced" hook for more advanced compiling.
|
366 |
-
* Added: Suggestions as per #1709. Thanks @echo1consulting.
|
367 |
-
|
368 |
-
## 3.3.8.4
|
369 |
-
* Modified: Removed a cURL instance from the core and fixed the developer ad resizing.
|
370 |
-
* Fixed: PHP 5.2 issues. *sigh*
|
371 |
-
|
372 |
-
## 3.3.8.3
|
373 |
-
* Added: #1593 - Great pull request by @JonasDoebertin. Now you can enqueue dynamic output to the login screen or admin backend.
|
374 |
-
|
375 |
-
## 3.3.8.2
|
376 |
-
* Fixed: Customizer wasn't saving at all! That's been like 4 months. No one's reported it. Hmm.
|
377 |
-
* Fixed: #1702 - Customizer only fields were being erased on panel save.
|
378 |
-
|
379 |
-
## 3.3.8.1
|
380 |
-
* Fixed: Various Theme-Check errors with languages.
|
381 |
-
* Added: Theme-Check class to help devs know what is what.
|
382 |
-
* Fixed: The way we include files from include_once to require_once everywhere.
|
383 |
-
* Modified: Language files to reflect new strings.
|
384 |
-
* Modified: Formatted a bunch of old class files.
|
385 |
-
* Added: Notice on the updates for non-devs to use the new dev_mode disabler plugin and notify their developer. ;)
|
386 |
-
|
387 |
-
## 3.3.8
|
388 |
-
* Modified: Updated potomo, thanks @shivapoudel.
|
389 |
-
* Added: Grunt checktextdomain and made improvements. Thanks @shivapoudel.
|
390 |
-
|
391 |
-
## 3.3.7.11
|
392 |
-
* Modified: #1685 - Specifying no default argument for image_select caused errors on reset.
|
393 |
-
|
394 |
-
## 3.3.7.10
|
395 |
-
* Fixed: #1667 - Slides Upload button causing JS error.
|
396 |
-
|
397 |
-
## 3.3.7.9
|
398 |
-
* Fixed: #1670 - Fix for Theme Check -> `add_setting() method needs to have a sanitization callback function passed.`
|
399 |
-
|
400 |
-
## 3.3.7.8
|
401 |
-
* Fixed: #1661 - Fix for undefined index in some versions of PHP. Thanks @gianbalex!
|
402 |
-
* Modified: #1658 - Improvements from @shivapoudel, including:
|
403 |
-
* Removed makepot and used grunt-wp-i18n instead.
|
404 |
-
* Added a jshintrc file
|
405 |
-
* Added a `grunt addtextdomain` to correct any bad textdomains in the core.
|
406 |
-
* Updated .gitignore for better readability
|
407 |
-
* Updates to a few other files including package.json.
|
408 |
-
* Updated language files.
|
409 |
-
* Update codestyles/.editorconfig to reflect the project's standards.
|
410 |
-
|
411 |
-
## 3.3.7.7
|
412 |
-
* Modified: #1653 - Better admin bar with external links: Admin bar menu priority, icon, and external links. Thanks @shivapoudel!
|
413 |
-
|
414 |
-
## 3.3.7.6
|
415 |
-
* Added: #1651 - `library_filter` argument. Allows specification of what files to display in the media library.
|
416 |
-
* Modified: #1651 - `mode` argument accepts either file type or mime type (but not both).
|
417 |
-
|
418 |
-
## 3.3.7.5
|
419 |
-
* Fixed: #1650 - Toogle error with responsive CSS.
|
420 |
-
|
421 |
-
## 3.3.7.4
|
422 |
-
* Fixed: #1643 - Slight border issue (2px) on sticky footer.
|
423 |
-
|
424 |
-
## 3.3.7.3
|
425 |
-
* Fixed: #1642 - Added `font_family_clear` arg, enabling the clear option for font-family.
|
426 |
-
* Fixed: #1638 - Spacing field not outputting when units values attached to default values.
|
427 |
-
* Modified #1644 - `import_icon` argument now accepts wordpress dashicons
|
428 |
-
|
429 |
-
## 3.3.7.2
|
430 |
-
* Fixed: #1634 - Double border for sections field. Thanks @AlexandruDoda
|
431 |
-
* Modified: Changelog location to now Changelog.md.
|
432 |
-
|
433 |
-
## 3.3.7.1
|
434 |
-
* Fixed: #1632 - Sortable with no defaults set revert to false (instead of options values).
|
435 |
-
* Fixed: Labels for sortable in text mode updated to match framework.
|
436 |
-
|
437 |
-
## 3.3.7
|
438 |
-
* Added: #1586 - Class-level declaration for callbacks and validation. Thanks @echo1consulting.
|
439 |
-
* Modified: Typography field now fully dynamic.
|
440 |
-
* Modified: No longer require a google_api_key for the typography module. :)
|
441 |
-
* Fixed: FTP credentials screen giving a "undefined submit_button function". Resolved.
|
442 |
-
* Modified: #1628 - Spacing and dimensions now only output 0 if the entry is a 0, not empty.
|
443 |
-
Thanks @Webcreations907
|
444 |
-
* Modified: CSS for menu items when active (no hover).
|
445 |
-
* Added: Visual feedback to left menu if active.
|
446 |
-
|
447 |
-
## 3.3.6.9
|
448 |
-
* Fixed: #1623 - Registered older noUISlider JS under a new name to avoid conflicts.
|
449 |
-
* Modified: #1622 - Removed googlefonts.js dependency.
|
450 |
-
|
451 |
-
## 3.3.6.8
|
452 |
-
* Fixed: #1600 - ACE Editor bombing in PHP 5.2 environments.
|
453 |
-
|
454 |
-
## 3.3.6.7
|
455 |
-
* Fixed: #1591 - Erroneous outputting of font-weight and font-style when no font-family selected.
|
456 |
-
* Updated: #1569 - Improved submenu highlighting.
|
457 |
-
* Added: #1487 - Added `get_default_value` function into the framework.php
|
458 |
-
|
459 |
-
## 3.3.6.6
|
460 |
-
* Fixed: Framework URI errors when using child themes. Some restructuring.
|
461 |
-
|
462 |
-
## 3.3.6.5
|
463 |
-
* Fixed: Framework URI errors when embedded in theme with Windows.
|
464 |
-
|
465 |
-
## 3.3.6.4
|
466 |
-
* Added: image_size as an option for the data argument. Thanks @Gyroscopic!
|
467 |
-
|
468 |
-
## 3.3.6.3
|
469 |
-
* Modified: How Redux paths are run. Should cover all use cases now. Child themes can also embed
|
470 |
-
Redux properly now. Thanks @cfoellmann for the suggestions. Fix for issue #1566.
|
471 |
-
|
472 |
-
## 3.3.6.2
|
473 |
-
* Modified: How we declare the uploads directory and URL. Using core WP functions now.
|
474 |
-
|
475 |
-
## 3.3.6.1
|
476 |
-
* Modified: Now if a section is empty, but has subsections, that section will be "skipped" when
|
477 |
-
clicked and the first subsection will then be shown.
|
478 |
-
|
479 |
-
## 3.3.6
|
480 |
-
* Modified: Language files.
|
481 |
-
* Fixed: #1560 - IE8 RGBA fallack
|
482 |
-
|
483 |
-
## 3.3.5.12
|
484 |
-
* Fixed: #1543 - Hint icon not changing when set in args.
|
485 |
-
|
486 |
-
## 3.3.5.11
|
487 |
-
* Fixed: #1537 - Media field not accepting images with mode set to false.
|
488 |
-
|
489 |
-
## 3.3.5.10
|
490 |
-
* Fixed: #1529 - ACE Editor conflict with Visual Composer.
|
491 |
-
* Added: #1530 - Added argument to specify admin bar icon, `admin_bar_icon`. Thanks Ninos!
|
492 |
-
* Fixed: #1532 - Media field not accepting any mime type when `'mode' => false`.
|
493 |
-
|
494 |
-
## 3.3.5.9
|
495 |
-
* Fixed: #1520 - Checkbox field not displaying Wordpress data when using data argument.
|
496 |
-
|
497 |
-
## 3.3.5.8
|
498 |
-
* Fixed: #1516 - Invalid index and foreach when using compiler and async_typography.
|
499 |
-
|
500 |
-
## 3.3.5.7
|
501 |
-
* Fixed: #1509 - Sorter adding unnecessary bits on some items.
|
502 |
-
* Fixed: #1514 - Customizer and multisite not getting on properly.
|
503 |
-
* Fixed: #1512 - Slides 'Upload' button not showing or saving selected image.
|
504 |
-
|
505 |
-
## 3.3.5.6
|
506 |
-
* Fixed: Checkboxes with required were working in reverse.
|
507 |
-
|
508 |
-
## 3.3.5.5
|
509 |
-
* Fixed: ASync Typography now works! No more flashing fonts.
|
510 |
-
|
511 |
-
## 3.3.5.4
|
512 |
-
* Fixed: #1489 - Color picker UI lining up improperly.
|
513 |
-
* Fixed: #1497 - dev_mode spinner issue.
|
514 |
-
|
515 |
-
## 3.3.5.3
|
516 |
-
* Fixed: Spelling error in tracking dialog.
|
517 |
-
* Modified: Updated ace_editor.
|
518 |
-
* Modified: Many MANY fields for the group field.
|
519 |
-
* Fixed: Some CSS bugs.
|
520 |
-
|
521 |
-
## 3.3.5.2
|
522 |
-
* Fixed: #1481 - Custom fonts loading in google font CSS.
|
523 |
-
* Fixed: #1485 - Customizer 'invalid argument' error. Thanks @rnlmedia.
|
524 |
-
|
525 |
-
## 3.3.5.1
|
526 |
-
* Fixed: #1472 - font style not displaying saved valie with no font-family argument set.
|
527 |
-
* Fixed: #1471 - raw field and required not playing nice together.
|
528 |
-
|
529 |
-
## 3.3.5
|
530 |
-
* Added: An annoying notice at the top so our devs don't ship with dev_mode on. ;)
|
531 |
-
|
532 |
-
## 3.3.4.9
|
533 |
-
* Fixed: #1462 - Google fonts not loading in font drop down.
|
534 |
-
|
535 |
-
## 3.3.4.8
|
536 |
-
* Fixed: More WP FileSystem tanking. Did PHP fallback before FTP. Works 99.9% of the time without credentials.
|
537 |
-
|
538 |
-
## 3.3.4.7
|
539 |
-
* Fixed: Incorrect folder CHMOD in filesystem class.
|
540 |
-
|
541 |
-
## 3.3.4.6
|
542 |
-
* Fixed: #1454 - Chmod permissions for redux folder.
|
543 |
-
|
544 |
-
## 3.3.4.5
|
545 |
-
* Fixed: #1451 - Googlefonts not loading due to failing copy function.
|
546 |
-
|
547 |
-
## 3.3.4.4
|
548 |
-
* Fixed: #1450 - Saves witch values with no `on` or `off` args make the core unhappy.
|
549 |
-
|
550 |
-
## 3.3.4.3
|
551 |
-
* Fixed: #1444, again, due to filesystem growing pains.
|
552 |
-
* Fixed: #1449 - Restoring `options` argument over a lousy attempt to fix placeholder.
|
553 |
-
|
554 |
-
## 3.3.4.2
|
555 |
-
* Fixed: More file permission issues.
|
556 |
-
|
557 |
-
## 3.3.4.1
|
558 |
-
* Fixed: Font debug was left from last commit. Sorry all.
|
559 |
-
|
560 |
-
## 3.3.3.8
|
561 |
-
* Fixed: Issues with file writing. Basically many users don't install WordPress with all the permissions correct.
|
562 |
-
So... Had to move it back to /uploads/. Sorry Otto, that's just how it is.
|
563 |
-
* Fixed: #1444 - output of typography all_styles when font_style UI was hidden.
|
564 |
-
|
565 |
-
## 3.3.3.7
|
566 |
-
* Fixed: #1440 - flaw in new cleanFilePath logic.
|
567 |
-
|
568 |
-
## 3.3.3.6
|
569 |
-
* Fixed: #1432 - Theme check failing when double-slashes existed in get_template_directory() return.
|
570 |
-
* Removed: curlRead from helper class.
|
571 |
-
|
572 |
-
## 3.3.3.5
|
573 |
-
* Fixed: #1426 - menu_name not appearing on front end admin bar.
|
574 |
-
* Added: #1427 - button_set added to customizer UI. Thanks @wpexplorer.
|
575 |
-
|
576 |
-
## 3.3.3.4
|
577 |
-
* Fixed: #1429 - ACE Editor erroring with no default value set.
|
578 |
-
* Fixed: wp_filesystem now initialized with credentials in an effort to combat the tmp file issue.
|
579 |
-
|
580 |
-
## 3.3.3.3
|
581 |
-
* Modified: Code purification.
|
582 |
-
|
583 |
-
## 3.3.3.2
|
584 |
-
* Modified: How section tabs work. Isolated within the redux-container class.
|
585 |
-
|
586 |
-
## 3.3.3
|
587 |
-
* Modified: #1412 - Redesigned text label, placeholder fix.
|
588 |
-
|
589 |
-
## 3.3.2.10
|
590 |
-
* Fixed: #1408 & #1357 - Typography subsets losing value after multiple saves
|
591 |
-
on other panels.
|
592 |
-
|
593 |
-
## 3.3.2.9
|
594 |
-
* Fixed: #1403 - unit value no longer prints after empty typography values
|
595 |
-
* Modified: Typography: Backup font no longer appends to `font-family` variable.
|
596 |
-
Please use the `backup-font` variable to specify backup fonts. This
|
597 |
-
does not apply to output/compiler strings.
|
598 |
-
|
599 |
-
## 3.3.2.8
|
600 |
-
* Fixed: #1403 - Backup font not appearing in font-family variable.
|
601 |
-
|
602 |
-
## 3.3.2.7
|
603 |
-
* Modified: Customizer now supports section and field `permissions` argument.
|
604 |
-
* Fixed: #1399 - Customizer respects `page_permissions` argument.
|
605 |
-
|
606 |
-
## 3.3.2.6
|
607 |
-
* Fixed: #1400 - output/compiler string incomplete using multiple selectors.
|
608 |
-
|
609 |
-
## 3.3.2.5
|
610 |
-
* Fixed: #1396 - Custom fonts cutting off multiple families in selector, after save.
|
611 |
-
* Fixed: Typography attempting to queue up non google fonts on backend.
|
612 |
-
* Added: #1395 - Display of child theme status in sysinfo, thanks @SiR-DanieL.
|
613 |
-
|
614 |
-
## 3.3.2.4
|
615 |
-
* Fixed: #1387 - Page jump when clicking "Options Object". Thanks @rrikesh.
|
616 |
-
* Added: #1392 - Filters to change the following localized strings:
|
617 |
-
redux/{opt_name}/localize/reset
|
618 |
-
redux/{opt_name}/localize/reset_all
|
619 |
-
redux/{opt_name}/localize/save_pending
|
620 |
-
redux/{opt_name}/localize/preset
|
621 |
-
|
622 |
-
## 3.3.2.3
|
623 |
-
* Fixed: #1376 - checkbox.min.js missing.
|
624 |
-
|
625 |
-
## 3.3.2.2
|
626 |
-
* Fixed: Static variable changes for instances and basic comment cleanup
|
627 |
-
|
628 |
-
## 3.3.2.1
|
629 |
-
* Fixed: #1361 - Raw field not hiding with required.
|
630 |
-
* Fixed: Datepicker not formatting properly. Still needs some work.
|
631 |
-
|
632 |
-
## 3.3.1.9
|
633 |
-
* Fixed: #1357 - Preview not rendering font on page load.
|
634 |
-
|
635 |
-
## 3.3.1.8
|
636 |
-
* Fixed: #1356 - Color fields and transparency not syncing due to new JS.
|
637 |
-
|
638 |
-
## 3.3.1.7
|
639 |
-
* Fixed: #1354 - Add class check for W3_ObjectCache.
|
640 |
-
|
641 |
-
## 3.3.1.6
|
642 |
-
* Fixed: #1341 - JS not initializing properly in import_export.
|
643 |
-
|
644 |
-
## 3.3.1.5
|
645 |
-
* Fixed: #1339 - Typography would lose Font Weight and Style. value was
|
646 |
-
named val in the HTML, so it would be destroyed on the next save
|
647 |
-
if not initialized.
|
648 |
-
|
649 |
-
## 3.3.1.4
|
650 |
-
* Fixed: #1226 - W3 Total Cache was affecting validation and compiler hooks.
|
651 |
-
* Fixed: Menu errors weren't showing properly for non-subsectioned items.
|
652 |
-
|
653 |
-
## 3.3.1.3
|
654 |
-
* Fixed: #1341 - Import/Export buttons not functioning. Also fixed sortable somehow.
|
655 |
-
|
656 |
-
## 3.3.1.2
|
657 |
-
* Fixed: Slides not initializing with the last fix.
|
658 |
-
|
659 |
-
## 3.3.1.1
|
660 |
-
* Fixed: Slides field was not properly initialized for the media elements. Fixed.
|
661 |
-
|
662 |
-
## 3.3.0.6
|
663 |
-
* Fixed: #1337 - `redux` JS dependency loading issue. Many thanks @tpaksu
|
664 |
-
|
665 |
-
## 3.3.0.5
|
666 |
-
* Modified: Drastically changed the way JavaScript is used in the panel. Forced as-needed
|
667 |
-
initialization of fields. Thus reducing dramatically the overall load time of
|
668 |
-
the panel. The effects have been seen up to 300% speed improvement. The only
|
669 |
-
time a field will be initialized is if it's visible, thus reducing the processing
|
670 |
-
needed in DOM overall.
|
671 |
-
|
672 |
-
## 3.3.0.4
|
673 |
-
* Fixed: #1336 - fixed default font in preview.
|
674 |
-
|
675 |
-
## 3.3.0.3
|
676 |
-
* Fixed: #1334 - Typography not un-saving italics.
|
677 |
-
|
678 |
-
## 3.3.0.2
|
679 |
-
* Added: #1332 - New validation: numeric_not_empty.
|
680 |
-
|
681 |
-
## 3.3.0.1
|
682 |
-
* Fixed: #1330 - Required not working on all fields.
|
683 |
-
|
684 |
-
## 3.3.0
|
685 |
-
* Added: #1329 - `'preview' = array('always_display' => true)` argument to typography, to determine if preview field show always be shown.
|
686 |
-
|
687 |
-
## 3.2.9.38
|
688 |
-
* Fixed: #1322 - Sections not folding with required argument.
|
689 |
-
* Modified: Portions of core javascript rewritten into object code.
|
690 |
-
|
691 |
-
## 3.2.9.37
|
692 |
-
* Fixed: #1270 - Editor field compiler hook not firing in visual mode.
|
693 |
-
|
694 |
-
## 3.2.9.36
|
695 |
-
* Added: `hide_reset` argument, to hide the Reset All and Reset Section buttons.
|
696 |
-
|
697 |
-
## 3.2.9.35
|
698 |
-
* Fixed: select2 dependency in select_image, and other fields.
|
699 |
-
|
700 |
-
## 3.2.9.34
|
701 |
-
* Fixed: Filter out `@eaDir` directories in extensions folder.
|
702 |
-
* Added: `content_title` argument to slides field. Thanks @psaikali!
|
703 |
-
|
704 |
-
## 3.2.9.33
|
705 |
-
* Fixed: Fixed the image_select presets to work again. Also now will function even if import/export is disabled.
|
706 |
-
|
707 |
-
## 3.2.9.32
|
708 |
-
* Fixed: Minor tweaks for metabox update.
|
709 |
-
|
710 |
-
## 3.2.9.31
|
711 |
-
* Fixed: #1297 - Missing space in image_select class.
|
712 |
-
* Fixed: Slider field tweaked for metaboxes.
|
713 |
-
|
714 |
-
## 3.2.9.30
|
715 |
-
* Fixed: #1291 - Change of font-family would not trigger preview, or show in open preview.
|
716 |
-
|
717 |
-
## 3.2.9.29
|
718 |
-
* Fixed: #1289 - Typography not retaining size/height/spacing/word/letter spacing settings.
|
719 |
-
|
720 |
-
## 3.2.9.28
|
721 |
-
* Fixed: #1288 - Background color-picker dependency missing. Thanks @farhanwazir.
|
722 |
-
|
723 |
-
## 3.2.9.27
|
724 |
-
* Fixed: Search extension failed do to dependency issue from the core.
|
725 |
-
|
726 |
-
## 3.2.9.26
|
727 |
-
* Fixed: #1281 - color field output/compiler outputting incorrect selector when only one array present.
|
728 |
-
|
729 |
-
## 3.2.9.25
|
730 |
-
* Fixed: Update check only appears once if multiple instances of Redux are loaded in the same wordpress instance.
|
731 |
-
|
732 |
-
## 3.2.9.24
|
733 |
-
* Fixed: Changing font-family in typography didn't trigger 'save changes' notification.
|
734 |
-
* Fixed: More typography: Back up font appearing in font-family when opening selector.
|
735 |
-
* Fixed: Typography: undefined message when NOT using google fonts. Thanks @farhanwazir
|
736 |
-
|
737 |
-
## 3.2.9.23
|
738 |
-
* Added: `customizer_only` argument for fields & sections, contributed by @andreilupu.
|
739 |
-
|
740 |
-
## 3.2.9.22
|
741 |
-
* Fixed: Typography font backup not in sync with font-family.
|
742 |
-
* Fixed: Typography not saving font-family after switching back and forth between standard
|
743 |
-
and google fonts.
|
744 |
-
* Fixed: Background field selects not properly aligned.
|
745 |
-
|
746 |
-
## 3.2.9.21
|
747 |
-
* Added: select2 args for spacing field.
|
748 |
-
* Modified: All field javascript rewritten using jQuery objects (versus standard function).
|
749 |
-
Prepping for another crack at group field.
|
750 |
-
|
751 |
-
## 3.2.9.20
|
752 |
-
* Added: select2 args for the following fields: typography, background, border, dimensions and slider.
|
753 |
-
* Fixed: Removed select field dependency from background field.
|
754 |
-
|
755 |
-
## 3.2.9.19
|
756 |
-
* Fixed: #1264 - Color-picker/transparent checkbox functionality.
|
757 |
-
* Fixed: Typography fine-tuning.
|
758 |
-
|
759 |
-
## 3.2.9.18
|
760 |
-
* Modified: Typography field rewritten to fill out font-family field dynamically, versus on page load.
|
761 |
-
* Fixed: All typography select fields render as select2.
|
762 |
-
|
763 |
-
## 3.2.9.17
|
764 |
-
* Fixed: Switching between transparency on and off now restores the last chosen color in
|
765 |
-
all color fields.
|
766 |
-
|
767 |
-
## 3.2.9.16
|
768 |
-
* Fixed: Redux uploads dir should NOT be ~/wp-content/uploads, but just wp-content.
|
769 |
-
As per Otto.
|
770 |
-
* Fixed: Navigation no longer has that annoying outline around the links. Yuk.
|
771 |
-
|
772 |
-
## 3.2.9.15
|
773 |
-
* Fixed: #1218 - Select2 multi select not accepting any keyboard input.
|
774 |
-
|
775 |
-
## 3.2.9.14
|
776 |
-
* Fixed: #1228 - CSS fixes
|
777 |
-
|
778 |
-
## 3.2.9.13
|
779 |
-
* Fixed: #1255 - button_set multi field not saving when all buttons not selected.
|
780 |
-
|
781 |
-
## 3.2.9.12
|
782 |
-
* Fixed: #1254 - Border field with 0px not outputting properly.
|
783 |
-
* Fixed: #1250 - Typography preview font-size not set in preview.
|
784 |
-
* Fixed: #1247 - Spacing field not outputting properly in `absolute` mode.
|
785 |
-
* Modified: Typography previewing hidden until font inputs are changed.
|
786 |
-
|
787 |
-
## 3.2.9.11
|
788 |
-
* Fixed: Vendor js not loading properly when dev_mode = true
|
789 |
-
* Fixed: Border field not outputting properly.
|
790 |
-
|
791 |
-
## 3.2.9.10
|
792 |
-
* Modified: Centralized import/export code in anticipation of new builder features.
|
793 |
-
* Fixed: Removed rogue echo statement.
|
794 |
-
|
795 |
-
## 3.2.9.9
|
796 |
-
* Modified: select2 loads only when a field requires it.
|
797 |
-
|
798 |
-
## 3.2.9.8
|
799 |
-
* Modified: More code to load JS on demand for fields require it.
|
800 |
-
|
801 |
-
## 3.2.9.7
|
802 |
-
* Modified: Field specific JS only loads with active field.
|
803 |
-
* Fixed: Hints stopped working due to classname change.
|
804 |
-
|
805 |
-
## 3.2.9.6
|
806 |
-
* Fixed: Permissions argument on section array not filtering out raw field.
|
807 |
-
|
808 |
-
## 3.2.9.5
|
809 |
-
* Fixed: Too many CSS tweaks to list, due to last build.
|
810 |
-
* Fixed: Sortable and Sorter fields now sort without page scroll when page size is
|
811 |
-
under 782px.
|
812 |
-
* Fixed: Hint icon defaults to left position when screen size is under 782px.
|
813 |
-
* Fixed: `permissions` argument for fields and sections erasing saved field data. See #1231
|
814 |
-
|
815 |
-
## 3.2.9.4
|
816 |
-
* Modified: Woohoo! Nearly fully responsive. Yanked out all SMOF and NHP field customizations.
|
817 |
-
Lots of little fixes on all browser screens. This will also greatly benefit Metaboxes
|
818 |
-
and other areas of Redux.
|
819 |
-
* Fixed: In dev_mode panel CSS was being loaded 2x.
|
820 |
-
|
821 |
-
## 3.2.9.3
|
822 |
-
* Fixed: Typography color picker bleeding under other elements. #1225
|
823 |
-
* Fixed: Hint icon_color index error from builder. #1222
|
824 |
-
|
825 |
-
## 3.2.9.2
|
826 |
-
* Fixed: Tracking. It was... odd. Also started our support hooks, UI to come.
|
827 |
-
* Fixed: Now import/export supports multiple instances. I can't believe this has been this way for so long.
|
828 |
-
|
829 |
-
## 3.2.9.1
|
830 |
-
* Fixed: Spacing field not outputting proper CSS when `mode` was set to absolute, and `all` was set to true.
|
831 |
-
* Fixed: CSS fix for typography. Color picker would interfere with save/reset bar.
|
832 |
-
|
833 |
-
## 3.2.8.21
|
834 |
-
* Added: Network admin support! Set argument 'database' to network and data will be saved site-wide.
|
835 |
-
Also two new arguments: network_admin & network_sites for where to show the panel.
|
836 |
-
|
837 |
-
## 3.2.8.20
|
838 |
-
* Fixed: Redux now ignores any directories that begin with `.` in the extension folder. See #1213.
|
839 |
-
|
840 |
-
## 3.2.8.19
|
841 |
-
* Fixed: Redux not saving when validating uploads.
|
842 |
-
* Modified: Dimension field default now accepts either `units` or `unit`.
|
843 |
-
|
844 |
-
## 3.2.8.18
|
845 |
-
* Fixed: Border field output/compiler formatting. Removed 'inherit' in place of default values. See #1208.
|
846 |
-
* Fixed: Trim() warning in framework.php when saving. See #1209, #1201.
|
847 |
-
|
848 |
-
## 3.2.8.17
|
849 |
-
* Fixed: Typography not outputting all styles when `all_styles` set to true.
|
850 |
-
|
851 |
-
## 3.2.8.16
|
852 |
-
* Added: `output` argument for `color` and `color_rgba` fields accepts key/pairs for different modes. Example:
|
853 |
-
```
|
854 |
-
'output' => array('color' => '.site-title, .site-header', 'background-color' => '.site-background')
|
855 |
-
```
|
856 |
-
|
857 |
-
## 3.2.8.15
|
858 |
-
* Added: Customizer hook that can be used to simulate the customizer for live preview in the customizer.
|
859 |
-
`redux/customizer/live_preview`
|
860 |
-
|
861 |
-
## 3.2.8.14
|
862 |
-
* Fixed: 'Cannot send header' issues with typography.
|
863 |
-
* Modified: Google CSS moved into HEAD via WP enqueue.
|
864 |
-
|
865 |
-
## 3.2.8.13
|
866 |
-
* Added: `class` argument to the Redux Arguments, section array, and metabox array. If set, a class will be
|
867 |
-
appended to whichever level is used. This allows further customization for our users.
|
868 |
-
|
869 |
-
## 3.2.8.12
|
870 |
-
* Fixed: Small fix for validation if subsection parent is free of errors, remove the red highlight when
|
871 |
-
not expanded.
|
872 |
-
* Fixed: Small CSS classes for flashing fonts where web-font-loader.
|
873 |
-
* Fixed: ASync Flash on fonts. FINALLY. What a pain.
|
874 |
-
* Modified: Now do a trim on all fields before validating. No need to alert because of a space...
|
875 |
-
|
876 |
-
## 3.2.8.11
|
877 |
-
* Modified: Typography field CSS completely rewritten. All thanks to @eplanetdesign!
|
878 |
-
* Modified: Validation now works in metaboxes as well as updates numbers as changes occur. Validation for
|
879 |
-
subsections is SO hot now.
|
880 |
-
* Modified: Various CSS fixes and improvements.
|
881 |
-
* Fixed: 3+ JavaScript errors found in the background field. Now works flawlessly.
|
882 |
-
* Added: disable_save_warn flags to the arguments to disable the "you should save" slidedown.
|
883 |
-
|
884 |
-
## 3.2.8.10
|
885 |
-
* Fixed: PHP warnings in background field. #1173. Thanks, @abossola.
|
886 |
-
* Fixed: CSS validation not respecting child selector symbol. #1162
|
887 |
-
|
888 |
-
## 3.2.8.9
|
889 |
-
* Modified: Turned of mod_rewrite check.
|
890 |
-
|
891 |
-
## 3.2.8.8
|
892 |
-
* Modified: How errors are displayed, no longer dependent on the ID, now proper classes.
|
893 |
-
* Fixed: Extra check for typography bug.
|
894 |
-
* Fixed: Error css alignment issue with subsections.
|
895 |
-
* Modified: Error notice stays until all errors are gone. Also updates it's number as errors fixed!
|
896 |
-
|
897 |
-
## 3.2.8.7
|
898 |
-
* Modified: Moved google font files to proprietary folder in upload to help with permission issues.
|
899 |
-
|
900 |
-
## 3.2.8.6
|
901 |
-
* Fixed: javascript error in typography field.
|
902 |
-
|
903 |
-
## 3.2.8.5
|
904 |
-
* Fixed: Added a title to the google fonts stylesheet to fix validation errors.
|
905 |
-
|
906 |
-
## 3.2.8.4
|
907 |
-
* Fixed: One more slides field error check, and an extra JS goodie for an extension.
|
908 |
-
|
909 |
-
## 3.2.8.3
|
910 |
-
* Fixed: Leftover debug code messing up slides field.
|
911 |
-
|
912 |
-
## 3.2.8.2
|
913 |
-
* Fixed: More reliable saved action hook.
|
914 |
-
* Added: Actions hooks for errors and warnings.
|
915 |
-
|
916 |
-
## 3.2.8.1
|
917 |
-
* Fixed: Removed erroneous debug output in link_color field.
|
918 |
-
|
919 |
-
## 3.2.7.3
|
920 |
-
* Added: is_empty / empty / !isset AND not_empty / !empty / isset as required operations
|
921 |
-
|
922 |
-
## 3.2.7.2
|
923 |
-
* Fixed: Reset defaults error.
|
924 |
-
* Added: `show` argument to turn on and off input boxes in slider.
|
925 |
-
|
926 |
-
## 3.2.7.1
|
927 |
-
* Fixed: Required now works with muti-check fields and button set when set to multi.
|
928 |
-
|
929 |
-
## 3.2.7
|
930 |
-
* Fixed: Import works again. A single line was missed...
|
931 |
-
|
932 |
-
## 3.2.6.2
|
933 |
-
* Fixed: link_color field not outputting CSS properly via compiler or output. Thanks @vertigo7x
|
934 |
-
* Fixed: Sorter field CSS. Buttons were all smushed together.
|
935 |
-
|
936 |
-
## 3.2.6.1
|
937 |
-
* Fixed: 'undefined' error in typography.js. Thanks @ksere.
|
938 |
-
|
939 |
-
## 3.2.6
|
940 |
-
* Fixed: Another stray undefined index. Oy.
|
941 |
-
|
942 |
-
## 3.2.5.1
|
943 |
-
* Added: `open_expanded` argument to start the panel completely expanded initially.
|
944 |
-
|
945 |
-
## 3.2.5
|
946 |
-
* Fixed: Various bad mistakes. Oy.
|
947 |
-
|
948 |
-
## 3.2.4
|
949 |
-
* Fixed: Slight typography speed improvement. Less HTML hopefully faster page loads.
|
950 |
-
* Fixed: Unload error on first load if the typography defaults are not set.
|
951 |
-
|
952 |
-
## 3.2.3.5
|
953 |
-
* Modified: Moved update check functions to class file and out of the core.
|
954 |
-
* Fixed: Errors pertaining to mod_rewrite check.
|
955 |
-
|
956 |
-
## 3.2.3.4
|
957 |
-
* Fixed: All those headers already set errors.
|
958 |
-
|
959 |
-
## 3.2.3.3
|
960 |
-
* Added: $changed_values variable to save hooks denoting the old values on a save.
|
961 |
-
* Added: Pointers to Extensions on load.
|
962 |
-
* Modified: CSS Output for the background field.
|
963 |
-
|
964 |
-
## 3.2.3.2
|
965 |
-
* Fixed: Validation error messages not appearing on save.
|
966 |
-
* Modified: Speed boost on validation types.
|
967 |
-
* Added: Apache mod_rewrite check. This should solve many issues we've been seeing regarding mod_rewrite noe being enabled.
|
968 |
-
|
969 |
-
## 3.2.3.1
|
970 |
-
* Fixed: Sortable field not saving properly.
|
971 |
-
* Fixed: Erroneous data in admin.less
|
972 |
-
* Updated: sample-config.php. Sortable checkbox field example now uses true/false instead of text
|
973 |
-
meant for textbox example.
|
974 |
-
|
975 |
-
## 3.2.3
|
976 |
-
* Fixed: Responsive issues with spacing and dimension fields.
|
977 |
-
|
978 |
-
## 3.2.2.16
|
979 |
-
* Fixed: Style conflicts with WP 3.9. Added register filter to fields via id.
|
980 |
-
|
981 |
-
## 3.2.2.15
|
982 |
-
* Fixed: Metaboxes issues.
|
983 |
-
|
984 |
-
## 3.2.2.14
|
985 |
-
* Modified: Some admin panel stylings. Now perfect with mobile hover. Also fixed an issue
|
986 |
-
with the slidedown width for sections. No more 2 empty pixels.
|
987 |
-
|
988 |
-
## 3.2.2.13
|
989 |
-
* Added: Tick mark if section has sub sections. Hidden when subsections expanded.
|
990 |
-
|
991 |
-
## 3.2.2.12
|
992 |
-
* Fixed: Compiler hook in the customizer now passes the CSS.
|
993 |
-
|
994 |
-
## 3.2.2.11
|
995 |
-
* Fixed: Compiler hook now properly fires in the customizer.
|
996 |
-
|
997 |
-
## 3.2.2.10
|
998 |
-
* Fixed: Validation error with headers already being set.
|
999 |
-
|
1000 |
-
## 3.2.2.9
|
1001 |
-
* Fixed: Added mode for width/height to override dimensions css output.
|
1002 |
-
|
1003 |
-
## 3.2.2.8
|
1004 |
-
* Fixed: Restoring lost formatting from multiple merges.
|
1005 |
-
|
1006 |
-
## 3.2.2.7
|
1007 |
-
* Fixed: New sorter default values get set properly now. ;)
|
1008 |
-
|
1009 |
-
## 3.2.2.6
|
1010 |
-
* Added: `data` and `args` can now be set to sorter! Just make sure to have it be a key based on what
|
1011 |
-
you want it to display as. IE: `array('Main'=>'sidebars')`
|
1012 |
-
|
1013 |
-
## 3.2.2.5
|
1014 |
-
* Added: Prevent Redux from firing on AJAX heartbeat, but added hook for it 'redux/ajax/heartbeat'.
|
1015 |
-
* Fixed: Removed erroneous 's' character from HTML.
|
1016 |
-
|
1017 |
-
## 3.2.2.4
|
1018 |
-
* Added: Check to make sure a field isn't empty after the filter. If it is empty, skip over it.
|
1019 |
-
|
1020 |
-
## 3.2.2.3
|
1021 |
-
* Added: Subsections now show icon if they have it. Show text only (without indent) if they do not.
|
1022 |
-
|
1023 |
-
## 3.2.2.2
|
1024 |
-
* Added: Set a section or field argument of `'panel' => false` to skip over that field or panel and
|
1025 |
-
hide it. It will still be registered with defaults saved, but not display. This can be useful
|
1026 |
-
for things like the customizer.
|
1027 |
-
|
1028 |
-
## 3.2.2.1
|
1029 |
-
* Added: SUBSECTIONS! Just add `'subsection' => true` to any section that isn't a divide/callback and
|
1030 |
-
isn't the first section in your panel. ;)
|
1031 |
-
|
1032 |
-
## 3.2.1.2
|
1033 |
-
* Fixed: Info field didn't intend within section.
|
1034 |
-
|
1035 |
-
## 3.2.1.1
|
1036 |
-
* Fixed: Compiler hook wasn't running.
|
1037 |
-
|
1038 |
-
|
1039 |
-
## 3.1.9.44
|
1040 |
-
* Fixed: Small bug in image_select javascript.
|
1041 |
-
|
1042 |
-
## 3.1.9.43
|
1043 |
-
* Added: Import hook, just because we can. :)
|
1044 |
-
|
1045 |
-
## 3.1.9.42
|
1046 |
-
* Fixed: Customizer now TRULY outputting CSS if output_tag is set to false.
|
1047 |
-
|
1048 |
-
## 3.1.9.41
|
1049 |
-
* Fixed: Reset section, etc. Discovered an odd WordPress thing.
|
1050 |
-
|
1051 |
-
## 3.1.9.40
|
1052 |
-
* Fixed: Image_select size override.
|
1053 |
-
* Fixed: Customizer save not firing the compiler hook.
|
1054 |
-
* Fixed: Customizer not outputting CSS if output_tag is set to false.
|
1055 |
-
* Fixed: Small empty variable check. Undefined index in the defaults generating function.
|
1056 |
-
|
1057 |
-
## 3.1.9.39
|
1058 |
-
* Fixed: WP 3.9 update made editor field button look ugly.
|
1059 |
-
* Fixed: Save hook not firing when save_default set to false.
|
1060 |
-
|
1061 |
-
## 3.1.9.38
|
1062 |
-
* Fixed: Reset section anomalies. Maybe.
|
1063 |
-
|
1064 |
-
## 3.1.9.37
|
1065 |
-
* Fixed: Array of values in required not recognized.
|
1066 |
-
|
1067 |
-
## 3.1.9.36
|
1068 |
-
* Fixed: Updated hint defaults to prevent index warning.
|
1069 |
-
|
1070 |
-
## 3.1.9.35
|
1071 |
-
* Fixed: Removed leftover debug code.
|
1072 |
-
|
1073 |
-
## 3.1.9.34
|
1074 |
-
* Added: New readonly argument for text field.
|
1075 |
-
|
1076 |
-
## 3.1.9.33
|
1077 |
-
* Fixed: Reset/Reset section actions hooks now fire properly.
|
1078 |
-
|
1079 |
-
## 3.1.9.32
|
1080 |
-
* Fixed: When developer uses section field but does not specify an indent argument.
|
1081 |
-
|
1082 |
-
## 3.1.9.31
|
1083 |
-
* Fixed: Dynamic URL for slides
|
1084 |
-
* Fixed: Accidently removed reset action on section reset. Restored.
|
1085 |
-
|
1086 |
-
## 3.1.9.30
|
1087 |
-
* Fixed: Section defaults bug for certain field types.
|
1088 |
-
|
1089 |
-
## 3.1.9.29
|
1090 |
-
* Fixed: Dynamic URL if site URL changed now updates media properly if attachement exists.
|
1091 |
-
|
1092 |
-
## 3.1.9.28
|
1093 |
-
* Fixed: Customizer now correctly does live preview.
|
1094 |
-
|
1095 |
-
## 3.1.9.27
|
1096 |
-
* Fixed: Special enqueue case fix.
|
1097 |
-
|
1098 |
-
## 3.1.9.26
|
1099 |
-
* Added: A few more hooks for defaults and options.
|
1100 |
-
* Fixed: Small undefined index error.
|
1101 |
-
* Added: Section key generation via title.
|
1102 |
-
* Modified: File intending.
|
1103 |
-
|
1104 |
-
## 3.1.9.25
|
1105 |
-
* Fixed: Custom menus not displaying options panel.
|
1106 |
-
|
1107 |
-
## 3.1.9.24
|
1108 |
-
* Fixed: Single checkbox option not retaining checked value.
|
1109 |
-
* Fixed: Border field returning bad CSS in CSS compiler.
|
1110 |
-
|
1111 |
-
## 3.1.9.23
|
1112 |
-
* Fixed: Import/Export fix. Thanks, CGlingener!
|
1113 |
-
|
1114 |
-
## 3.1.9.22
|
1115 |
-
* Added: Save warning now is sticky to the top and responsive.
|
1116 |
-
* Fixed: Mobile fixes for Redux. Looks great on small screens how.
|
1117 |
-
* Fixed: Slight CSS fixes.
|
1118 |
-
* Fixed: Compiler fixes and added notices.
|
1119 |
-
* Added: Import/Export more reasonable text.
|
1120 |
-
|
1121 |
-
## 3.1.9.21
|
1122 |
-
* Added: `force_output` are on the field level to bypass the required check that removes the output
|
1123 |
-
if the field is hidden. Thanks @rffaguiar.
|
1124 |
-
|
1125 |
-
## 3.1.9.20
|
1126 |
-
* Fixed: Rare case (mediatemple grid server) when file_get_contents won't work outside of the
|
1127 |
-
uploads dir. Used curl to grab the font HTML. ;)
|
1128 |
-
|
1129 |
-
## 3.1.9.19
|
1130 |
-
* Fixed: Undefined index for admin bar.
|
1131 |
-
|
1132 |
-
## 3.1.9.18
|
1133 |
-
* Fixed: SMALL issue with WordPress 3.9. Now it works. ;)
|
1134 |
-
|
1135 |
-
## 3.1.9.17
|
1136 |
-
* Fixed: Info and divide field now work with required.
|
1137 |
-
|
1138 |
-
## 3.1.9.16
|
1139 |
-
* Added: Fallback. Now if the media, slides, or background URL doesn't match the site URL, but the
|
1140 |
-
attachment ID is present, the data is updated.
|
1141 |
-
|
1142 |
-
## 3.1.9.15
|
1143 |
-
* Fixed: Last tab not properly set. Slow rendering.
|
1144 |
-
|
1145 |
-
## 3.1.9.14
|
1146 |
-
* Modified: Replaced transients with cookies.
|
1147 |
-
|
1148 |
-
## 3.1.9.13
|
1149 |
-
* Fixed: Undefined variable issues for new required methods.
|
1150 |
-
|
1151 |
-
## 3.1.9.12
|
1152 |
-
* Fixed: Default_show display error with a non-array being steralized.
|
1153 |
-
* Added: Multiple required parent value checking! Booya!
|
1154 |
-
* Fixed: Sections now fold with required.
|
1155 |
-
|
1156 |
-
## 3.1.9.11
|
1157 |
-
* Fixed: select2 not rendering properly when dev_mode = false, because of ace_editor fix.
|
1158 |
-
* Fixed: Removed mistakenly compiled test code from redux.js.
|
1159 |
-
|
1160 |
-
## 3.1.9.10
|
1161 |
-
* Fixed: ace_editor not rendering properly in certain instances.
|
1162 |
-
* Modified: Small change to import_export field in checking for existing instance of itself.
|
1163 |
-
|
1164 |
-
## 3.1.9.9
|
1165 |
-
* Fixed: import_export not rendering when the menutype argument was set to menu
|
1166 |
-
|
1167 |
-
## 3.1.9.8
|
1168 |
-
* Fixed: Ace_editor not enqueued unless used. MEMORY HOG.
|
1169 |
-
|
1170 |
-
## 3.1.9.7
|
1171 |
-
* Fixed: Color_Gradient transparency to was being auto-selected if from way transparent.
|
1172 |
-
* Fixed: Enqueue select with slider for local dev.
|
1173 |
-
|
1174 |
-
## 3.1.9.6
|
1175 |
-
* Modified: removed add_submenu_page when creating a submenu for us in the WP admin area. WP
|
1176 |
-
approved API is used in it's place to being Redux up to wp.org theme check standards.
|
1177 |
-
|
1178 |
-
## 3.1.9.5
|
1179 |
-
* Fixed: Massive speed issue with button_set. Resolved.
|
1180 |
-
* Fixed: Issue where default values throws an error if ID is not set.
|
1181 |
-
|
1182 |
-
## 3.1.9.4
|
1183 |
-
* Fixed: Continuing effort to ensure proper loading of config from child themes.
|
1184 |
-
|
1185 |
-
## 3.1.9.3
|
1186 |
-
* Fixed: Import/Export array search bug if section['fields'] is not defined.
|
1187 |
-
|
1188 |
-
## 3.1.9.2
|
1189 |
-
* Fixed: Inconsistencies in import/export across different versions of PHP.
|
1190 |
-
|
1191 |
-
## 3.1.9.1
|
1192 |
-
* Fixed: Redux checks for child or parent theme exclusively before loading.
|
1193 |
-
|
1194 |
-
## 3.1.9
|
1195 |
-
* Updated: RGBA Field stability. Thank you, SilverKenn.
|
1196 |
-
|
1197 |
-
## 3.1.8.23
|
1198 |
-
* Modified: Separated Import/Export from the core. It can now be used as a field.
|
1199 |
-
|
1200 |
-
## 3.1.8.22
|
1201 |
-
* Fixed: Typography custom preview text/size not outputting.
|
1202 |
-
* Fixed: No font selected in typography would default to 'inherit'.
|
1203 |
-
* Fixed: Hint feature kicking back a notice if no title was specified.
|
1204 |
-
|
1205 |
-
## 3.1.8.21
|
1206 |
-
* Fixed: Sortable field, when used a checkboxes, were all checked by default, even when set not to be.
|
1207 |
-
* Fixed: button_set field not setting properly in multi mode.
|
1208 |
-
|
1209 |
-
## 3.1.8.20
|
1210 |
-
* Fixed: Javascript console object not printing options object.
|
1211 |
-
* Fixed: Load errors from child themes no longer occur.
|
1212 |
-
|
1213 |
-
## 3.1.8.19
|
1214 |
-
* Modified: Typography word and letter spacing now accept negative values.
|
1215 |
-
* Modified: Typography preview shows spaces between upper and lower case groupings.
|
1216 |
-
* Fixed: Compiler output for slider field.
|
1217 |
-
|
1218 |
-
## 3.1.8.18
|
1219 |
-
* Fixed: update_check produced a fatal error on a local install with no internet connection.
|
1220 |
-
* Modified: Google font CSS moved to header so pages will pass HTML5 validation.
|
1221 |
-
|
1222 |
-
## 3.1.8.17
|
1223 |
-
* Fixed: Compiler hook failing on slider.
|
1224 |
-
|
1225 |
-
## 3.1.8.16
|
1226 |
-
* Fixed: Error on update_check when the response code was something other than 200.
|
1227 |
-
* Modified: Removed Google font CSS line from header (because it's in the footer via wp_enqueue_style.
|
1228 |
-
|
1229 |
-
## 3.1.8.15
|
1230 |
-
* Added: Admin notice for new builds of Redux on Github as they become available. This feature is
|
1231 |
-
available on in dev_mode, and may be turned off by setting the `update_notice` argument to
|
1232 |
-
false. See the Arguments page of the wiki for more details.
|
1233 |
-
* Added: text-transform option for the typography field.
|
1234 |
-
* Fixed: image_select images not resizing properly in FF and IE.
|
1235 |
-
* Fixed: Layout for the typography field, so everything isn't smushed together. The new layout is
|
1236 |
-
as follows:
|
1237 |
-
[family-font] [backup-font]
|
1238 |
-
[style] [script] [align] [transform]
|
1239 |
-
[size] [height] [word space] [letter space]
|
1240 |
-
[color]
|
1241 |
-
|
1242 |
-
## 3.1.8.14
|
1243 |
-
* Added: Newsletter sign-up popup at first load of the Redux options panel.
|
1244 |
-
|
1245 |
-
## 3.1.8.12
|
1246 |
-
* Added: Added PHP 5.2 support for import/export.
|
1247 |
-
|
1248 |
-
## 3.1.8.11
|
1249 |
-
* Added: Action hooks for options reset and options reset section.
|
1250 |
-
* Added: Theme responsive for date picker.
|
1251 |
-
|
1252 |
-
## 3.1.8.10
|
1253 |
-
* Added: New slider. Better looking UI, double handles and support for floating
|
1254 |
-
point values. See the wiki for more info.
|
1255 |
-
|
1256 |
-
## 3.1.8.9
|
1257 |
-
* Fixed: link_color field showing notice on default, if user enters no defaults.
|
1258 |
-
* Fixed: Fixed tab notice in framework.php if no tab parameter is set in URL.
|
1259 |
-
|
1260 |
-
## 3.1.8.8
|
1261 |
-
* Added: Typography improvements.
|
1262 |
-
|
1263 |
-
## 3.1.8.7
|
1264 |
-
* Added: Hints! More info: https://github.com/ReduxFramework/ReduxFramework/wiki/Using-Hints-in-Fields
|
1265 |
-
|
1266 |
-
## 3.1.8.6
|
1267 |
-
* Added: Complete Wordpress admin color styles. Blessed LESS/SCSS mixins. ;)
|
1268 |
-
|
1269 |
-
## 3.1.8.5
|
1270 |
-
* Added: Font family not required for the typography module any longer.
|
1271 |
-
|
1272 |
-
## 3.1.8.4
|
1273 |
-
* Added: Support for using the divide field in folding.
|
1274 |
-
* Added: Error trapping in typography.js for those still attempting to use
|
1275 |
-
typography with no font-family.
|
1276 |
-
|
1277 |
-
## 3.1.8.3
|
1278 |
-
* Added: Full asynchronous font loading.
|
1279 |
-
*
|
1280 |
-
## 3.1.8.2
|
1281 |
-
* Added: email_not_empty validation field.
|
1282 |
-
* Reverted: email validation field only checks for valid email. not_empty check moved
|
1283 |
-
to new validation field.
|
1284 |
-
|
1285 |
-
## 3.1.8.1
|
1286 |
-
* Fixed: Hide demo hook wasn't hiding demo links.
|
1287 |
-
|
1288 |
-
## 3.1.8
|
1289 |
-
* Fixed: Improper enqueue in tracking class.
|
1290 |
-
* Fixed: Few classes missed for various fields.
|
1291 |
-
* Fixed: Spacing field kicking back notices and warnings when 'output' wasn't set.
|
1292 |
-
* Modified: Added file_exists check to all include lines in framework.php
|
1293 |
-
* Fixed: Background field now works with dynamic preview as it should.
|
1294 |
-
* Fixed: Extension fields now enqueueing properly.
|
1295 |
-
* Added: Text-align to typography field.
|
1296 |
-
* Fixed: Servers returning forwards slashes in TEMPLATEPATH, while Redux is installed
|
1297 |
-
embedded would not show options menu.
|
1298 |
-
* Fixed: On and Off for switch field not displaying language translation.
|
1299 |
-
* Fixed: email validation allowing a blank field.
|
1300 |
-
* Fixed: Now allow for empty values as valid keys.
|
1301 |
-
* Added: Dismiss option to admin notices (internal function)
|
1302 |
-
|
1303 |
-
## 3.1.6
|
1304 |
-
* Fixed: CSS spacing issue
|
1305 |
-
* Fixed: Customizer now works and doesn't break other customizer fields outside of Redux.
|
1306 |
-
* Fixed: Several minor bug fixes
|
1307 |
-
* Added: Metabox support via extension http://reduxframework.com/extensions/
|
1308 |
-
* Added: Admin-bar menu
|
1309 |
-
* Fixed: Section field now folds.
|
1310 |
-
* Fixed: wp_content_dir path now handles double forward slashes.
|
1311 |
-
* Fixed: Typography field missing italics in Google fonts.
|
1312 |
-
* Fixed: Default color in border field not saving properly.
|
1313 |
-
* Fixed: hex2rgba in class.redux_helpers.php changed to static.
|
1314 |
-
* Fixed: 'sortable' field type not saving options as default.
|
1315 |
-
* Fixed: Specified default color not set when clicking the color box default button.
|
1316 |
-
* Fixed: Sorter field options are now saved as default in database.
|
1317 |
-
* Fixed: Issues with checkboxes displaying default values instead of labels.
|
1318 |
-
* Fixed: Outstanding render issues with spacing field.
|
1319 |
-
* Fixed: Plugins using Redux from load failure.
|
1320 |
-
* Fixed: 'not_empty' field validation.
|
1321 |
-
* Fixed: Media field.
|
1322 |
-
* Added: 'read-only' option for media text field.
|
1323 |
-
* Added: 'mode' option to image_select, so CSS output element may be specified.
|
1324 |
-
* Added: Admin Bar menu for option panel.
|
1325 |
-
* Modified: Removed raw_align field and added align option to raw field.
|
1326 |
-
See wiki for more info.
|
1327 |
-
* Modified: media field 'read-only' to 'readonly' to vonform to HTML standards.
|
1328 |
-
* Removed: EDD extension. It never belonged in Core and will be re-released as a
|
1329 |
-
downloadable extension shortly
|
1330 |
-
* Removed: Group field, temporarily.
|
1331 |
-
* Removed: wp_get_current_user check.
|
1332 |
-
|
1333 |
-
## 3.1.5
|
1334 |
-
* Typography font arrays may not contain comma spaces.
|
1335 |
-
* Merge in pull request - 542, code cleanup and better readability
|
1336 |
-
* Change how HTML is output to support metaboxes
|
1337 |
-
* CSS only on pages that matter, better checks.
|
1338 |
-
* font-backup in typography now appends to font-family in output and compiler.
|
1339 |
-
* More fixes for Google font css outputting.
|
1340 |
-
* Addded output and compiler to field_image_select. Images will be output as 'background-image'.
|
1341 |
-
* Fixed output in field_background.
|
1342 |
-
* Prevent standard fonts from outputting to Google fonts CSS call.
|
1343 |
-
* class_exists in field_section checking for incorrect classname.
|
1344 |
-
* sample_config fix.
|
1345 |
-
* Compiler not outputting CSS without output set to comthing other than false.
|
1346 |
-
* Google fonts not rendering on frontend.
|
1347 |
-
* Rewrote sample_config as a class
|
1348 |
-
|
1349 |
-
## 3.1.4
|
1350 |
-
* Fixed error in redux-framework.php.
|
1351 |
-
* Added select_image field.
|
1352 |
-
|
1353 |
-
## 3.1.3
|
1354 |
-
* Fixed a few undefined variables
|
1355 |
-
* Removed old code from the repo.
|
1356 |
-
* Fix for validation.
|
1357 |
-
* Remove the compiler hook by default.
|
1358 |
-
* Fix to sortable field.
|
1359 |
-
* Added an extra check for link color. Removes user error.
|
1360 |
-
* Localization updates.
|
1361 |
-
* Error in slides.
|
1362 |
-
* Fixed the info box bug with spacing and padding.
|
1363 |
-
* Fixed the first item in each section having WAY too much padding. ;)
|
1364 |
-
* Fixed section reset issue where values weren't being saved to the db properly.
|
1365 |
-
|
1366 |
-
## 3.1.2
|
1367 |
-
* Feature - Sortable select boxes!
|
1368 |
-
* Feature - Reset a section only or the whole panel!
|
1369 |
-
* New Field - RGBA Color Field!
|
1370 |
-
* Improvement - Use of REM throughout.
|
1371 |
-
* Fixed Typography - Fix output option and various small bugs.
|
1372 |
-
* Fixed Border - Fix output option and various small bugs.
|
1373 |
-
* Fixed Dimensions - Fix output option and various small bugs.
|
1374 |
-
* Fixed Image_select - Various small bugs.
|
1375 |
-
* Fixed Slides - Various small bugs.
|
1376 |
-
* Fixed Sortable - Using native jQuery UI library same as within WordPress.
|
1377 |
-
* Fixed Slider and Spinner Input Field - Values now move to the closest valid
|
1378 |
-
value in regards to the step, automatically.
|
1379 |
-
* Fixed Ace Editor
|
1380 |
-
* FEATURE - All CSS/JS files are compiled into a single file now! Speed
|
1381 |
-
improvements for the backend.
|
1382 |
-
* Fix in how WordPress data is received, improved some output.
|
1383 |
-
* Fix for various fields not triggering fold/compiler/save.
|
1384 |
-
* Fixed elusive icons to use the new version and classes.
|
1385 |
-
* Fixed media thumb to only be the thumbnail version.
|
1386 |
-
* Fixed admin https error with WordPress core not renaming URL.
|
1387 |
-
* Placeholders throughout the framework are now properly there.
|
1388 |
-
* Feature - Setting to not save defaults to database on load.
|
1389 |
-
* Fixed - Computability issue with GT3 builder.
|
1390 |
-
* Fixed localization issue with default values.
|
1391 |
-
* Language - Added Russian
|
1392 |
-
* Feature - Media now can have any content type passed in to limit content types.
|
1393 |
-
* Allow negative values in typography and other fields.
|
1394 |
-
* WordPress 3.8 computability.
|
1395 |
-
* CSS validation issue.
|
1396 |
-
* Feature - User contributed text direction feature.
|
1397 |
-
* EDD Extension now fully function for plugins or themes.
|
1398 |
-
* Removed get_theme_data() fallbacks, we're well pass WordPress 3.4 now. ;)
|
1399 |
-
* A ton of other small updates and improvements.
|
1400 |
-
|
1401 |
-
## 3.1.0
|
1402 |
-
* Fix Issue 224 - Image Select width was breaking the panel.
|
1403 |
-
* Fix Issue 181 - Broken panel in firefox
|
1404 |
-
* Fix Issue 225 - 0px typography bug. Thanks @partnuz.
|
1405 |
-
* Fix Issue 228 - Resolved a duplicated enqueue on color_link field. Thanks @vertigo7x.
|
1406 |
-
* Fix Issue 231 - Field spacing bug fixes.
|
1407 |
-
* Fix Issue 232 & 233 - Dimensions: bug fix with units and multiple units. Thanks @kpodemski
|
1408 |
-
* Fix Issue 234 - Pass options as a ref so validating actions can modify/sanitize them. Thanks @ZeroBeeOne
|
1409 |
-
* Fix Issue 222 - Tab cookie function wasn't working.
|
1410 |
-
* Feature - Pass params to Select2. Thanks @andreilupu
|
1411 |
-
* Fix Issue 238 - Fix for conditional output. Thanks @partnuz.
|
1412 |
-
* Fix Issue 211 - Google Web font wasn't loading at first init of theme.
|
1413 |
-
* Fix Issue 210 - Elusive Icons update. Changed classes to force use of full elusive name.
|
1414 |
-
* Fix Issue 247 - Media thumbnails were not showing. Also fixed media to keep the largest file, but display the small
|
1415 |
-
version in the panel as a thumb. Thanks @kwayyinfotech.
|
1416 |
-
* Fix Issue 144 - JS error when no item found in slider.
|
1417 |
-
* Fix Issue 246 - Typography output errors.
|
1418 |
-
* Feature & Issue 259 - Multi-Text now support validation!
|
1419 |
-
* Fix Issue 248/261 - Links color issue. Also fixed color validation.
|
1420 |
-
* Feature & Issue 262 - Now registered sidebars can be used as a data type.
|
1421 |
-
* Fix Issue 194/276 - Custom taxonomy terms now passing properly. Thanks @kprovance.
|
1422 |
-
* Feature & Issue 273 - Argument save_defaults: Disable the auto-save of the default options to the database if not set.
|
1423 |
-
* Feature - Docs now being moved to the wiki for community participation.
|
1424 |
-
* Issue 283 - Date placeholder. Thanks @kprovance.
|
1425 |
-
* Issue 285 - HTTPS errors on admin. Known WordPress bug. Resolved.
|
1426 |
-
* Fix Issue 288 - Float values now possible for border, dimensions, and spacing.
|
1427 |
-
* Feature - Media field can now accept non-image files with a argument being set.
|
1428 |
-
* Fix Issue 252 - Post Type data wasn't working properly. Thanks @Abu-Taymiyyah.
|
1429 |
-
* Fix Issue 213 - Radio and Button Set wasn't folding.
|
1430 |
-
|
1431 |
-
## 3.0.9
|
1432 |
-
* Feature - Added possibility to set default icon class for all sections and tabs.
|
1433 |
-
* Feature - Make is to the WP dir can be moved elsewhere and Redux still function.
|
1434 |
-
* Added Spanish Language. Thanks @vertigo7x.
|
1435 |
-
* Fix Issue 5 - Small RGBA validation fix.
|
1436 |
-
* Fix Issue 176 - Fold by Image Select. Thanks @andreilupu.
|
1437 |
-
* Fix Issue 194 - Custom taxonomy terms in select field.
|
1438 |
-
* Fix Issue 195 - Border defaults not working.
|
1439 |
-
* Fix Issue 197 - Hidden elements were showing up on a small screen. Thanks @ThinkUpThemes.
|
1440 |
-
* Fix issue 200 - Compiler not working with media field.
|
1441 |
-
* Fix Issue 201 - Spacing field not using default values.
|
1442 |
-
* Fix Issue 202 - Dimensions field not using units.
|
1443 |
-
* Fix Issue 208 - Checkbox + Required issue.
|
1444 |
-
* Fix Issue 211 - Google Font default not working on page load.
|
1445 |
-
* Fix Issue 214 - Validation notice not working for fields.
|
1446 |
-
* Fix Issue 181/224 - Firefox 24 image resize errors.
|
1447 |
-
* Fix Issue 223 - Slides were losing the url input field for the image link.
|
1448 |
-
* Fix - Various issues in the password field.
|
1449 |
-
* Fixed various spelling issues and typos in sample-config file.
|
1450 |
-
* Initialize vars before extract() - to shut down undefined vars wargnings.
|
1451 |
-
* Various other fixes.
|
1452 |
-
|
1453 |
-
## 3.0.8
|
1454 |
-
* Version push to ensure all bugs fixes were deployed to users. Various.
|
1455 |
-
|
1456 |
-
## 3.0.7
|
1457 |
-
* Feature - Completely redone spacing field. Choose to apply to sides or all at once with CSS output!
|
1458 |
-
* Feature - Completely redone border field. Choose to apply to sides or all at once with CSS output!
|
1459 |
-
* Feature - Added opt-in anonymous tracking, allowing us to further analyze usage.
|
1460 |
-
* Feature - Enable weekly updates of the Google Webfonts cache is desired. Also remove the Google Webfont files from
|
1461 |
-
shipping with Redux. Will re-download at first panel run to ensure users always have the most recent copy.
|
1462 |
-
* Language translation of german updated alone with ReduxFramework pot file.
|
1463 |
-
* Fix Issue 146 - Spacing field not storing data.
|
1464 |
-
* Fix - Firefox field description rendering bug.
|
1465 |
-
* Fix - Small issue where themes without tags were getting errors from the sample data.
|
1466 |
-
|
1467 |
-
## 3.0.6
|
1468 |
-
* Hide customizer fields by default while still under development.
|
1469 |
-
* Fix Issue 123 - Language translations to actually function properly embedded as well as in the plugin.
|
1470 |
-
* Fix Issue 151 - Media field uses thumbnail not full image for preview. Also now storing the thumbnail URL. Uses
|
1471 |
-
the smallest available size as the thumb regardless of the name.
|
1472 |
-
* Fix Issue 147 - Option to pass params to select2. Contributed by @andreilupu. Thanks!
|
1473 |
-
* Added trim function to ace editor value to prevent whitespace before and after value keep being added
|
1474 |
-
* htmlspecialchars() value in pre editor for ace. to prevent html tags being hidden in editor and rendered in dom
|
1475 |
-
* Feature: Added optional 'add_text' argument for multi_text field so users can define button text.
|
1476 |
-
* Added consistent remove button on multi text, and used sanitize function for section id
|
1477 |
-
* Feature: Added roles as data for field data
|
1478 |
-
* Feature: Adding data layout options for multi checkbox and radio, we now have quarter, third, half, and full
|
1479 |
-
column layouts for these fields.
|
1480 |
-
* Feature: Eliminate REDUX_DIR and REDUX_URL constants and instead created static ReduxFramework::$\_url and
|
1481 |
-
ReduxFramework::$\_dir for cleaner code.
|
1482 |
-
* Feature: Code at bottom of sample-config.php to hide plugin activation text about a demo plugin as well as
|
1483 |
-
code to demo how to hide the plugin demo_mode link.
|
1484 |
-
* Started work on class definitions of each field and class. Preparing for the panel builder we are planning to make.
|
1485 |
-
|
1486 |
-
## 3.0.5
|
1487 |
-
* Fixed how Redux is initialised so it works in any and all files without hooking into the init function.
|
1488 |
-
* Issue #151: Added thumbnails to media and displayed those instead of full image.
|
1489 |
-
* Issue #144: Slides had error if last slide was deleted.
|
1490 |
-
* Color field was outputting hex in the wrong location.
|
1491 |
-
* Added ACE Editor field, allowing for better inline editing.
|
1492 |
-
|
1493 |
-
## 3.0.4
|
1494 |
-
* Fixed an odd saving issue.
|
1495 |
-
* Fixed link issues in the framework
|
1496 |
-
* Issue #135: jQuery UI wasn't being properly queued
|
1497 |
-
* Issue #140: Admin notice glitch. See http://reduxframework.com/2013/10/wordpress-notifications-custom-options-panels/
|
1498 |
-
* Use hooks instead of custom variable for custom admin CSS
|
1499 |
-
* Added "raw" field that allows PHP or a hook to embed anything in the panel.
|
1500 |
-
* Submenus in Admin now change the tabs without reloading the page.
|
1501 |
-
* Small fix for multi-text.
|
1502 |
-
* Added IT_it and RO_ro languages.
|
1503 |
-
* Updated readme file for languages.
|
1504 |
-
|
1505 |
-
## 3.0.3
|
1506 |
-
* Fixed Issue #129: Spacing field giving an undefined.
|
1507 |
-
* Fixed Issue #131: Google Fonts stylesheet appending to body and also to the top of the header. Now properly placed
|
1508 |
-
both at the end of the head tag as to overload any theme stylesheets.
|
1509 |
-
* Fixed issue #132 (See #134, thanks @andreilupu): Could not have multiple WordPress Editors (wp_editor) as the
|
1510 |
-
same ID was shared. Also fixed various styles to match WordPress for this field.
|
1511 |
-
* Fixed Issue #133: Issue when custom admin stylesheet was used, a JS error resulted.
|
1512 |
-
|
1513 |
-
## 3.0.2
|
1514 |
-
* Improvements to slides, various field fixes and improvements. Also fixed a few user submitted issues.
|
1515 |
-
|
1516 |
-
## 3.0.1
|
1517 |
-
* Backing out a bit of submitted code that caused the input field to not properly break.
|
1518 |
-
|
1519 |
-
## 3.0.0
|
1520 |
-
* Initial WordPress.org plugin release.
|
1521 |
-
|
1522 |
-
## 3.0
|
1523 |
-
Redux is now hosted on WordPress.org! Update in order to get proper, stable updates.
|
1524 |
-
|
1525 |
-
* Removed get() and show()
|
1526 |
-
* Fixed huge performance bug
|
1527 |
-
* More bugfixes
|
1528 |
-
* Fixed spacing field
|
1529 |
-
* Converted Redux to run as an auto-updating plugin. Getting ready to post to WordPress.org
|
1530 |
-
* Fixed the auto updater to properly show changes since the last update
|
1531 |
-
* Various fields including link_color, spacing, dimensions
|
1532 |
-
* Compiler hooks to allow developers to generate CSS files only when needed
|
1533 |
-
* Stability and standardizing in HTML output throughout
|
1534 |
-
* PHP/CSS/JS fixes
|
1535 |
-
* Compress JS and use LESS (and compressed CSS) throughout
|
1536 |
-
|
1537 |
-
## Version 3.0.0 Beta (September 12, 2013)
|
1538 |
-
|
1539 |
-
* Massive code overhaul
|
1540 |
-
* Replaced redundant field types with data elements
|
1541 |
-
* Migrated to company repo
|
1542 |
-
* Added several new storage methods
|
1543 |
-
* Numerous bugfixes
|
1544 |
-
* Renamed std argument to default
|
1545 |
-
* Added MP6 support
|
1546 |
-
* Complete CSS rewrite
|
1547 |
-
* Globals are now conditional
|
1548 |
-
* Added nesting support
|
1549 |
-
* Added repeatable field
|
1550 |
-
* Restyled Dev Mode
|
1551 |
-
* Added System Info tab
|
1552 |
-
* Added compiler hooks
|
1553 |
-
* Added style and icon support to info field
|
1554 |
-
* Switched to Elusive Icons
|
1555 |
-
* Huge performance updates
|
1556 |
-
|
1557 |
-
## Version 2.0.1 Final (September 1, 2013)
|
1558 |
-
|
1559 |
-
* Added option to override ```icon_type``` per icon
|
1560 |
-
* Minor bug/versioning fixes
|
1561 |
-
* Added Font Awesome intro
|
1562 |
-
* Added ```raw_html``` option
|
1563 |
-
* Added ```text_sortable``` option
|
1564 |
-
* Switched from Aristo to Bootstrap jQuery UI theme
|
1565 |
-
|
1566 |
-
## Version 2.0.0 (January 31, 2013)
|
1567 |
-
|
1568 |
-
* Fixed SSL error which occurred occasionally with Google Webfonts
|
1569 |
-
* Added optional flag for ```wpautop``` on editors
|
1570 |
-
* Added password field type
|
1571 |
-
* Added ```checkbox_hide_all``` option
|
1572 |
-
* Added WP3.5 media chooser
|
1573 |
-
* Added Google webfonts previews
|
1574 |
-
* Updated to WP3.5 color picker
|
1575 |
-
* Minor style tweaks
|
1576 |
-
* Added graphical 'switch' option for checkboxes
|
1577 |
-
* Removed dependency on class extension for fields
|
1578 |
-
* Deprecated icons in favor of iconfonts
|
1579 |
-
|
1580 |
-
## Version 1.0.0 (December 5, 2012)
|
1581 |
-
|
1582 |
-
* Based on NHP Theme Options Framework v1.0.6
|
1583 |
-
* Cleaned up codebase
|
1584 |
-
* Changed option group name to allow multiple instances
|
1585 |
-
* Changed checkbox name attribute to id
|
1586 |
-
* Added rows attribute to textareas
|
1587 |
-
* Removed extra linebreak in upload field
|
1588 |
-
* Set default menu position to null to avoid conflicts
|
1589 |
-
* Added sample content for dashboard credit line
|
1590 |
-
* Minor style changes
|
1591 |
-
* Changed name of upload button
|
1592 |
-
* Refactored Google Webfonts function
|
1593 |
-
* Replaced ```stylesheet_override``` with ```admin_stylesheet```
|
1594 |
-
* Made text domain a constant
|
1595 |
-
* Removed PHP closing tags to prevent issues with newlines
|
1596 |
-
* Added option to define custom start tab
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/CONTRIBUTING.md
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
First and foremost, PLEASE check to see if you are using the latest version of Redux by checking the repository. If you plan on 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 us and yourself some time by taking this simple step first. Thanks!
|
2 |
-
|
3 |
-
When submitting a ticket, please make sure you include the following information, It is critical, and required. As Team Redux has not yet earned their certificates in mind reading, we need you to provide for us the following information. :)
|
4 |
-
|
5 |
-
1. The version of Redux you are using. Please do not say 'the latest version' as what you perceive as the latest and what might be the latest could easily be two different things. At the bottom of the Redux options panel is a four digit version number. Please include it.
|
6 |
-
|
7 |
-
2. The version of Wordpress you are running.
|
8 |
-
|
9 |
-
3. Please indicate if you are using Redux in dev_mode.
|
10 |
-
|
11 |
-
4. If you are having difficultly with a particular field, please include the config code for that entire field. If the field is dependent on other fields in the section (for example, required arguments are used), then please include the entire section.
|
12 |
-
|
13 |
-
5. If you are having difficulty with configuration, please specify if you are using a standalone theme, a child theme, a plugin, etc.
|
14 |
-
|
15 |
-
6. Please indicate if you are using Redux as a plugin or embedded in your project.
|
16 |
-
|
17 |
-
7. Please check your browser's output console. If there are any javascript errors pertaining to redux, please list them, including the module/file they occurred in and the line number
|
18 |
-
|
19 |
-
The follow only applies if Redux is not loading properly:
|
20 |
-
|
21 |
-
8. If you are using Redux embedded, please specify the location in which Redux is installed, where you config is located, and the lines of code you are using to initialize Redux and your config.
|
22 |
-
|
23 |
-
The way in which we diagnose bugs or config difficulties is to attempt to recreate them on our end. This is why we need the very specific information. Once we are able to confirm the issue, we will either push an update, or assist you in correcting any mistakes in your config.
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/Gruntfile.js
DELETED
@@ -1,441 +0,0 @@
|
|
1 |
-
/* jshint node:true */
|
2 |
-
var shell = require( 'shelljs' );
|
3 |
-
|
4 |
-
module.exports = function( grunt ) {
|
5 |
-
|
6 |
-
// Project configuration.
|
7 |
-
grunt.initConfig(
|
8 |
-
{
|
9 |
-
pkg: grunt.file.readJSON( 'package.json' ),
|
10 |
-
|
11 |
-
concat: {
|
12 |
-
options: {
|
13 |
-
separator: ';'
|
14 |
-
},
|
15 |
-
core: {
|
16 |
-
src: [
|
17 |
-
'ReduxCore/assets/js/vendor/cookie.js',
|
18 |
-
'ReduxCore/assets/js/vendor/qtip/jquery.qtip.js',
|
19 |
-
'ReduxCore/assets/js/vendor/jquery.typewatch.js',
|
20 |
-
'ReduxCore/assets/js/vendor/jquery.serializeForm.js',
|
21 |
-
'ReduxCore/assets/js/vendor/jquery.alphanum.js',
|
22 |
-
'ReduxCore/assets/js/redux.js'
|
23 |
-
],
|
24 |
-
dest: 'ReduxCore/assets/js/redux.min.js'
|
25 |
-
},
|
26 |
-
vendor: {
|
27 |
-
src: [
|
28 |
-
'ReduxCore/assets/js/vendor/cookie.js',
|
29 |
-
'ReduxCore/assets/js/vendor/qtip/jquery.qtip.js',
|
30 |
-
'ReduxCore/assets/js/vendor/jquery.serializeForm.js',
|
31 |
-
'ReduxCore/assets/js/vendor/jquery.typewatch.js',
|
32 |
-
'ReduxCore/assets/js/vendor/jquery.alphanum.js'
|
33 |
-
],
|
34 |
-
dest: 'ReduxCore/assets/js/vendor.min.js'
|
35 |
-
}
|
36 |
-
},
|
37 |
-
'gh-pages': {
|
38 |
-
options: {
|
39 |
-
base: 'docs',
|
40 |
-
message: 'Update docs and files to distribute'
|
41 |
-
},
|
42 |
-
dev: {
|
43 |
-
src: ['docs/**/*', 'bin/CNAME']
|
44 |
-
},
|
45 |
-
travis: {
|
46 |
-
options: {
|
47 |
-
repo: 'https://' + process.env.GH_TOKEN + '@github.com/ReduxFramework/docs.reduxframework.com.git',
|
48 |
-
user: {
|
49 |
-
name: 'Travis',
|
50 |
-
email: 'travis@travis-ci.org'
|
51 |
-
},
|
52 |
-
silent: false
|
53 |
-
},
|
54 |
-
src: ['**/*']
|
55 |
-
}
|
56 |
-
},
|
57 |
-
uglify: {
|
58 |
-
fields: {
|
59 |
-
files: [
|
60 |
-
{
|
61 |
-
expand: true,
|
62 |
-
cwd: 'ReduxCore/inc/fields',
|
63 |
-
src: ['**/*.js', '!**/*.min.js', '!ace_editor/vendor/*.js', '!ace_editor/vendor/snippets/*.js', '!slider/vendor/nouislider/*.*', '!spinner/vendor/*.*'],
|
64 |
-
ext: '.min.js',
|
65 |
-
dest: 'ReduxCore/inc/fields'
|
66 |
-
}
|
67 |
-
]
|
68 |
-
},
|
69 |
-
extensions: {
|
70 |
-
files: [
|
71 |
-
{
|
72 |
-
expand: true,
|
73 |
-
cwd: 'ReduxCore/inc/extensions',
|
74 |
-
src: ['**/*.js', '!**/*.min.js'],
|
75 |
-
ext: '.min.js',
|
76 |
-
dest: 'ReduxCore/inc/extensions'
|
77 |
-
}
|
78 |
-
]
|
79 |
-
},
|
80 |
-
core: {
|
81 |
-
files: {
|
82 |
-
'ReduxCore/assets/js/redux.min.js': [
|
83 |
-
'ReduxCore/assets/js/redux.min.js'
|
84 |
-
],
|
85 |
-
'ReduxCore/assets/js/vendor/spectrum/redux-spectrum.min.js': [
|
86 |
-
'ReduxCore/assets/js/vendor/spectrum/redux-spectrum.js'
|
87 |
-
],
|
88 |
-
'ReduxCore/assets/js/vendor/redux.select2.sortable.min.js': [
|
89 |
-
'ReduxCore/assets/js/vendor/redux.select2.sortable.js'
|
90 |
-
],
|
91 |
-
'ReduxCore/assets/js/media/media.min.js': [
|
92 |
-
'ReduxCore/assets/js/media/media.js'
|
93 |
-
]
|
94 |
-
}
|
95 |
-
|
96 |
-
},
|
97 |
-
vendor: {
|
98 |
-
files: {
|
99 |
-
'ReduxCore/assets/js/vendor.min.js': [
|
100 |
-
'ReduxCore/assets/js/vendor.min.js'
|
101 |
-
]
|
102 |
-
}
|
103 |
-
}
|
104 |
-
},
|
105 |
-
qunit: {
|
106 |
-
files: ['test/qunit/**/*.html']
|
107 |
-
},
|
108 |
-
|
109 |
-
// JavaScript linting with JSHint.
|
110 |
-
jshint: {
|
111 |
-
options: {
|
112 |
-
jshintrc: '.jshintrc'
|
113 |
-
},
|
114 |
-
files: [
|
115 |
-
//'Gruntfile.js',
|
116 |
-
'ReduxCore/assets/js/import_export/import_export.js',
|
117 |
-
'ReduxCore/assets/js/media/media.js',
|
118 |
-
'ReduxCore/inc/fields/ace_editor/field_ace_editor.js',
|
119 |
-
'ReduxCore/inc/fields/background/field_background.js',
|
120 |
-
'ReduxCore/inc/fields/border/field_border.js',
|
121 |
-
'ReduxCore/inc/fields/button_set/field_button_set.js',
|
122 |
-
'ReduxCore/inc/fields/checkbox/field_checkbox.js',
|
123 |
-
'ReduxCore/inc/fields/color/field_color.js',
|
124 |
-
'ReduxCore/inc/fields/color_rgba/field_color_rgba.js',
|
125 |
-
'ReduxCore/inc/fields/date/field_date.js',
|
126 |
-
'ReduxCore/inc/fields/dimensions/field_dimensions.js',
|
127 |
-
'ReduxCore/inc/fields/editor/field_editor.js',
|
128 |
-
'ReduxCore/inc/fields/gallery/field_gallery.js',
|
129 |
-
'ReduxCore/inc/fields/image_select/field_image_select.js',
|
130 |
-
'ReduxCore/inc/fields/multi_text/field_multitext.js',
|
131 |
-
'ReduxCore/inc/fields/palette/field_palette.js',
|
132 |
-
'ReduxCore/inc/fields/select/field_select.js',
|
133 |
-
'ReduxCore/inc/fields/select_image/field_select_image.js',
|
134 |
-
'ReduxCore/inc/fields/slider/field_slider.js',
|
135 |
-
'ReduxCore/inc/fields/slides/field_slides.js',
|
136 |
-
'ReduxCore/inc/fields/sortable/field_sortable.js',
|
137 |
-
'ReduxCore/inc/fields/sorter/field_sorter.js',
|
138 |
-
'ReduxCore/inc/fields/spacing/field_spacing.js',
|
139 |
-
'ReduxCore/inc/fields/spinner/field_spinner.js',
|
140 |
-
'ReduxCore/inc/fields/switch/field_switch.js',
|
141 |
-
'ReduxCore/inc/fields/typography/field_typography.js',
|
142 |
-
// 'ReduxCore/inc/fields/**/*.js',
|
143 |
-
'ReduxCore/extensions/**/*.js',
|
144 |
-
'ReduxCore/extensions/**/**/*.js',
|
145 |
-
'ReduxCore/assets/js/redux.js'
|
146 |
-
]
|
147 |
-
},
|
148 |
-
|
149 |
-
// Watch changes for files.
|
150 |
-
watch: {
|
151 |
-
ui: {
|
152 |
-
files: ['<%= jshint.files %>'],
|
153 |
-
tasks: ['jshint']
|
154 |
-
},
|
155 |
-
php: {
|
156 |
-
files: ['ReduxCore/**/*.php'],
|
157 |
-
tasks: ['phplint:core']
|
158 |
-
},
|
159 |
-
css: {
|
160 |
-
files: ['ReduxCore/**/*.less'],
|
161 |
-
tasks: ['less:development']
|
162 |
-
}
|
163 |
-
},
|
164 |
-
|
165 |
-
// Add textdomain.
|
166 |
-
addtextdomain: {
|
167 |
-
options: {
|
168 |
-
textdomain: 'redux-framework', // Project text domain.
|
169 |
-
updateDomains: ['redux', 'redux-framework-demo', 'v'] // List of text domains to replace.
|
170 |
-
},
|
171 |
-
target: {
|
172 |
-
files: {
|
173 |
-
src: ['*.php', '**/*.php', '!node_modules/**', '!tests/**', '!sample/**']
|
174 |
-
}
|
175 |
-
}
|
176 |
-
},
|
177 |
-
|
178 |
-
// Generate POT files.
|
179 |
-
makepot: {
|
180 |
-
redux: {
|
181 |
-
options: {
|
182 |
-
type: 'wp-plugin',
|
183 |
-
domainPath: 'ReduxCore/languages',
|
184 |
-
potFilename: 'redux-framework.pot',
|
185 |
-
include: [],
|
186 |
-
exclude: [
|
187 |
-
'sample/.*'
|
188 |
-
],
|
189 |
-
potHeaders: {
|
190 |
-
poedit: true,
|
191 |
-
'report-msgid-bugs-to': 'https://github.com/ReduxFramework/ReduxFramework/issues',
|
192 |
-
'language-team': 'LANGUAGE <support@reduxframework.com>'
|
193 |
-
}
|
194 |
-
}
|
195 |
-
}
|
196 |
-
},
|
197 |
-
|
198 |
-
// Check textdomain errors.
|
199 |
-
checktextdomain: {
|
200 |
-
options: {
|
201 |
-
keywords: [
|
202 |
-
'__:1,2d',
|
203 |
-
'_e:1,2d',
|
204 |
-
'_x:1,2c,3d',
|
205 |
-
'esc_html__:1,2d',
|
206 |
-
'esc_html_e:1,2d',
|
207 |
-
'esc_html_x:1,2c,3d',
|
208 |
-
'esc_attr__:1,2d',
|
209 |
-
'esc_attr_e:1,2d',
|
210 |
-
'esc_attr_x:1,2c,3d',
|
211 |
-
'_ex:1,2c,3d',
|
212 |
-
'_n:1,2,4d',
|
213 |
-
'_nx:1,2,4c,5d',
|
214 |
-
'_n_noop:1,2,3d',
|
215 |
-
'_nx_noop:1,2,3c,4d'
|
216 |
-
]
|
217 |
-
},
|
218 |
-
redux: {
|
219 |
-
cwd: 'ReduxCore/',
|
220 |
-
options: {
|
221 |
-
text_domain: 'redux-framework',
|
222 |
-
},
|
223 |
-
src: ['**/*.php'],
|
224 |
-
expand: true
|
225 |
-
},
|
226 |
-
sample: {
|
227 |
-
cwd: 'sample',
|
228 |
-
options: {
|
229 |
-
text_domain: 'redux-framework-demo',
|
230 |
-
},
|
231 |
-
src: ['**/*.php'],
|
232 |
-
expand: true
|
233 |
-
}
|
234 |
-
},
|
235 |
-
|
236 |
-
// Exec shell commands.
|
237 |
-
shell: {
|
238 |
-
options: {
|
239 |
-
stdout: true,
|
240 |
-
stderr: true
|
241 |
-
},
|
242 |
-
// Limited to Maintainers so
|
243 |
-
// txpush: {
|
244 |
-
// command: 'tx push -s' // push the resources
|
245 |
-
// },
|
246 |
-
txpull: {
|
247 |
-
command: 'tx pull -a --minimum-perc=25' // pull the .po files
|
248 |
-
}
|
249 |
-
},
|
250 |
-
|
251 |
-
// Generate MO files.
|
252 |
-
potomo: {
|
253 |
-
dist: {
|
254 |
-
options: {
|
255 |
-
poDel: true
|
256 |
-
},
|
257 |
-
files: [{
|
258 |
-
expand: true,
|
259 |
-
cwd: 'ReduxCore/languages/',
|
260 |
-
src: ['*.po'],
|
261 |
-
dest: 'ReduxCore/languages/',
|
262 |
-
ext: '.mo',
|
263 |
-
nonull: true
|
264 |
-
}]
|
265 |
-
}
|
266 |
-
},
|
267 |
-
|
268 |
-
phpdocumentor: {
|
269 |
-
options: {
|
270 |
-
directory: 'ReduxCore/',
|
271 |
-
target: 'docs/'
|
272 |
-
},
|
273 |
-
generate: {}
|
274 |
-
},
|
275 |
-
|
276 |
-
phplint: {
|
277 |
-
options: {
|
278 |
-
swapPath: './'
|
279 |
-
},
|
280 |
-
core: ["ReduxCore/**/*.php"],
|
281 |
-
plugin: ["class-redux-plugin.php", "index.php", "redux-framework.php"]
|
282 |
-
},
|
283 |
-
|
284 |
-
sass: {
|
285 |
-
fields: {
|
286 |
-
options: {
|
287 |
-
sourcemap: 'none',
|
288 |
-
style: 'compressed',
|
289 |
-
noCache: true,
|
290 |
-
},
|
291 |
-
|
292 |
-
files: [{
|
293 |
-
expand: true, // Enable dynamic expansion.
|
294 |
-
cwd: 'ReduxCore/inc/fields', // Src matches are relative to this path.
|
295 |
-
src: ['**/*.scss'], // Actual pattern(s) to match.
|
296 |
-
dest: 'ReduxCore/inc/fields', // Destination path prefix.
|
297 |
-
ext: '.css' // Dest filepaths will have this extension.
|
298 |
-
}]
|
299 |
-
},
|
300 |
-
extensions: {
|
301 |
-
options: {
|
302 |
-
sourcemap: 'none',
|
303 |
-
style: 'compressed',
|
304 |
-
noCache: true,
|
305 |
-
},
|
306 |
-
|
307 |
-
files: [{
|
308 |
-
expand: true, // Enable dynamic expansion.
|
309 |
-
cwd: 'ReduxCore/inc/extensions', // Src matches are relative to this path.
|
310 |
-
src: ['**/*.scss'], // Actual pattern(s) to match.
|
311 |
-
dest: 'ReduxCore/inc/extensions', // Destination path prefix.
|
312 |
-
ext: '.css' // Dest filepaths will have this extension.
|
313 |
-
}]
|
314 |
-
},
|
315 |
-
vendor: {
|
316 |
-
options: {
|
317 |
-
sourcemap: 'none',
|
318 |
-
style: 'compressed',
|
319 |
-
noCache: true
|
320 |
-
},
|
321 |
-
|
322 |
-
files: {
|
323 |
-
"ReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css": [
|
324 |
-
"ReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.scss"
|
325 |
-
],
|
326 |
-
"ReduxCore/assets/css/vendor/elusive-icons/elusive-icons.css": [
|
327 |
-
"ReduxCore/assets/css/vendor/elusive-icons/scss/elusive-icons.scss"
|
328 |
-
],
|
329 |
-
}
|
330 |
-
},
|
331 |
-
|
332 |
-
admin: {
|
333 |
-
options: {
|
334 |
-
sourcemap: 'none',
|
335 |
-
style: 'compressed',
|
336 |
-
noCache: true
|
337 |
-
},
|
338 |
-
|
339 |
-
files: {
|
340 |
-
"ReduxCore/assets/css/color-picker/color-picker.css": [
|
341 |
-
"ReduxCore/assets/css/color-picker/color-picker.scss"
|
342 |
-
],
|
343 |
-
"ReduxCore/assets/css/media/media.css": [
|
344 |
-
"ReduxCore/assets/css/media/media.scss"
|
345 |
-
],
|
346 |
-
"ReduxCore/assets/css/redux-admin.css": [
|
347 |
-
"ReduxCore/assets/css/redux-admin.scss"
|
348 |
-
],
|
349 |
-
"ReduxCore/assets/css/rtl.css": [
|
350 |
-
"ReduxCore/assets/css/rtl.scss"
|
351 |
-
]
|
352 |
-
}
|
353 |
-
},
|
354 |
-
welcome: {
|
355 |
-
options: {
|
356 |
-
sourcemap: 'none',
|
357 |
-
style: 'compressed',
|
358 |
-
noCache: true
|
359 |
-
},
|
360 |
-
|
361 |
-
files: {
|
362 |
-
"ReduxCore/inc/welcome/css/redux-welcome.css": [
|
363 |
-
"ReduxCore/inc/welcome/css/redux-welcome.scss"
|
364 |
-
]
|
365 |
-
}
|
366 |
-
}
|
367 |
-
},
|
368 |
-
|
369 |
-
cssmin: {
|
370 |
-
fields: {
|
371 |
-
files: {
|
372 |
-
'ReduxCore/assets/css/redux-fields.css': [
|
373 |
-
'ReduxCore/inc/fields/**/*.css',
|
374 |
-
"ReduxCore/assets/css/color-picker/color-picker.css",
|
375 |
-
"ReduxCore/assets/css/media/media.css"
|
376 |
-
]
|
377 |
-
}
|
378 |
-
},
|
379 |
-
}
|
380 |
-
}
|
381 |
-
);
|
382 |
-
|
383 |
-
// Load NPM tasks to be used here
|
384 |
-
grunt.loadNpmTasks( 'grunt-shell' );
|
385 |
-
grunt.loadNpmTasks( 'grunt-potomo' );
|
386 |
-
grunt.loadNpmTasks( 'grunt-wp-i18n' );
|
387 |
-
grunt.loadNpmTasks( 'grunt-checktextdomain' );
|
388 |
-
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
|
389 |
-
grunt.loadNpmTasks( 'grunt-contrib-sass' );
|
390 |
-
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
|
391 |
-
grunt.loadNpmTasks( 'grunt-contrib-watch' );
|
392 |
-
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
|
393 |
-
grunt.loadNpmTasks( 'grunt-contrib-concat' );
|
394 |
-
grunt.loadNpmTasks( 'grunt-phpdocumentor' );
|
395 |
-
grunt.loadNpmTasks( 'grunt-gh-pages' );
|
396 |
-
grunt.loadNpmTasks( "grunt-phplint" );
|
397 |
-
//grunt.loadNpmTasks( 'grunt-recess' );
|
398 |
-
|
399 |
-
grunt.registerTask(
|
400 |
-
'langUpdate', [
|
401 |
-
'addtextdomain',
|
402 |
-
'makepot',
|
403 |
-
'shell:txpull',
|
404 |
-
'potomo'
|
405 |
-
]
|
406 |
-
);
|
407 |
-
|
408 |
-
// Default task(s).
|
409 |
-
grunt.registerTask(
|
410 |
-
'default', [
|
411 |
-
'jshint',
|
412 |
-
'concat:core',
|
413 |
-
'uglify:core',
|
414 |
-
'concat:vendor',
|
415 |
-
'uglify:vendor',
|
416 |
-
'uglify:fields',
|
417 |
-
'uglify:extensions',
|
418 |
-
"sass:admin",
|
419 |
-
"sass:fields",
|
420 |
-
"sass:extensions",
|
421 |
-
"sass:vendor",
|
422 |
-
'cssmin'
|
423 |
-
]
|
424 |
-
);
|
425 |
-
grunt.registerTask( 'travis', ['jshint', 'lintPHP'] );
|
426 |
-
|
427 |
-
// this would be run by typing "grunt test" on the command line
|
428 |
-
grunt.registerTask( 'testJS', ['jshint', 'concat:core', 'concat:vendor'] );
|
429 |
-
|
430 |
-
grunt.registerTask( 'watchUI', ['watch:ui'] );
|
431 |
-
grunt.registerTask( 'watchPHP', ['watch:php', 'phplint:core', 'phplint:plugin'] );
|
432 |
-
|
433 |
-
grunt.registerTask( "lintPHP", ["phplint:plugin", "phplint:core"] );
|
434 |
-
grunt.registerTask( "compileSCSS", ["sass:admin", "sass:fields", "sass:extensions", "sass:vendor", "sass:welcome"] );
|
435 |
-
grunt.registerTask(
|
436 |
-
'compileJS',
|
437 |
-
['jshint', 'concat:core', 'uglify:core', 'concat:vendor', 'uglify:vendor', 'uglify:fields', 'uglify:extensions']
|
438 |
-
);
|
439 |
-
grunt.registerTask( 'compileTestJS', ['jshint', 'concat:core', 'concat:vendor'] );
|
440 |
-
grunt.registerTask( 'compileCSS', ['cssmin'] );
|
441 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/README.md
DELETED
@@ -1,84 +0,0 @@
|
|
1 |
-
## Redux Options Framework [![Build Status](https://travis-ci.org/reduxframework/redux-framework.png?branch=master)](https://travis-ci.org/ReduxFramework/redux-framework) [![Stories in Ready](https://badge.waffle.io/ReduxFramework/redux-framework.png?label=ready)](https://waffle.io/ReduxFramework/redux-framework) [![Built with Grunt](https://cdn.gruntjs.com/builtwith.png)](http://gruntjs.com/)
|
2 |
-
|
3 |
-
WordPress options framework which uses the [WordPress Settings API](http://codex.wordpress.org/Settings_API "WordPress Settings API"), Custom Error/Validation Handling, Custom Field/Validation Types, and import/export functionality.
|
4 |
-
|
5 |
-
## Posting Guidelines for issues and questions ##
|
6 |
-
When using our Issue Tracker, you may ask questions where you may be a bit lost or need help understanding the documentation. If, however, you find a bug we require you to read and provide the information contained in our [Contributing Guidelines](https://github.com/ReduxFramework/redux-framework/blob/master/CONTRIBUTING.md). If you do not provide this information, we will request it before we can support you.
|
7 |
-
|
8 |
-
If you are stuck in some of your own code, or need help with PHP and anything else not Redux specific, we request you purchase some [Premium Support](http://reduxframework.com/extension/premium-support/) and we will be happy to assist you. If we feel the issue is outside of our scope we will suggest you to purchase some [Premium Support](http://reduxframework.com/extension/premium-support/) in order for us to serve you.
|
9 |
-
|
10 |
-
## Kickstart Your Development ##
|
11 |
-
|
12 |
-
Are you authoring a theme, or plugin? Visit the [Redux Builder](http://build.reduxframework.com) site and get started!
|
13 |
-
|
14 |
-
## Demo Your Products ##
|
15 |
-
We help you create a seamless user experience for your users to demo your WordPress products. Not only that, we help you make sure they’re engaged, turning them into a potential customer. Visit [wpdemo.io/](http://wpdemo.io/)
|
16 |
-
|
17 |
-
## Documentation ##
|
18 |
-
|
19 |
-
Need a little help with Redux? Come check out our brand new documentation site at [docs.reduxframework.com](http://docs.reduxframework.com), chock full of tutorials and examples!
|
20 |
-
|
21 |
-
|
22 |
-
## SMOF (Simple Modified Option Users) Converter! ##
|
23 |
-
|
24 |
-
Hot off the press, our Redux Converter plugin. It takes your SMOF instance, and allows you to try out Redux without any fear. It also spits out valid PHP source for you if you want to migrate complete with data migration! Give it a try today. It will be in the WordPress.org repo shortly. ;)
|
25 |
-
https://github.com/ReduxFramework/redux-converter
|
26 |
-
|
27 |
-
## Help Us Translate Redux ##
|
28 |
-
|
29 |
-
Please head over to the wiki to learn how you can help us translate Redux quickly. Any and all are welcome. We appreciate your help!
|
30 |
-
https://github.com/ReduxFramework/ReduxFramework/wiki/translate
|
31 |
-
|
32 |
-
## Getting Started with Redux ##
|
33 |
-
|
34 |
-
ReduxFramework has been built from the ground up to be the most flexible framework around. You can run it as an auto-updating plugin, or embed it inside your plugin or theme. It allows for multiple copies of itself within the same WordPress instance. For a guide on getting started please refer to [https://github.com/ReduxFramework/redux-framework/wiki/Getting-Started](https://github.com/ReduxFramework/redux-framework/wiki/Getting-Started).
|
35 |
-
|
36 |
-
You can also [download our sample theme available here](https://github.com/ReduxFramework/ReduxSampleTheme) to start developing right away.
|
37 |
-
|
38 |
-
## Please Post Reviews and Spread the Word ##
|
39 |
-
|
40 |
-
ReduxFramework has just released to the WordPress Plugins directory. Please spread the word, tweet, and (most importantly) post reviews on http://wordpress.org/plugins/redux-framework/.
|
41 |
-
|
42 |
-
|
43 |
-
## Donate to the Framework ##
|
44 |
-
|
45 |
-
If you can, please donate to help support the ongoing development of Redux Framework!
|
46 |
-
|
47 |
-
[![Donate to the framework](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif "Donate to the framework")](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MMFMHWUPKHKPW)
|
48 |
-
|
49 |
-
## Features ##
|
50 |
-
|
51 |
-
* Uses the [WordPress Settings API](http://codex.wordpress.org/Settings_API "WordPress Settings API")
|
52 |
-
* Multiple built in field types
|
53 |
-
* Multple layout field types
|
54 |
-
* Fields can be overloaded with a callback function, for custom field types
|
55 |
-
* Easily extendable by creating Field Classes
|
56 |
-
* Built in Validation Classes
|
57 |
-
* Easily extendable by creating Validation Classes
|
58 |
-
* Custom Validation error handling, including error counts for each section, and custom styling for error fields
|
59 |
-
* Custom Validation warning handling, including warning counts for each section, and custom styling for warning fields
|
60 |
-
* Multiple Hook Points for customisation
|
61 |
-
* Import / Export Functionality - including cross site importing of settings
|
62 |
-
* Easily add page help through the class
|
63 |
-
* Fully responsive options panel
|
64 |
-
* Much more
|
65 |
-
|
66 |
-
## Stay In The Loop! ##
|
67 |
-
|
68 |
-
[![Follow us on Twitter](http://iod.unh.edu/Images/Twitter_follow_us.png "Follow us on Twitter")](https://www.twitter.com/ReduxFramework)
|
69 |
-
|
70 |
-
## FAQs ##
|
71 |
-
|
72 |
-
1. Why should we use ```require_once``` instead of ```get_template_part```?
|
73 |
-
* First, because ```get_template_part``` is for... you guessed it, themes! Redux is designed to work with both themes *and* plugins.
|
74 |
-
* Second, read [this](http://kovshenin.com/2013/get_template_part/).
|
75 |
-
2. Why shouldn't we edit ```sample-config.php``` in the plugin directory?
|
76 |
-
* Because ```sample-config.php``` will be replaced at each update of the plugin. You will lose all your effort
|
77 |
-
|
78 |
-
## Are you using Redux? ##
|
79 |
-
|
80 |
-
Send us an email at info@reduxframework.com so we can add you to our showcase!
|
81 |
-
|
82 |
-
## Changelog ##
|
83 |
-
|
84 |
-
See [Changelog.md](https://github.com/ReduxFramework/redux-framework/blob/master/CHANGELOG.md)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/README.txt
DELETED
@@ -1,1024 +0,0 @@
|
|
1 |
-
=== Redux Framework ===
|
2 |
-
Contributors: dovyp, kprovance
|
3 |
-
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=N5AD7TSH8YA5U
|
4 |
-
Tags: admin, admin interface, options, theme options, plugin options, options framework, settings, web fonts, google fonts
|
5 |
-
Requires at least: 3.5.1
|
6 |
-
Tested up to: 4.2
|
7 |
-
Stable tag: 3.5.4.3
|
8 |
-
License: GPLv3 or later
|
9 |
-
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
-
|
11 |
-
Redux is a simple, truly extensible and fully responsive options framework for WordPress themes and plugins. Ships with an integrated demo.
|
12 |
-
|
13 |
-
== Description ==
|
14 |
-
|
15 |
-
Redux is a simple, truly extensible and fully responsive options framework for WordPress themes and plugins. Built on the WordPress Settings API, Redux supports a multitude of field types as well as: custom error handling, custom fields & validation types, and import/export functionality.
|
16 |
-
|
17 |
-
But what does Redux actually DO? We don't believe that theme and plugin
|
18 |
-
developers should have to reinvent the wheel every time they start work on a
|
19 |
-
project. Redux is designed to simplify the development cycle by providing a
|
20 |
-
streamlined, extensible framework for developers to build on. Through a
|
21 |
-
simple, well-documented config file, third-party developers can build out an
|
22 |
-
options panel limited only by their own imagination in a fraction of the time
|
23 |
-
it would take to build from the ground up!
|
24 |
-
|
25 |
-
= Online Demo =
|
26 |
-
Don't take our word for it, check out our online demo and try Redux without installing a thing!
|
27 |
-
[**http://demo.redux.io/**](http://demo.redux.io/)
|
28 |
-
|
29 |
-
= Use the Redux Builder to Get Started =
|
30 |
-
Want to use Redux, but not sure what to do? Use our [builder](http://build.reduxframework.com/)! It will allow you to make
|
31 |
-
a custom theme based on [_s](http://underscores.me), [TGM](http://tgmpluginactivation.com), and [Redux](http://reduxframework.com), and any Redux arguments you want to set.
|
32 |
-
Don't want to make your own theme? Then output a custom admin folder that you can place
|
33 |
-
in a theme or plugin. Oh and did we mention it's free? Try it today at:
|
34 |
-
[**http://build.reduxframework.com/**](http://build.reduxframework.com/)
|
35 |
-
|
36 |
-
|
37 |
-
= Docs & Support =
|
38 |
-
We have extremely extensive docs. Please visit [http://docs.reduxframework.com/](http://docs.reduxframework.com/) If that doesn’t solve your concern, you should search [the issue tracker on Github](https://github.com/reduxframework/redux-framework/issues). If you can't locate any topics that pertain to your particular issue, [post a new issue](https://github.com/reduxframework/redux-framework/issues/new) for it. Before you submit an issue, please read [our contributing requirements](https://github.com/redux-framework/redux-framework/blob/master/CONTRIBUTING.md). We build off of the dev version and push to WordPress.org when all is confirmed stable and ready for release.
|
39 |
-
|
40 |
-
|
41 |
-
= Redux Framework Needs Your Support =
|
42 |
-
It is hard to continue development and support for this free plugin without contributions from users like you. If you enjoy using Redux Framework, and find it useful, please consider [making a donation](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MMFMHWUPKHKPW). Your donation will help encourage and support the plugin's continued development and better user support.
|
43 |
-
|
44 |
-
= Fields Types =
|
45 |
-
|
46 |
-
* Background
|
47 |
-
* Border
|
48 |
-
* Button Set
|
49 |
-
* Checkbox / Multi-Check
|
50 |
-
* Color (WordPress Native)
|
51 |
-
* Color Gradient
|
52 |
-
* Color RGBA
|
53 |
-
* Date
|
54 |
-
* Dimensions (Height/Width)
|
55 |
-
* Divide (Divider)
|
56 |
-
* Editor (WordPress Native)
|
57 |
-
* Gallery (WordPress Native)
|
58 |
-
* Image Select (Patterns/Presets)
|
59 |
-
* Import/Export
|
60 |
-
* Info (Header/Notice)
|
61 |
-
* Link Color
|
62 |
-
* Media (WordPress Native)
|
63 |
-
* Multi-Text
|
64 |
-
* Password
|
65 |
-
* Radio (w/ WordPress Data)
|
66 |
-
* Raw (HTML/PHP/MarkDown)
|
67 |
-
* Section (Indent and Group Fields)
|
68 |
-
* Select (Select/Multi-Select w/ Select2 & WordPress Data)
|
69 |
-
* Select Image
|
70 |
-
* Slider (Drag a Handle)
|
71 |
-
* Slides (Multiple Images, Titles, and Descriptions)
|
72 |
-
* Sortable (Drag/Drop Checkbox/Input Fields)
|
73 |
-
* Sorter (Drag/Drop Manager - Works great for content blocks)
|
74 |
-
* Spacing (Margin/Padding/Absolute)
|
75 |
-
* Spinner
|
76 |
-
* Switch
|
77 |
-
* Text
|
78 |
-
* Textarea
|
79 |
-
* Typography
|
80 |
-
* The most advanced typography module complete with preview, Google fonts, and auto-css output!
|
81 |
-
|
82 |
-
= Additional Features =
|
83 |
-
|
84 |
-
* Field Validation
|
85 |
-
* MANY translations. (See below)
|
86 |
-
* Full value escaping.
|
87 |
-
* Required - Link visibility from parent fields. Set this to affect the visibility of the field on the parent's value. Fully nested with multiple required parents possible.
|
88 |
-
* Output CSS Automatically - Redux generates CSS and the appropriate Google Fonts stylesheets for you on select fields. You need only specify the CSS selector to apply the CSS to (limited to certain fields).
|
89 |
-
* Compiler integration! A custom hook runs when any fields with the argument `compile => true` are changed.
|
90 |
-
* Oh, and did we mention a fully integrated Google Webfonts setup that will make you so happy you'll want to cry?
|
91 |
-
|
92 |
-
|
93 |
-
= Translators & Non-English Speakers =
|
94 |
-
We need your help to translate Redux into your language! Redux is part of the WP-Translations.org team. To help us translate Redux create a few account here: <a href="https://www.transifex.com/organization/wp-translations">https://www.transifex.com/organization/wp-translations</a>. Once you're in, you can head over to the <a href="https://www.transifex.com/projects/p/redux-framework/">Redux sub-project</a> and translate away. Thank you for your assistance.
|
95 |
-
|
96 |
-
= Get Involved =
|
97 |
-
Redux is an ever-changing, living system. Want to stay up to date or
|
98 |
-
contribute? Subscribe to one of our mailing lists or join us on [Facebook](https://facebook.com/reduxframework) or [Twitter](https://twitter.com/reduxframework) or [Github](https://github.com/ReduxFramework/ReduxFramework)!
|
99 |
-
|
100 |
-
NOTE: Redux is not intended to be used on its own. It requires a config file
|
101 |
-
provided by a third-party theme or plugin developer to actual do anything
|
102 |
-
cool!
|
103 |
-
|
104 |
-
== Installation ==
|
105 |
-
|
106 |
-
= For Complete Documentation and Examples =
|
107 |
-
Visit: [http://docs.reduxframework.com/](http://docs.reduxframework.com/)
|
108 |
-
|
109 |
-
== Frequently Asked Questions ==
|
110 |
-
|
111 |
-
= Why doesn't this plugin do anything? =
|
112 |
-
|
113 |
-
Redux is an options framework... in other words, it's not designed to do anything on its own! You can however activate a demo mode to see how it works.
|
114 |
-
|
115 |
-
= How can I learn more about Redux? =
|
116 |
-
|
117 |
-
Visit our website at [http://reduxframework.com/](http://reduxframework.com/)
|
118 |
-
|
119 |
-
= You don't have much content in this FAQ section =
|
120 |
-
That's because the real FAQ section is on our site! Please visit [http://docs.reduxframework.com/faq/](http://docs.reduxframework.com/faq/)
|
121 |
-
|
122 |
-
== Screenshots ==
|
123 |
-
|
124 |
-
1. This is the demo mode of Redux Framework. Activate it and you will find a fully-functional admin panel that you can play with. On the Plugins page, beneath the description and an activated Redux Framework, you will find a Demo Mode link. Click that link to activate or deactivate the sample-config file Redux ships with. Don't take our word for it, check out our online demo and try Redux without installing a thing! [**http://demo.reduxframework.com/wp-admin/**](http://demo.reduxframework.com/wp-admin/)
|
125 |
-
|
126 |
-
== Changelog ==
|
127 |
-
|
128 |
-
= 3.5.4.3 =
|
129 |
-
Fixed: #2258 - welcome redirect error with embedding plugin scenarios.
|
130 |
-
Fixed: Redux plugin load order when activating plugins.
|
131 |
-
Fixed: #2271 - stuck redirect on godaddy (seriously, get a real host, people) servers.
|
132 |
-
Fixed: #2216 - Reset section not always working within FF.
|
133 |
-
|
134 |
-
= 3.5.4 =
|
135 |
-
* Modified: update_notice arg only truly shows up if dev_mode is on.
|
136 |
-
* Added: Tooltip to developer mode badge, for informational purposes.
|
137 |
-
* Modified: Added css_layout ext to default value filter, to avoid errors.
|
138 |
-
* Fixed: #2239 - Various extensions didn't support default values for default arg. Filtered out offending extensions.
|
139 |
-
|
140 |
-
= 3.5.3.1 =
|
141 |
-
* Fixed: WP.org ONLY SVN mixup.
|
142 |
-
|
143 |
-
= 3.5.3 =
|
144 |
-
* Fixed: #2228 - Submenu items still visible if permissions not allowed.
|
145 |
-
* Fixed: Import/Export showing up in customizer.
|
146 |
-
* Modified: Admin-fresh theme to match new WordPress 4.2
|
147 |
-
* Modified: Redux widget now has a proper ID. Thanks @corradomatt!
|
148 |
-
* Modified: Added text-shadow to submenu items to give a stronger "pop"
|
149 |
-
* Modified: Page_slug now dynamically generated if not specified.
|
150 |
-
* Modified: Admin blast message pinging server on each load after three day expiration. Possible slow down of the overall panel loading time.
|
151 |
-
* Fixed: #2221 - Background field media not enqueueing when used with no other media based fields.
|
152 |
-
* Fixed: #2214: Bad path for import/export enqueue.
|
153 |
-
* Release: Wp.org release.
|
154 |
-
* Fixed: #2214 - Import/export field contained bad enqueue path.
|
155 |
-
* Modified: If running localhost or WP_DEBUG is set to true, Redux dev_mode is forced to true.
|
156 |
-
* Modified: Page_slug now dynamically generated if not specified.
|
157 |
-
|
158 |
-
= 3.5.1 =
|
159 |
-
* Modified: Redux News dashboard widget appears only when dev_mode is true or in a local host environment.
|
160 |
-
* Fixed #2127 - Elusive icons not working in footer as before.
|
161 |
-
* Fixed Issue where Status tab not showing extension versions properly.
|
162 |
-
* Fixed Issue in support URL not passing data correctly.
|
163 |
-
* Fixed Support URLs now work even if max_input_vars is way low in PHP 5.3+
|
164 |
-
* Fixed #2197 - Import/export not loading proper for those who have opted to install Wordpress in ways it was never intended.
|
165 |
-
* Fixed: 'Generate Support URL' feature kicking back error.
|
166 |
-
* Fixed Sortable checkbox labels not displaying properly.
|
167 |
-
* Fixed Sortable textbox not displaying default value as placeholder.
|
168 |
-
* Updated: sample-config with accurate example for both sortable modes.
|
169 |
-
* Fixed #2181 - Fixed issue with Ajax Save when PHP 5.3 Magic Quotes were disabled.
|
170 |
-
* Fixed: #2181 - Lingering issue with Ajax Save and PHP Magic Quotes.
|
171 |
-
|
172 |
-
= 3.5.0 =
|
173 |
-
* Fixed: #2181 - Issue with PHP < 5.4 and the Ace Editor field. Oy.
|
174 |
-
* Fixed: #2163 - Undefined error in JS.
|
175 |
-
* Fixed: #2176 - Infinite loop in the customizer for live preview of themes.
|
176 |
-
* Fixed: Support page now works.
|
177 |
-
* Fixed: Fix for MySQL deprecated functions in php 5.5+.
|
178 |
-
* Added: Dynamic admin messages (aka Newsflash). Dismissable admin messages announcing breaking Redux news.
|
179 |
-
Messages will not appear for users when dev_mode is set to `false`. However, messages remain active
|
180 |
-
on localhosts, so devs may benefit.
|
181 |
-
* Fixed: #2155 - Fixed import with ajax_save.
|
182 |
-
* Fixed: Changelog now uses raw field parsedown if present.
|
183 |
-
* Added: Redux Framework News Widget on the WP Dashboard.
|
184 |
-
* Fixed: #2156: `label` argument not recognized when using sortable as textbox.
|
185 |
-
* Fixed: #2140 Another PHP 5.2 issue with ajax_save.
|
186 |
-
* Modified: Opt groups for select field now working in customizer even if not supported.
|
187 |
-
* Added: `full_width` arg now makes ANY field full-width. :)
|
188 |
-
* Fixed: #2133 - Ajax save adding extra backspashes in PHP 5.2 only (They didn't use array map properly).
|
189 |
-
* Fixed: Customizer wasn't working. Thanks @sgssandhu!
|
190 |
-
* Fixed: #2125 - Compiler not firing on first save, when using ajax_save.
|
191 |
-
* Fixed: #2118 - Typography JS error.
|
192 |
-
* Fixed: Odd typography bug no one has reported.
|
193 |
-
* Modified: Sticky header and footer to remain within the redux-main container.
|
194 |
-
* Fixed #2097 - Slash fix for ajax_save that was previously believed to be an isolated issue. Now applied on all ajax saves.
|
195 |
-
* Fixed: #2086 - color_rgba improperly functioning when transparent mode set to false.
|
196 |
-
* Fixed Import/Export bug where it wasn't running.
|
197 |
-
* Modified Locations of the core extensions directory as well as grunt configuration.
|
198 |
-
* Fixed #2047 - Validation will now accept 0 as a value to be tested. Thanks @Ninos!
|
199 |
-
* Added url_slug validation with option flush_permalinks!
|
200 |
-
* Fixed Issue where the remove of background field was always showing an empty preview box.
|
201 |
-
* Modified Turned ajax_save on by default for additional bug reports. ;)
|
202 |
-
* Modified Added some margin above validation errors/warnings so they look better.
|
203 |
-
* Modified Removed previous element border for any section so it looks better.
|
204 |
-
* Fixed #2081 - Section field hiding any field after. Weird.
|
205 |
-
* Added #2047 - `output_transparent` argument to output the blank color feature as 'transparent'.
|
206 |
-
* Fixed #2080 - missing 'rem' unit and inability to process float values. Thanks to @HELWATANY for the fixes!
|
207 |
-
* Fixed #2043 - misaligned images in image_select field.
|
208 |
-
* Added: #2064 - Merge argument for image_select. Thanks @Ninos
|
209 |
-
* Modified: Import/Export is now an extensiona and decoupled from the core.
|
210 |
-
* Fixed: Spinner had a nasty number bug, now resolved.
|
211 |
-
* Fixed: #2076 - RTL bug with old ID's. Thanks @mahfoozroy.
|
212 |
-
* Fixed: #2072 - Ajax_save editor type bug fix.
|
213 |
-
* Fixed: #2058 - Incorrect path in include statement for sysinfo.php
|
214 |
-
* Modified: Templates now have versioning with a warning (dev_mode only) if they are outdated from the core templates.
|
215 |
-
* Modified: Ajax saving now has overlay during save to avoid confusion for users.
|
216 |
-
* Modified: Template files even more for simplicity and ease.
|
217 |
-
* Modified: Saving. Redux now has the ajax_save argument if you want it!
|
218 |
-
* Modified: Validation warnings now work.
|
219 |
-
* Fixed: Changed set_transient function to public to avoid errors in new templating code.
|
220 |
-
* Modified: Entire panel template is now decoupled from the theme and implemented with many filters for easy customization.
|
221 |
-
* Fixed: #1478 - Import/export failing when two instances if Redux in use. Thanks, @desaiuditd!
|
222 |
-
* Fixed: Section field not indenting properly, if at all.
|
223 |
-
* Added: #2031 - Proper CSS sanitization for compliancy with WP.org.
|
224 |
-
* Fixed: #2027 - added isset()
|
225 |
-
* Fixed: #2019 - Reset issues with PHP 5.2. Thanks a bunch, @Webcreations907!
|
226 |
-
* Fixed: #2023: Issue with custom submenus in menu.
|
227 |
-
* Fixed: #2025: Issue with select sorting.
|
228 |
-
* Update: ACE Editor. Thanks @corradomatt.
|
229 |
-
|
230 |
-
= 3.4.1 =
|
231 |
-
* Fixed: Small filesystem option with bad filter key reference..
|
232 |
-
* Added: Small return if $section filter returned the section empty.
|
233 |
-
|
234 |
-
= 3.4.0 =
|
235 |
-
* Fixed: Reset section hook firing too early.
|
236 |
-
* Modified: The Redux Repeater field has landed!
|
237 |
-
* Fixed: #1983 - color_rgba not outputting default values on first load (before save).
|
238 |
-
* Fixed: Google font enqueues with opt_name to avoid collision with multiple Redux instances.
|
239 |
-
* Fixed: #1980 - JS errors with sorter & sortable.
|
240 |
-
* Fixed: color_rgba field outputting incorrect information via output/compiler.
|
241 |
-
* Fixed: #1979 - Goole fonts not properly loading in typography dropdown.
|
242 |
-
* Fixed: Undefined index error on MU installs.
|
243 |
-
* Removed: SASS compile of field CSS, for the time being. Compiler remains in core.
|
244 |
-
* Improved: Panel load time, most notable when not in dev_mode. Better for your clients. :)
|
245 |
-
* Updated: Elusive Font library.
|
246 |
-
* Fixed: #1961 - color_rgba field defaulting to black on reset.
|
247 |
-
* Fixed: #1941 - Datepicker opened off screen.
|
248 |
-
* Fixed: #1756, #1957 - Slider issues. Thanks @FFIN!
|
249 |
-
* Fixed: #1960 - Duplicate slide when clicking Add. Again, thanks to @FFIN for the fix.
|
250 |
-
* Added: New filter: apply_filters 'redux/validate/{opt_name}/before_validation'
|
251 |
-
* Fixed: #1745 - Adding settings submenu to empty submenu now works. Many, many thanks to @No3x for cracking this one!
|
252 |
-
* Fixed: #1955 - Undefined index rgba in output routine.
|
253 |
-
* Modified: #1947 - Added display:none to TR tag under info field.
|
254 |
-
* Replaced: #1951 - Replaced develop branch of scssphp to master branch due to PHP 5.2 incompatibililty.
|
255 |
-
* Fixed: #1943 - Removed premature DIV close.
|
256 |
-
* Fixed: #1945 - Media preview not rendering when default ID specified.
|
257 |
-
* Modified: #1930 - reorder 'psedo-class of link_color field. Thanks @freddessaint
|
258 |
-
* Modified: SASS compiler outputs to page by default. Faster.
|
259 |
-
* Fixed: #1927 - Incorrect dir path to spectrum library in color_rgba field corrected.
|
260 |
-
* Modified: color_rgba field now usees spectrum color picker. minicolors removed. Just...too buggy.
|
261 |
-
* Modified: #1922 - Filesystem output function.
|
262 |
-
* Fixed: Added PHP 5.2 support (ugh!) for SASS compiler.
|
263 |
-
* Fixed: More SASS compiler tweaking.
|
264 |
-
* Fixed: PHP errors when disabling SASS.
|
265 |
-
* Fixed #1909 - malformed DIV class HTML in slider field.
|
266 |
-
* Removed Argument for SASS compile file output location removed. Didn't work, too much trouble.
|
267 |
-
* Fixed: #1904 - select_image field not displaying saved value on page reload.
|
268 |
-
* Fixed: SASS compile under multi-instance outputting incorrect CSS file
|
269 |
-
* Fixed: redux-admin scss images converted to base64
|
270 |
-
* Added SASS compiler for admin CSS.
|
271 |
-
* Added SASS to CSS for grunt compiler.
|
272 |
-
* Added SASS compiler for fields.
|
273 |
-
* Updated: select2 3.5.2
|
274 |
-
* Fixed: #1856 - Illegal offset string warnings in framework.php. Thanks @CGlingener.
|
275 |
-
* Fixed: #1874 - Required operator 'contains' and 'not_contains' not working with select set to multi.
|
276 |
-
* Fixed: #1829 - Required operator '=' and '!=' not working with select set to multi.
|
277 |
-
* Fixed: #1870 - Border field doubling up on px in output/compiler.
|
278 |
-
* Added: `hidden` argument for fields.
|
279 |
-
* Added: `hidden` argument for sections.
|
280 |
-
* Fixed: #1868 - Improper panel render when opening expanded, when `open_expanded` set to true.
|
281 |
-
* Added: `hide_expand` argument, to hide the expand options button.
|
282 |
-
* Fixed: #1865 - Sortable select not saving proper order.
|
283 |
-
* Fixed: #1864 - Footer z-index CSS adjusted.
|
284 |
-
* Fixed: #1848 - Import-export filed buttons not functioning properly.
|
285 |
-
* Fixed: #1834 - Wordpress data dealing with IDs as array keys not rendering properly.
|
286 |
-
* Fixed: #1830 - Font lists were added in quotes. Thanks @karimhossenbux.
|
287 |
-
* Fixed: #1798 - Fixed lazy load JS to only load visible sections. Much more optimized.
|
288 |
-
* Fixed: #1821 - Exo 2 font not working, issue with typography and escaping.
|
289 |
-
* Added: #1803 - Optgroup support for select field.
|
290 |
-
* Added: Decimal increments to spinner.
|
291 |
-
|
292 |
-
= 3.3.9.4 =
|
293 |
-
* Added: Customizer now supports PANEL! Yay 4.0.
|
294 |
-
* Fixed: #1789 - Customizer now properly working again with WP 4.0. Odd bug.
|
295 |
-
|
296 |
-
= 3.3.9.2 =
|
297 |
-
* Fixed: #1670 - Fixed some extra themecheck and customizer issues.
|
298 |
-
* Fixed: #1782 - Media field not showing files after upload? Hopefully this fixes it.
|
299 |
-
|
300 |
-
= 3.3.9 =
|
301 |
-
* Fixed: #1775 - Call to undefined function is_customize_preview() in pre WP 4.0.
|
302 |
-
* Fixed: Issue where in some cases tracking still occuring after opt-out.
|
303 |
-
* Modified: Documentation URL.
|
304 |
-
* Fixed: #1742 - Sidebar subsections don't always expand.
|
305 |
-
* Fixed: #1758 - Thanks @echo1consulting!
|
306 |
-
* Added: 'hidden' to menu_type argument to allow for hidden menus until available.
|
307 |
-
* Fixed: #1749 - Remove font-wight and font-style from css output when not in use.
|
308 |
-
* Modified: Added the "redux/options/{$this->args['opt_name']}/compiler/advanced" hook for more advanced compiling.
|
309 |
-
* Added: Suggestions as per #1709. Thanks @echo1consulting.
|
310 |
-
* Modified: Removed a cURL instance from the core and fixed the developer ad resizing.
|
311 |
-
* Fixed: PHP 5.2 issues. *sigh*
|
312 |
-
|
313 |
-
= 3.3.8.3 =
|
314 |
-
* Added: #1593 - Great pull request by @JonasDoebertin. Now you can enqueue dynamic output to the login screen or admin backend.
|
315 |
-
* Fixed: Customizer wasn't saving at all! That's been like 4 months. No one's reported it. Hmm.
|
316 |
-
* Fixed: #1702 - Customizer only fields were being erased on panel save.
|
317 |
-
* Fixed: Various Theme-Check errors with languages.
|
318 |
-
* Added: Theme-Check class to help devs know what is what.
|
319 |
-
* Fixed: The way we include files from include_once to require_once everywhere.
|
320 |
-
* Modified: Language files to reflect new strings.
|
321 |
-
* Modified: Formatted a bunch of old class files.
|
322 |
-
* Added: Notice on the updates for non-devs to use the new dev_mode disabler plugin and notify their developer. ;)
|
323 |
-
|
324 |
-
= 3.3.8 =
|
325 |
-
* Modified: Updated potomo, thanks @shivapoudel.
|
326 |
-
* Added: Grunt checktextdomain and made improvements. Thanks @shivapoudel.
|
327 |
-
* Modified: #1685 - Specifying no default argument for image_select caused errors on reset.
|
328 |
-
* Fixed: #1667 - Slides Upload button causing JS error.
|
329 |
-
* Fixed: #1670 - Fix for Theme Check -> `add_setting() method needs to have a sanitization callback function passed.`
|
330 |
-
* Fixed: #1661 - Fix for undefined index in some versions of PHP. Thanks @gianbalex!
|
331 |
-
* Modified: #1658 - Improvements from @shivapoudel, including:
|
332 |
-
* Removed makepot and used grunt-wp-i18n instead.
|
333 |
-
* Added a jshintrc file
|
334 |
-
* Added a `grunt addtextdomain` to correct any bad textdomains in the core.
|
335 |
-
* Updated .gitignore for better readability
|
336 |
-
* Updates to a few other files including package.json.
|
337 |
-
* Updated language files.
|
338 |
-
* Update codestyles/.editorconfig to reflect the project's standards.
|
339 |
-
* Modified: #1653 - Better admin bar with external links: Admin bar menu priority, icon, and external links. Thanks @shivapoudel!
|
340 |
-
* Added: #1651 - `library_filter` argument. Allows specification of what files to display in the media library.
|
341 |
-
* Modified: #1651 - `mode` argument accepts either file type or mime type (but not both).
|
342 |
-
* Fixed: #1650 - Toogle error with responsive CSS.
|
343 |
-
* Fixed: #1643 - Slight border issue (2px) on sticky footer.
|
344 |
-
* Fixed: #1642 - Added `font_family_clear` arg, enabling the clear option for font-family.
|
345 |
-
* Fixed: #1638 - Spacing field not outputting when units values attached to default values.
|
346 |
-
* Modified #1644 - `import_icon` argument now accepts wordpress dashicons
|
347 |
-
* Fixed: #1634 - Double border for sections field. Thanks @AlexandruDoda
|
348 |
-
* Modified: Changelog location to now Changelog.md.
|
349 |
-
* Fixed: #1632 - Sortable with no defaults set revert to false (instead of options values).
|
350 |
-
* Fixed: Labels for sortable in text mode updated to match framework.
|
351 |
-
|
352 |
-
= 3.3.7 =
|
353 |
-
* Added: #1586 - Class-level declaration for callbacks and validation. Thanks @echo1consulting.
|
354 |
-
* Modified: Typography field now fully dynamic.
|
355 |
-
* Modified: No longer require a google_api_key for the typography module. :)
|
356 |
-
* Fixed: FTP credentials screen giving a "undefined submit_button function". Resolved.
|
357 |
-
* Fixed: #1623 - Registered older noUISlider JS under a new name to avoid conflicts.
|
358 |
-
* Modified: #1622 - Removed googlefonts.js dependency.
|
359 |
-
* Modified: #1628 - Spacing and dimensions now only output 0 if the entry is a 0, not empty.
|
360 |
-
Thanks @Webcreations907
|
361 |
-
* Modified: CSS for menu items when active (no hover).
|
362 |
-
* Added: Visual feedback to left menu if active.
|
363 |
-
|
364 |
-
= 3.3.6.8 =
|
365 |
-
* Fixed: #1600 - ACE Editor bombing in PHP 5.2 environments.
|
366 |
-
* Fixed: #1591 - Erroneous outputting of font-weight and font-style when no font-family selected.
|
367 |
-
* Updated: #1569 - Improved submenu highlighting.
|
368 |
-
* Added: #1487 - Added `get_default_value` function into the framework.php
|
369 |
-
* Fixed: Framework URI errors when using child themes. Some restructuring.
|
370 |
-
* Fixed: Framework URI errors when embedded in theme with Windows.
|
371 |
-
* Added: image_size as an option for the data argument. Thanks @Gyroscopic!
|
372 |
-
* Modified: How Redux paths are run. Should cover all use cases now. Child themes can also embed
|
373 |
-
Redux properly now. Thanks @cfoellmann for the suggestions. Fix for issue #1566.
|
374 |
-
* Modified: How we declare the uploads directory and URL. Using core WP functions now.
|
375 |
-
* Modified: Now if a section is empty, but has subsections, that section will be "skipped" when
|
376 |
-
clicked and the first subsection will then be shown.
|
377 |
-
|
378 |
-
= 3.3.6 =
|
379 |
-
* Fixed: #1560 - IE8 RGBA fallack
|
380 |
-
* Modified: Language files.
|
381 |
-
* Fixed: #1543 - Hint icon not changing when set in args.
|
382 |
-
* Fixed: #1537 - Media field not accepting images with mode set to false.
|
383 |
-
* Fixed: #1529 - ACE Editor conflict with Visual Composer.
|
384 |
-
* Added: #1530 - Added argument to specify admin bar icon, `admin_bar_icon`. Thanks Ninos!
|
385 |
-
* Fixed: #1532 - Media field not accepting any mime type when `'mode' => false`.
|
386 |
-
* Fixed: #1520 - Checkbox field not displaying Wordpress data when using data argument.
|
387 |
-
* Fixed: #1516 - Invalid index and foreach when using compiler and async_typography.
|
388 |
-
* Fixed: #1509 - Sorter adding unnecessary bits on some items.
|
389 |
-
* Fixed: #1514 - Customizer and multisite not getting on properly.
|
390 |
-
* Fixed: #1512 - Slides 'Upload' button not showing or saving selected image.
|
391 |
-
* Fixed: Checkboxes with required were working in reverse.
|
392 |
-
* Fixed: ASync Typography now works! No more flashing fonts.
|
393 |
-
* Fixed: #1489 - Color picker UI lining up improperly.
|
394 |
-
* Fixed: #1497 - dev_mode spinner issue.
|
395 |
-
* Fixed: Spelling error in tracking dialog.
|
396 |
-
* Modified: Updated ace_editor.
|
397 |
-
* Modified: Many MANY fields for the group field.
|
398 |
-
* Fixed: Some CSS bugs.
|
399 |
-
* Fixed: #1481 - Custom fonts loading in google font CSS.
|
400 |
-
* Fixed: #1485 - Customizer 'invalid argument' error. Thanks @rnlmedia.
|
401 |
-
* Fixed: #1472 - font style not displaying saved valie with no font-family argument set.
|
402 |
-
* Fixed: #1471 - raw field and required not playing nice together.
|
403 |
-
|
404 |
-
= 3.3.5 =
|
405 |
-
* Added: An annoying notice at the top so our devs don't ship with dev_mode on. ;)
|
406 |
-
|
407 |
-
= 3.3.4.9 =
|
408 |
-
* Fixed: #1462 - Google fonts not loading in font drop down.
|
409 |
-
|
410 |
-
= 3.3.4.8 =
|
411 |
-
* Fixed: More WP FileSystem tanking. Did PHP fallback before FTP. Works 99.9% of the time without credentials.
|
412 |
-
|
413 |
-
= 3.3.4.7 =
|
414 |
-
* Fixed: Incorrect folder CHMOD in filesystem class.
|
415 |
-
|
416 |
-
= 3.3.4.6 =
|
417 |
-
* Fixed: #1454 - Chmod permissions for redux folder.
|
418 |
-
|
419 |
-
= 3.3.4.5 =
|
420 |
-
* Fixed: #1451 - Googlefonts not loading due to failing copy function.
|
421 |
-
|
422 |
-
= 3.3.4.4 =
|
423 |
-
* Fixed: #1450 - Saves witch values with no `on` or `off` args make the core unhappy.
|
424 |
-
|
425 |
-
= 3.3.4.3 =
|
426 |
-
* Fixed: #1444, again, due to filesystem growing pains.
|
427 |
-
* Fixed: #1449 - Restoring `options` argument over a lousy attempt to fix placeholder.
|
428 |
-
|
429 |
-
= 3.3.4.2 =
|
430 |
-
* Fixed: More file permission issues.
|
431 |
-
|
432 |
-
= 3.3.4.1 =
|
433 |
-
* Fixed: Font debug was left from last commit. Sorry all.
|
434 |
-
|
435 |
-
= 3.3.4 =
|
436 |
-
* Fixed: Issues with file writing. Basically many users don't install WordPress with all the permissions
|
437 |
-
correct. So... Had to move it back to ~/uploads/. Sorry Otto, that's just how it is.
|
438 |
-
* Fixed: #1444 - output of typography all_styles when font_style UI was hidden.
|
439 |
-
* Fixed: #1440 - flaw in new cleanFilePath logic.
|
440 |
-
* Fixed: #1432 - Theme check failing when double-slashes existed in get_template_directory() return.
|
441 |
-
* Removed: curlRead from helper class.
|
442 |
-
* Fixed: #1426 - menu_name not appearing on front end admin bar.
|
443 |
-
* Added: #1427 - button_set added to customizer UI. Thanks @wpexplorer.
|
444 |
-
* Fixed: #1429 - ACE Editor erroring with no default value set.
|
445 |
-
* Fixed: wp_filesystem now initialized with credentials in an effort to combat the tmp file issue.
|
446 |
-
* Modified: Code purification.
|
447 |
-
* Modified: How section tabs work. Isolated within the redux-container class.
|
448 |
-
* Modified: #1412 - Redesigned text label, placeholder fix.
|
449 |
-
|
450 |
-
= 3.3.3 =
|
451 |
-
* Fixed: #1408 & #1357 - Typography subsets losing value after multiple saves on other panels.
|
452 |
-
* Fixed: #1403 - unit value no longer prints after empty typography values
|
453 |
-
* Modified: Typography: Backup font no longer appends to `font-family` variable. Please use the
|
454 |
-
`backup-font` variable to specify backup fonts. This does not apply to output/compiler strings.
|
455 |
-
* Fixed: #1403 - Backup font not appearing in font-family variable.
|
456 |
-
* Modified: Customizer now supports section and field `permissions` argument.
|
457 |
-
* Fixed: #1399 - Customizer respects `page_permissions` argument.
|
458 |
-
* Fixed: #1400 - output/compiler string incomplete using multiple selectors.
|
459 |
-
* Fixed: #1396 - Custom fonts cutting off multiple families in selector, after save.
|
460 |
-
* Fixed: Typography attempting to queue up non google fonts on backend.
|
461 |
-
* Added: #1395 - Display of child theme status in sysinfo, thanks @SiR-DanieL.
|
462 |
-
* Fixed: #1387 - Page jump when clicking "Options Object". Thanks @rrikesh.
|
463 |
-
* Added: #1392 - Filters to change the following localized strings:
|
464 |
-
redux/{opt_name}/localize/reset
|
465 |
-
redux/{opt_name}/localize/reset_all
|
466 |
-
redux/{opt_name}/localize/save_pending
|
467 |
-
redux/{opt_name}/localize/preset
|
468 |
-
* Fixed: #1376 - checkbox.min.js missing.
|
469 |
-
* Fixed: Static variable changes for instances and basic comment cleanup
|
470 |
-
* Fixed: #1361 - Raw field not hiding with required.
|
471 |
-
* Fixed: Datepicker not formatting properly. Still needs some work.
|
472 |
-
|
473 |
-
|
474 |
-
= 3.3.2 =
|
475 |
-
* Fixed: #1357 - Preview not rendering font on page load.
|
476 |
-
* Fixed: #1356 - Color fields and transparency not syncing due to new JS.
|
477 |
-
* Fixed: #1354 - Add class check for W3_ObjectCache.
|
478 |
-
* Fixed: #1341 - JS not initializing properly in import_export.
|
479 |
-
* Fixed: #1339 - Typography would lose Font Weight and Style. value was named val in the
|
480 |
-
HTML, so it would be destroyed on the next save if not initialized.
|
481 |
-
* Fixed: #1226 - W3 Total Cache was affecting validation and compiler hooks.
|
482 |
-
* Fixed: Menu errors weren't showing properly for non-subsectioned items.
|
483 |
-
* Fixed: #1341 - Import/Export buttons not functioning. Also fixed sortable somehow.
|
484 |
-
* Fixed: Slides not initializing with the last fix.
|
485 |
-
* Fixed: Slides field was not properly initialized for the media elements. Fixed.
|
486 |
-
|
487 |
-
= 3.3.1 =
|
488 |
-
* Fixed: #1337 - `redux` JS dependency loading issue. Many thanks @tpaksu
|
489 |
-
* Modified: Drastically changed the way JavaScript is used in the panel. Forced as-needed
|
490 |
-
initialization of fields. Thus reducing dramatically the overall load time of
|
491 |
-
the panel. The effects have been seen up to 300% speed improvement. The only
|
492 |
-
time a field will be initialized is if it's visible, thus reducing the processing
|
493 |
-
needed in DOM overall.
|
494 |
-
* Fixed: #1336 - fixed default font in preview.
|
495 |
-
* Fixed: #1334 - Typography not un-saving italics.
|
496 |
-
* Added: #1332 - New validation: numeric_not_empty.
|
497 |
-
* Fixed: #1330 - Required not working on all fields.
|
498 |
-
|
499 |
-
= 3.3.0 =
|
500 |
-
* Fixed: #1322 - Sections not folding with required argument.
|
501 |
-
* Fixed: #1270 - Editor field compiler hook not firing in visual mode.
|
502 |
-
* Fixed: select2 dependency in select_image, and other fields.
|
503 |
-
* Fixed: Filter out `@eaDir` directories in extensions folder.
|
504 |
-
* Fixed: Fixed the image_select presets to work again. Also now will function even if import/export is disabled.
|
505 |
-
* Fixed: Minor tweaks for metabox update.
|
506 |
-
* Fixed: #1297 - Missing space in image_select class.
|
507 |
-
* Fixed: Slider field tweaked for metaboxes.
|
508 |
-
* Fixed: #1291 - Change of font-family would not trigger preview, or show in open preview.
|
509 |
-
* Fixed: #1289 - Typography not retaining size/height/spacing/word/letter spacing settings.
|
510 |
-
* Fixed: #1288 - Background color-picker dependency missing. Thanks @farhanwazir.
|
511 |
-
* Fixed: Search extension failed do to dependency issue from the core.
|
512 |
-
* Fixed: #1281 - color field output/compiler outputting incorrect selector when only one array present.
|
513 |
-
* Fixed: Update check only appears once if multiple instances of Redux are loaded in the same wordpress instance.
|
514 |
-
* Fixed: Changing font-family in typography didn't trigger 'save changes' notification.
|
515 |
-
* Fixed: More typography: Back up font appearing in font-family when opening selector.
|
516 |
-
* Fixed: Typography: undefined message when NOT using google fonts. Thanks @farhanwazir
|
517 |
-
* Fixed: Typography font backup not in sync with font-family.
|
518 |
-
* Fixed: Typography not saving font-family after switching back and forth between standard and google fonts.
|
519 |
-
* Fixed: Background field selects not properly aligned.
|
520 |
-
* Fixed: Removed select field dependency from background field.
|
521 |
-
* Fixed: #1264 - Color-picker/transparent checkbox functionality.
|
522 |
-
* Fixed: Typography fine-tuning.
|
523 |
-
* Fixed: All typography select fields render as select2.
|
524 |
-
* Fixed: Switching between transparency on and off now restores the last chosen color in all color fields.
|
525 |
-
* Fixed: Redux uploads dir should NOT be ~/wp-content/uploads, but just wp-content. As per Otto.
|
526 |
-
* Fixed: Navigation no longer has that annoying outline around the links. Yuk.
|
527 |
-
* Fixed: #1218 - Select2 multi select not accepting any keyboard input.
|
528 |
-
* Fixed: #1228 - CSS fixes
|
529 |
-
* Added: `hide_reset` argument, to hide the Reset All and Reset Section buttons.
|
530 |
-
* Added: `content_title` argument to slides field. Thanks @psaikali!
|
531 |
-
* Added: `customizer_only` argument for fields & sections, contributed by @andreilupu.
|
532 |
-
* Added: select2 args for spacing field.
|
533 |
-
* Added: select2 args for the following fields: typography, background, border, dimensions and slider.
|
534 |
-
* Added: #1329 - `'preview' = array('always_display' => true)` argument to typography, to determine if
|
535 |
-
preview field show always be shown.
|
536 |
-
* Modified: Portions of core javascript rewritten into object code.
|
537 |
-
* Modified: All field javascript rewritten using jQuery objects (versus standard function).
|
538 |
-
* Modified: Typography field rewritten to fill out font-family field dynamically, versus on page load.
|
539 |
-
|
540 |
-
= 3.2.9.13 =
|
541 |
-
* Modified data => taxonomies now has a little more power behind it.
|
542 |
-
* Fixed: #1255 - button_set multi field not saving when all buttons not selected.
|
543 |
-
* Fixed: #1254 - Border field with 0px not outputting properly.
|
544 |
-
* Fixed: #1250 - Typography preview font-size not set in preview.
|
545 |
-
* Fixed: #1247 - Spacing field not outputting properly in `absolute` mode.
|
546 |
-
* Modified: Typography previewing hidden until font inputs are changed.
|
547 |
-
* Fixed: Vendor js not loading properly when dev_mode = true
|
548 |
-
* Fixed: Border field not outputting properly.
|
549 |
-
* Modified: Centralized import/export code in anticipation of new builder features.
|
550 |
-
* Fixed: Removed rogue echo statement.
|
551 |
-
* Modified: select2 loads only when a field requires it.
|
552 |
-
* Modified: More code to load JS on demand for fields require it.
|
553 |
-
* Modified: Field specific JS only loads with active field.
|
554 |
-
* Fixed: Hints stopped working due to classname change.
|
555 |
-
* Fixed: Permissions argument on section array not filtering out raw field.
|
556 |
-
* Fixed: Too many CSS tweaks to list, due to last build.
|
557 |
-
* Fixed: Sortable and Sorter fields now sort without page scroll when page size is under 782px.
|
558 |
-
* Fixed: Hint icon defaults to left position when screen size is under 782px.
|
559 |
-
* Fixed: `permissions` argument for fields and sections erasing saved field data. See #1231
|
560 |
-
* Modified: Woohoo! Nearly fully responsive. Yanked out all SMOF and NHP field customizations. Lots of little
|
561 |
-
fixes on all browser screens. This will also greatly benefit Metaboxes and other areas of Redux.
|
562 |
-
* Fixed: In dev_mode panel CSS was being loaded 2x.
|
563 |
-
* Fixed: Typography color picker bleeding under other elements. #1225
|
564 |
-
* Fixed: Hint icon_color index error from builder. #1222
|
565 |
-
|
566 |
-
= 3.2.9 =
|
567 |
-
* Added: Network admin support! Set argument 'database' to network and data will be saved site-wide. Also
|
568 |
-
two new arguments: network_admin & network_sites for where to show the panel.
|
569 |
-
* Added: Customizer hook that can be used to simulate the customizer for live preview in the customizer.
|
570 |
-
`redux/customizer/live_preview`
|
571 |
-
* Added: `output` argument for `color` and `color_rgba` fields accepts key/pairs for different modes.
|
572 |
-
* Added: `class` argument to the Redux Arguments, section array, and metabox array. If set, a class will
|
573 |
-
be appended to whichever level is used. This allows further customization for our users.
|
574 |
-
* Added: disable_save_warn flags to the arguments to disable the "you should save" slidedown.
|
575 |
-
* Added: Actions hooks for errors and warnings.
|
576 |
-
* Fixed: Redux now ignores any directories that begin with `.` in the extension folder. See #1213.
|
577 |
-
* Fixed: Redux not saving when validating uploads.
|
578 |
-
* Fixed: Border field output/compiler formatting. Removed 'inherit' in place of default values. See #1208.
|
579 |
-
* Fixed: Trim() warning in framework.php when saving. See #1209, #1201.
|
580 |
-
* Fixed: Typography not outputting all styles when `all_styles` set to true.
|
581 |
-
* Fixed: 'Cannot send header' issues with typography.
|
582 |
-
* Fixed: Small fix for validation if subsection parent is free of errors, remove the red highlight when not
|
583 |
-
expanded.
|
584 |
-
* Fixed: Small CSS classes for flashing fonts where web-font-loader.
|
585 |
-
* Fixed: ASync Flash on fonts. FINALLY. What a pain.
|
586 |
-
* Fixed: 3+ JavaScript errors found in the background field. Now works flawlessly.
|
587 |
-
* Fixed: PHP warnings in background field. #1173. Thanks, @abossola.
|
588 |
-
* Fixed: CSS validation not respecting child selector symbol. #1162
|
589 |
-
* Fixed: Extra check for typography bug.
|
590 |
-
* Fixed: Error css alignment issue with subsections.
|
591 |
-
* Fixed: javascript error in typography field.
|
592 |
-
* Fixed: Added a title to the google fonts stylesheet to fix validation errors.
|
593 |
-
* Fixed: One more slides field error check, and an extra JS goodie for an extension.
|
594 |
-
* Fixed: Leftover debug code messing up slides field.
|
595 |
-
* Fixed: More reliable saved action hook.
|
596 |
-
* Fixed: Removed erroneous debug output in link_color field.
|
597 |
-
* Modified: Dimension field default now accepts either `units` or `unit`.
|
598 |
-
* Modified: Google CSS moved into HEAD via WP enqueue.
|
599 |
-
* Modified: Now do a trim on all fields before validating. No need to alert because of a space...
|
600 |
-
* Modified: Typography field CSS completely rewritten. All thanks to @eplanetdesign!
|
601 |
-
* Modified: Validation now works in metaboxes as well as updates numbers as changes occur. Validation for
|
602 |
-
subsections is SO hot now.
|
603 |
-
* Modified: Various CSS fixes and improvements.
|
604 |
-
* Modified: Turned of mod_rewrite check.
|
605 |
-
* Modified: How errors are displayed, no longer dependent on the ID, now proper classes.
|
606 |
-
* Modified: Error notice stays until all errors are gone. Also updates it's number as errors fixed!
|
607 |
-
* Modified: Moved google font files to proprietary folder in upload to help with permission issues.
|
608 |
-
|
609 |
-
= 3.2.8 =
|
610 |
-
* Fixed: Formatting of field files. Normalizing headers.
|
611 |
-
* Added: is_empty / empty / !isset AND not_empty / !empty / isset as required operations
|
612 |
-
* Fixed: Reset defaults error.
|
613 |
-
* Added: `show` argument to turn on and off input boxes in slider.
|
614 |
-
* Fixed: Required now works with muti-check fields and button set when set to multi.
|
615 |
-
|
616 |
-
= 3.2.7 =
|
617 |
-
* Fixed: Import works again. A single line was missed...
|
618 |
-
* Fixed: link_color field not outputting CSS properly via compiler or output. Thanks @vertigo7x
|
619 |
-
* Fixed: Sorter field CSS. Buttons were all smushed together.
|
620 |
-
* Fixed: 'undefined' error in typography.js. Thanks @ksere.
|
621 |
-
|
622 |
-
= 3.2.6 =
|
623 |
-
* Fixed: Another stray undefined index. Oy.
|
624 |
-
* Added: `open_expanded` argument to start the panel completely expanded initially.
|
625 |
-
|
626 |
-
= 3.2.5 =
|
627 |
-
* Fixed: Various bad mistakes. Oy.
|
628 |
-
|
629 |
-
= 3.2.4 =
|
630 |
-
* Fixed: Slight typography speed improvement. Less HTML hopefully faster page loads.
|
631 |
-
* Fixed: Unload error on first load if the typography defaults are not set.
|
632 |
-
* Fixed: Errors pertaining to mod_rewrite check.
|
633 |
-
* Fixed: All those headers already set errors.
|
634 |
-
* Added: $changed_values variable to save hooks denoting the old values on a save.
|
635 |
-
* Added: Pointers to Extensions on load.
|
636 |
-
* Modified: CSS Output for the background field.
|
637 |
-
* Fixed: Validation error messages not appearing on save.
|
638 |
-
* Modified: Speed boost on validation types.
|
639 |
-
* Added: Apache mod_rewrite check. This should solve many issues we've been seeing regarding mod_rewrite
|
640 |
-
not being enabled.
|
641 |
-
* Fixed: Sortable field not saving properly.
|
642 |
-
* Fixed: Erroneous data in admin.less
|
643 |
-
* Updated: sample-config.php. Sortable checkbox field example now uses true/false instead of text meant for
|
644 |
-
textbox example.
|
645 |
-
|
646 |
-
= 3.2.3 =
|
647 |
-
* Fixed: Responsive issues with spacing and dimension fields.
|
648 |
-
* Fixed: Style conflicts with WP 3.9. Added register filter to fields via id.
|
649 |
-
* Fixed: Metaboxes issues.
|
650 |
-
* Fixed: Compiler hook in the customizer now passes the CSS.
|
651 |
-
* Fixed: Compiler hook now properly fires in the customizer.
|
652 |
-
* Fixed: Validation error with headers already being set.
|
653 |
-
* Fixed: Added mode for width/height to override dimensions css output.
|
654 |
-
* Fixed: Restoring lost formatting from multiple merges.
|
655 |
-
* Fixed: New sorter default values get set properly now. ;)
|
656 |
-
* Fixed: Removed erroneous 's' character from HTML.
|
657 |
-
* Fixed: Info field didn't intend within section.
|
658 |
-
* Fixed: Compiler hook wasn't running.
|
659 |
-
* Modified: Some admin panel stylings. Now perfect with mobile hover. Also fixed an issue with the slidedown
|
660 |
-
width for sections. No more 2 empty pixels.
|
661 |
-
* Added: `data` and `args` can now be set to sorter! Just make sure to have it be a key based on what you
|
662 |
-
want it to display as. IE: `array('Main'=>'sidebars')`
|
663 |
-
* Added: Prevent Redux from firing on AJAX heartbeat, but added hook for it 'redux/ajax/heartbeat'.
|
664 |
-
* Added: Tick mark if section has sub sections. Hidden when subsections expanded.
|
665 |
-
* Added: Check to make sure a field isn't empty after the filter. If it is empty, skip over it.
|
666 |
-
* Added: Subsections now show icon if they have it. Show text only (without indent) if they do not.
|
667 |
-
* Added: Set a section or field argument of `'panel' => false` to skip over that field or panel and hide it.
|
668 |
-
It will still be registered with defaults saved, but not display. This can be useful for things
|
669 |
-
like the customizer.
|
670 |
-
* Added: SUBSECTIONS! Just add `'subsection' => true` to any section that isn't a divide/callback and isn't
|
671 |
-
the first section in your panel. ;)
|
672 |
-
|
673 |
-
= 3.2.1 =
|
674 |
-
* Fixed: Small bug in image_select javascript.
|
675 |
-
* Added: Import hook, just because we can. :)
|
676 |
-
* Fixed: Customizer preview now TRULY outputs CSS even if output_tag is set to false;
|
677 |
-
* Fixed: Reset section, etc. Discovered an odd WordPress thing.
|
678 |
-
* Fixed: Image_select size override.
|
679 |
-
* Fixed: Customizer save not firing the compiler hook.
|
680 |
-
* Fixed: Customizer not outputting CSS if output_tag is set to false.
|
681 |
-
* Fixed: Small empty variable check. Undefined index in the defaults generating function.
|
682 |
-
* Fixed: WP 3.9 update made editor field button look ugly.
|
683 |
-
* Fixed: Save hook not firing when save_default set to false.
|
684 |
-
* Fixed: Reset section anomalies. Maybe.
|
685 |
-
* Fixed: Array of values in required not recognized.
|
686 |
-
* Fixed: Updated hint defaults to prevent index warning.
|
687 |
-
* Fixed: Removed leftover debug code.
|
688 |
-
* Added: New readonly argument for text field.
|
689 |
-
* Fixed: Reset/Reset section actions hooks now fire properly.
|
690 |
-
* Fixed: When developer uses section field but does not specify an indent argument.
|
691 |
-
* Fixed: Dynamic URL for slides
|
692 |
-
* Fixed: Accidently removed reset action on section reset. Restored.
|
693 |
-
* Fixed: Section defaults bug for certain field types.
|
694 |
-
* Fixed: Dynamic URL if site URL changed now updates media properly if attachement exists.
|
695 |
-
* Fixed: Customizer now correctly does live preview.
|
696 |
-
* Fixed: Special enqueue case fix.
|
697 |
-
* Added: A few more hooks for defaults and options.
|
698 |
-
* Fixed: Small undefined index error.
|
699 |
-
* Added: Section key generation via title.
|
700 |
-
* Modified: File intending.
|
701 |
-
* Fixed: Custom menus not displaying options panel.
|
702 |
-
* Fixed: Single checkbox option not retaining checked value.
|
703 |
-
* Fixed: Border field returning bad CSS in CSS compiler.
|
704 |
-
* Fixed: Import/Export fix. Thanks, @CGlingener!
|
705 |
-
|
706 |
-
= 3.2.0 =
|
707 |
-
* Added: Save warning now is sticky to the top and responsive.
|
708 |
-
* Fixed: Mobile fixes for Redux. Looks great on small screens how.
|
709 |
-
* Fixed: Slight CSS fixes.
|
710 |
-
* Fixed: Compiler fixes and added notices.
|
711 |
-
* Added: Import/Export more reasonable text.
|
712 |
-
* Added: `force_output` on the field level to bypass the required check that removes the output if the field is hidden. Thanks @rffaguiar.
|
713 |
-
* Fixed: Fully compatible with WordPress 3.9. Now it just works. ;)
|
714 |
-
* Fixed: Info and divide field now work with required.
|
715 |
-
* Added: Fallback. Now if the media, slides, or background URL doesn't match the site URL, but the attachment ID is present, the data is updated.
|
716 |
-
* Fixed: Last tab not properly set. Slow rendering.
|
717 |
-
* Modified: Replaced transients with cookies. Less DB queries.
|
718 |
-
* Fixed: Undefined variable issues for new required methods.
|
719 |
-
* Fixed: Default_show display error with a non-array being steralized.
|
720 |
-
* Added: Multiple required parent value checking! Booya!
|
721 |
-
* Fixed: Sections now fold with required.
|
722 |
-
* Fixed: select2 not rendering properly when dev_mode = false, because of ace_editor fix.
|
723 |
-
* Fixed: Removed mistakenly compiled test code from redux.js.
|
724 |
-
* Fixed: ace_editor not rendering properly in certain instances.
|
725 |
-
* Modified: Small change to import_export field in checking for existing instance of itself.
|
726 |
-
* Fixed: import_export not rendering when the menutype argument was set to menu
|
727 |
-
* Fixed: Ace_editor not enqueued unless used. MEMORY HOG.
|
728 |
-
* Fixed: Color_Gradient transparency to was being auto-selected if from way transparent.
|
729 |
-
* Fixed: Enqueue select with slider for local dev.
|
730 |
-
* Modified: removed add_submenu_page when creating a submenu for us in the WP admin area. WP approved API is used in it's place to being Redux up to wp.org theme check standards.
|
731 |
-
* Fixed: Massive speed issue with button_set. Resolved.
|
732 |
-
* Fixed: Issue where default values throws an error if ID is not set.
|
733 |
-
* Fixed: Continuing effort to ensure proper loading of config from child themes.
|
734 |
-
* Fixed: Import/Export array search bug if section['fields'] is not defined.
|
735 |
-
* Fixed: Inconsistencies in import/export across different versions of PHP.
|
736 |
-
* Fixed: Redux checks for child or parent theme exclusively before loading.
|
737 |
-
|
738 |
-
= 3.1.9 =
|
739 |
-
* Fixed: Typography custom preview text/size not outputting.
|
740 |
-
* Fixed: No font selected in typography would default to 'inherit'.
|
741 |
-
* Fixed: Hint feature kicking back a notice if no title was specified.
|
742 |
-
* Fixed: Sortable field, when used a checkboxes, were all checked by default, even when set not to be.
|
743 |
-
* Fixed: button_set field not setting properly in multi mode.
|
744 |
-
* Fixed: Javascript console object not printing options object.
|
745 |
-
* Fixed: Load errors from child themes no longer occur.
|
746 |
-
* Fixed: Compiler output for slider field.
|
747 |
-
* Fixed: update_check produced a fatal error on a local install with no internet connection.
|
748 |
-
* Fixed: Compiler hook failing on slider.
|
749 |
-
* Fixed: Error on update_check when the response code was something other than 200.
|
750 |
-
* Fixed: image_select images not resizing properly in FF and IE.
|
751 |
-
* Fixed: Layout for the typography field, so everything isn't smushed together. The new layout is as follows:
|
752 |
-
* Fixed: link_color field showing notice on default, if user enters no defaults.
|
753 |
-
* Fixed: Fixed tab notice in framework.php if no tab parameter is set in URL.
|
754 |
-
* Fixed: Hide demo hook wasn't hiding demo links.
|
755 |
-
* Added: Admin notice for new builds of Redux on Github as they become available. This feature is available on in dev_mode, and may be turned off by setting the `update_notice` argument to false. See the Arguments page of the wiki for more details.
|
756 |
-
* Added: text-transform option for the typography field.
|
757 |
-
* Added: Newsletter sign-up popup at first load of the Redux options panel.
|
758 |
-
* Added: Added PHP 5.2 support for import/export.
|
759 |
-
* Added: Action hooks for options reset and options reset section.
|
760 |
-
* Added: Theme responsive for date picker.
|
761 |
-
* Added: New slider. Better looking UI, double handles and support for floating point values. See the wiki for more info.
|
762 |
-
* Added: Typography improvements.
|
763 |
-
* Added: Hints! More info: https://github.com/ReduxFramework/ReduxFramework/wiki/Using-Hints-in-Fields
|
764 |
-
* Added: Complete Wordpress admin color styles. Blessed LESS/SCSS mixins. ;)
|
765 |
-
* Added: Font family not required for the typography module any longer.
|
766 |
-
* Added: Support for using the divide field in folding.
|
767 |
-
* Added: Error trapping in typography.js for those still attempting to use typography with no font-family.
|
768 |
-
* Added: Full asynchronous font loading.
|
769 |
-
* Added: email_not_empty validation field.
|
770 |
-
* Modified: Typography word and letter spacing now accept negative values.
|
771 |
-
* Modified: Typography preview shows spaces between upper and lower case groupings.
|
772 |
-
* Modified: Google font CSS moved to header so pages will pass HTML5 validation.
|
773 |
-
* Modified: Removed Google font CSS line from header (because it's in the footer via wp_enqueue_style.
|
774 |
-
* Modified: RGBA Field stability. Thank you, @SilverKenn.
|
775 |
-
* Modified: Separated Import/Export from the core. It can now be used as a field.
|
776 |
-
[family-font] [backup-font]
|
777 |
-
[style] [script] [align] [transform]
|
778 |
-
[size] [height] [word space] [letter space]
|
779 |
-
[color]
|
780 |
-
* Reverted: email validation field only checks for valid email. not_empty check moved to new validation field.
|
781 |
-
|
782 |
-
= 3.1.8 =
|
783 |
-
* Fixed: Improper enqueue in tracking class.
|
784 |
-
* Fixed: Few classes missed for various fields.
|
785 |
-
* Fixed: Spacing field kicking back notices and warnings when 'output' wasn't set.
|
786 |
-
* Modified: Added file_exists check to all include lines in framework.php
|
787 |
-
* Fixed: Background field now works with dynamic preview as it should.
|
788 |
-
* Fixed: Extension fields now enqueueing properly.
|
789 |
-
* Added: Text-align to typography field.
|
790 |
-
* Fixed: Servers returning forwards slashes in TEMPLATEPATH, while Redux is installed embedded would not show options menu.
|
791 |
-
* Fixed: On and Off for switch field not displaying language translation.
|
792 |
-
* Fixed: email validation allowing a blank field.
|
793 |
-
* Fixed: Now allow for empty values as valid keys.
|
794 |
-
* Added: Dismiss option to admin notices (internal function)
|
795 |
-
|
796 |
-
= 3.1.7 =
|
797 |
-
* Fixed: Servers returning forwards slashes in TEMPLATEPATH, while Redux is installed embedded would not show options menu.
|
798 |
-
* Fixed: On and Off for switch field not displaying language translation.
|
799 |
-
* Fixed: email validation allowing a blank field.
|
800 |
-
* Added: Dismiss option to admin notices (internal function)
|
801 |
-
* Fixed: On and Off for switch field not displaying language translation.
|
802 |
-
* Fixed: email validation allowing a blank field.
|
803 |
-
* Added: Dismiss option to admin notices (internal function)
|
804 |
-
|
805 |
-
= 3.1.6 =
|
806 |
-
* Fixed: CSS spacing issue
|
807 |
-
* Fixed: Customizer now works and doesn't break other customizer fields outside of Redux.
|
808 |
-
* Fixed: Several minor bug fixes
|
809 |
-
* Added: Metabox support via extension http://reduxframework.com/extensions/
|
810 |
-
* Added: Admin-bar menu
|
811 |
-
* Fixed: Section field now folds.
|
812 |
-
* Fixed: wp_content_dir path now handles double forward slashes.
|
813 |
-
* Fixed: Typography field missing italics in Google fonts.
|
814 |
-
* Fixed: Default color in border field not saving properly.
|
815 |
-
* Fixed: hex2rgba in class.redux_helpers.php changed to static.
|
816 |
-
* Fixed: 'sortable' field type not saving options as default.
|
817 |
-
* Fixed: Specified default color not set when clicking the color box default button.
|
818 |
-
* Fixed: Sorter field options are now saved as default in database.
|
819 |
-
* Fixed: Issues with checkboxes displaying default values instead of labels.
|
820 |
-
* Fixed: Outstanding render issues with spacing field.
|
821 |
-
* Fixed: Plugins using Redux from load failure.
|
822 |
-
* Fixed: 'not_empty' field validation.
|
823 |
-
* Fixed: Media field.
|
824 |
-
* Added: 'read-only' option for media text field.
|
825 |
-
* Added: 'mode' option to image_select, so CSS output element may be specified.
|
826 |
-
* Added: Admin Bar menu for option panel.
|
827 |
-
* Modified: media field 'read-only' to 'readonly' to vonform to HTML standards.
|
828 |
-
* Modified: Removed raw_align field and added align option to raw field. See wiki for more info.
|
829 |
-
* Removed: EDD extension. It never belonged in Core and will be re-released as a downloadable extension shortly
|
830 |
-
* Removed: Group field, temporarily.
|
831 |
-
* Removed: wp_get_current_user check. See https://github.com/ReduxFramework/ReduxFramework/wiki/How-to-fix-%22Fatal-error%3A-Call-to-undefined-function-wp_get_current_user%28%29-%22
|
832 |
-
|
833 |
-
= 3.1.5 =
|
834 |
-
* Typography font arrays may not contain comma spaces.
|
835 |
-
* Merge in pull request - 542, code cleanup and better readability
|
836 |
-
* Change how HTML is output to support metaboxes
|
837 |
-
* CSS only on pages that matter, better checks.
|
838 |
-
* font-backup in typography now appends to font-family in output and compiler.
|
839 |
-
* More fixes for Google font css outputting.
|
840 |
-
* Addded output and compiler to field_image_select. Images will be output as 'background-image'.
|
841 |
-
* Fixed output in field_background.
|
842 |
-
* Prevent standard fonts from outputting to Google fonts CSS call.
|
843 |
-
* class_exists in field_section checking for incorrect classname.
|
844 |
-
* sample_config fix.
|
845 |
-
* Compiler not outputting CSS without output set to comthing other than false.
|
846 |
-
* Google fonts not rendering on frontend.
|
847 |
-
* Rewrote sample_config as a class
|
848 |
-
|
849 |
-
= 3.1.4 =
|
850 |
-
* Fixed error in redux-framework.php.
|
851 |
-
* Added select_image field.
|
852 |
-
|
853 |
-
= 3.1.3 =
|
854 |
-
* Fixed a few undefined variables
|
855 |
-
* Removed old code from the repo.
|
856 |
-
* Fix for validation.
|
857 |
-
* Remove the compiler hook by default.
|
858 |
-
* Fix to sortable field.
|
859 |
-
* Added an extra check for link color. Removes user error.
|
860 |
-
* Localization updates.
|
861 |
-
* Error in slides.
|
862 |
-
* Fixed the info box bug with spacing and padding.
|
863 |
-
* Fixed the first item in each section having WAY too much padding. ;)
|
864 |
-
* Fixed section reset issue where values weren't being saved to the db properly.
|
865 |
-
|
866 |
-
= 3.1.2 =
|
867 |
-
* Feature - Sortable select boxes!
|
868 |
-
* Feature - Reset a section only or the whole panel!
|
869 |
-
* New Field - RGBA Color Field!
|
870 |
-
* Improvement - Use of REM throughout.
|
871 |
-
* Fixed Typography - Fix output option and various small bugs.
|
872 |
-
* Fixed Border - Fix output option and various small bugs.
|
873 |
-
* Fixed Dimensions - Fix output option and various small bugs.
|
874 |
-
* Fixed Image_select - Various small bugs.
|
875 |
-
* Fixed Slides - Various small bugs.
|
876 |
-
* Fixed Sortable - Using native jQuery UI library same as within WordPress.
|
877 |
-
* Fixed Slider and Spinner Input Field - Values now move to the closest valid value in regards to the step, automatically.
|
878 |
-
* Fixed Ace Editor
|
879 |
-
* FEATURE - All CSS/JS files are compiled into a single file now! Speed improvements for the backend.
|
880 |
-
* Fix in how WordPress data is received, improved some output.
|
881 |
-
* Fix for various fields not triggering fold/compiler/save.
|
882 |
-
* Fixed elusive icons to use the new version and classes.
|
883 |
-
* Fixed media thumb to only be the thumbnail version.
|
884 |
-
* Fixed admin https error with WordPress core not renaming URL.
|
885 |
-
* Placeholders throughout the framework are now properly there.
|
886 |
-
* Feature - Setting to not save defaults to database on load.
|
887 |
-
* Fixed - Computability issue with GT3 builder.
|
888 |
-
* Fixed localization issue with default values.
|
889 |
-
* Language - Added Russian
|
890 |
-
* Feature - Media now can have any content type passed in to limit content types.
|
891 |
-
* Allow negative values in typography and other fields.
|
892 |
-
* WordPress 3.8 computability.
|
893 |
-
* CSS validation issue.
|
894 |
-
* Feature - User contributed text direction feature.
|
895 |
-
* EDD Extension now fully function for plugins or themes.
|
896 |
-
* Removed get_theme_data() fallbacks, we're well pass WordPress 3.4 now. ;)
|
897 |
-
* A ton of other small updates and improvements.
|
898 |
-
|
899 |
-
|
900 |
-
= 3.1.0 =
|
901 |
-
* Fix Issue 224 - Image Select width was breaking the panel.
|
902 |
-
* Fix Issue 181 - Broken panel in firefox
|
903 |
-
* Fix Issue 225 - 0px typography bug. Thanks @partnuz.
|
904 |
-
* Fix Issue 228 - Resolved a duplicated enqueue on color_link field. Thanks @vertigo7x.
|
905 |
-
* Fix Issue 231 - Field spacing bug fixes.
|
906 |
-
* Fix Issue 232 & 233 - Dimensions: bug fix with units and multiple units. Thanks @kpodemski
|
907 |
-
* Fix Issue 234 - Pass options as a ref so validating actions can modify/sanitize them. Thanks @ZeroBeeOne
|
908 |
-
* Fix Issue 222 - Tab cookie function wasn't working.
|
909 |
-
* Feature - Pass params to Select2. Thanks @andreilupu
|
910 |
-
* Fix Issue 238 - Fix for conditional output. Thanks @partnuz.
|
911 |
-
* Fix Issue 211 - Google Web font wasn't loading at first init of theme.
|
912 |
-
* Fix Issue 210 - Elusive Icons update. Changed classes to force use of full elusive name.
|
913 |
-
* Fix Issue 247 - Media thumbnails were not showing. Also fixed media to keep the largest file, but display the small version in the panel as a thumb. Thanks @kwayyinfotech.
|
914 |
-
* Fix Issue 144 - JS error when no item found in slider.
|
915 |
-
* Fix Issue 246 - Typography output errors.
|
916 |
-
* Feature & Issue 259 - Multi-Text now support validation!
|
917 |
-
* Fix Issue 248/261 - Links color issue. Also fixed color validation.
|
918 |
-
* Feature & Issue 262 - Now registered sidebars can be used as a data type.
|
919 |
-
* Fix Issue 194/276 - Custom taxonomy terms now passing properly. Thanks @kprovance.
|
920 |
-
* Feature & Issue 273 - Argument save_defaults: Disable the auto-save of the default options to the database if not set.
|
921 |
-
* Feature - Docs now being moved to the wiki for community participation.
|
922 |
-
* Issue 283 - Date placeholder. Thanks @kprovance.
|
923 |
-
* Issue 285 - HTTPS errors on admin. Known WordPress bug. Resolved.
|
924 |
-
* Fix Issue 288 - Float values now possible for border, dimensions, and spacing.
|
925 |
-
* Feature - Media field can now accept non-image files with a argument being set.
|
926 |
-
* Fix Issue 252 - Post Type data wasn't working properly. Thanks @Abu-Taymiyyah.
|
927 |
-
* Fix Issue 213 - Radio and Button Set wasn't folding.
|
928 |
-
|
929 |
-
= 3.0.9 =
|
930 |
-
* Feature - Added possibility to set default icon class for all sections and tabs.
|
931 |
-
* Feature - Make is to the WP dir can be moved elsewhere and Redux still function.
|
932 |
-
* Added Spanish Language. Thanks @vertigo7x.
|
933 |
-
* Fix Issue 5 - Small RGBA validation fix.
|
934 |
-
* Fix Issue 176 - Fold by Image Select. Thanks @andreilupu.
|
935 |
-
* Fix Issue 194 - Custom taxonomy terms in select field.
|
936 |
-
* Fix Issue 195 - Border defaults not working.
|
937 |
-
* Fix Issue 197 - Hidden elements were showing up on a small screen. Thanks @ThinkUpThemes.
|
938 |
-
* Fix issue 200 - Compiler not working with media field.
|
939 |
-
* Fix Issue 201 - Spacing field not using default values.
|
940 |
-
* Fix Issue 202 - Dimensions field not using units.
|
941 |
-
* Fix Issue 208 - Checkbox + Required issue.
|
942 |
-
* Fix Issue 211 - Google Font default not working on page load.
|
943 |
-
* Fix Issue 214 - Validation notice not working for fields.
|
944 |
-
* Fix Issue 181/224 - Firefox 24 image resize errors.
|
945 |
-
* Fix Issue 223 - Slides were losing the url input field for the image link.
|
946 |
-
* Fix - Various issues in the password field.
|
947 |
-
* Fixed various spelling issues and typos in sample-config file.
|
948 |
-
* Initialize vars before extract() - to shut down undefined vars wargnings.
|
949 |
-
* Various other fixes.
|
950 |
-
|
951 |
-
= 3.0.8 =
|
952 |
-
* Version push to ensure all bugs fixes were deployed to users. Various.
|
953 |
-
|
954 |
-
= 3.0.7 =
|
955 |
-
* Feature - Completely redone spacing field. Choose to apply to sides or all at once with CSS output!
|
956 |
-
* Feature - Completely redone border field. Choose to apply to sides or all at once with CSS output!
|
957 |
-
* Feature - Added opt-in anonymous tracking, allowing us to further analyze usage.
|
958 |
-
* Feature - Enable weekly updates of the Google Webfonts cache is desired. Also remove the Google Webfont files from shipping with Redux. Will re-download at first panel run to ensure users always have the most recent copy.
|
959 |
-
* Language translation of german updated alone with ReduxFramework pot file.
|
960 |
-
* Fix Issue 146 - Spacing field not storing data.
|
961 |
-
* Fix - Firefox field description rendering bug.
|
962 |
-
* Fix - Small issue where themes without tags were getting errors from the sample data.
|
963 |
-
|
964 |
-
= 3.0.6 =
|
965 |
-
* Hide customizer fields by default while still under development.
|
966 |
-
* Fix Issue 123 - Language translations to actually function properly embedded as well as in the plugin.
|
967 |
-
* Fix Issue 151 - Media field uses thumbnail not full image for preview. Also now storing the thumbnail URL. Uses the smallest available size as the thumb regardless of the name.
|
968 |
-
* Fix Issue 147 - Option to pass params to select2. Contributed by @andreilupu. Thanks!
|
969 |
-
* Added trim function to ace editor value to prevent whitespace before and after value keep being added
|
970 |
-
* htmlspecialchars() value in pre editor for ace. to prevent html tags being hidden in editor and rendered in dom
|
971 |
-
* Feature: Added optional 'add_text' argument for multi_text field so users can define button text.
|
972 |
-
* Added consistent remove button on multi text, and used sanitize function for section id
|
973 |
-
* Feature: Added roles as data for field data
|
974 |
-
* Feature: Adding data layout options for multi checkbox and radio, we now have quarter, third, half, and full column layouts for these fields.
|
975 |
-
* Feature: Eliminate REDUX_DIR and REDUX_URL constants and instead created static ReduxFramework::$_url and ReduxFramework::$_dir for cleaner code.
|
976 |
-
Feature: Code at bottom of sample-config.php to hide plugin activation text about a demo plugin as well as code to demo how to hide the plugin demo_mode link.
|
977 |
-
* Started work on class definitions of each field and class. Preparing for the panel builder we are planning to make.
|
978 |
-
|
979 |
-
= 3.0.5 =
|
980 |
-
* Fixed how Redux is initialised so it works in any and all files without hooking into the init function.
|
981 |
-
* Issue #151: Added thumbnails to media and displayed those instead of full image.
|
982 |
-
* Issue #144: Slides had error if last slide was deleted.
|
983 |
-
* Color field was outputting hex in the wrong location.
|
984 |
-
* Added ACE Editor field, allowing for better inline editing.
|
985 |
-
|
986 |
-
= 3.0.4 =
|
987 |
-
* Fixed an odd saving issue.
|
988 |
-
* Fixed link issues in the framework
|
989 |
-
* Issue #135: jQuery UI wasn't being properly queued
|
990 |
-
* Issue #140: Admin notice glitch. See http://reduxframework.com/2013/10/wordpress-notifications-custom-options-panels/
|
991 |
-
* Use hooks instead of custom variable for custom admin CSS
|
992 |
-
* Added "raw" field that allows PHP or a hook to embed anything in the panel.
|
993 |
-
* Submenus in Admin now change the tabs without reloading the page.
|
994 |
-
* Small fix for multi-text.
|
995 |
-
* Added IT_it and RO_ro languages.
|
996 |
-
* Updated readme file for languages.
|
997 |
-
|
998 |
-
= 3.0.3 =
|
999 |
-
* Fixed Issue #129: Spacing field giving an undefined.
|
1000 |
-
* Fixed Issue #131: Google Fonts stylesheet appending to body and also to the top of the header. Now properly placed both at the end of the head tag as to overload any theme stylesheets.
|
1001 |
-
* Fixed issue #132 (See #134, thanks @andreilupu): Could not have multiple WordPress Editors (wp_editor) as the same ID was shared. Also fixed various styles to match WordPress for this field.
|
1002 |
-
* Fixed Issue #133: Issue when custom admin stylesheet was used, a JS error resulted.
|
1003 |
-
|
1004 |
-
= 3.0.2 =
|
1005 |
-
* Improvements to slides, various field fixes and improvements. Also fixed a few user submitted issues.
|
1006 |
-
|
1007 |
-
= 3.0.1 =
|
1008 |
-
* Backing out a bit of submitted code that caused the input field to not properly break.
|
1009 |
-
|
1010 |
-
= 3.0.0 =
|
1011 |
-
* Initial WordPress.org plugin release.
|
1012 |
-
|
1013 |
-
= 3.0 =
|
1014 |
-
Redux is now hosted on WordPress.org! Update in order to get proper, stable updates.
|
1015 |
-
|
1016 |
-
|
1017 |
-
== Attribution ==
|
1018 |
-
|
1019 |
-
Redux is was originally based off the following frameworks:
|
1020 |
-
|
1021 |
-
* [NHP](https://github.com/leemason/NHP-Theme-Options-Framework)
|
1022 |
-
* [SMOF](https://github.com/syamilmj/Options-Framework "Slightly Modified Options Framework")
|
1023 |
-
|
1024 |
-
It has now a completely different code base. If you like what you see, realize this is a labor of love. Please [donate to the Redux Framework](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=N5AD7TSH8YA5U) if you are able.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/css/redux-admin.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
.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 .hr{height:20px;line-height:20px;float:none;border-color:#E7E7E7;display:block;width:100%;height:35px !important;line-height:35px !important;position:relative;margin:15px 0 10px 0}.redux-container .hr .inner span{background-color:#FCFCFC;border-color:#E7E7E7;height:5px;width:5px;border-width:2px;border-style:solid;display:block;position:absolute;left:50%;margin-left:-5px;margin-top:-5px}.redux-container .inner{width:42% !important;left:40% !important;margin-left:-6%;background-color:#FCFCFC;border-color:#E7E7E7;position:absolute;height:1px;top:50%;width:100%;margin-top:-1px;border-top-width:1px;border-top-style:solid}.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;float:left}.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-main #redux-object-browser{overflow:auto;word-wrap:break-word;max-height:600px;max-width:100%}.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: 1124px){.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: 783px){.mp6 .redux-container #info_bar{height:auto;padding-bottom:1px}.mp6 .redux-container #info_bar a{margin-top:5px}}pre{overflow:hidden}#redux-header h2{color:#fff}.admin-color-fresh .button.ui-datepicker-current,.admin-color-fresh button.ui-datepicker-close{background-color:#007db9 !important}.admin-color-fresh .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{background-image:url(data:image/png;base64,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) !important}.admin-color-fresh .ui-datepicker-header{background-color:#23282d !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-active{background-color:#007db9 !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-hover{color:#007db9 !important}.admin-color-fresh .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{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{color:black !important;font-weight:700 !important;background:white !important}.admin-color-fresh .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-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{background:#23282d;border-color:#0073aa}.admin-color-fresh #redux-header .display_header span{color:#a0a5aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-fresh .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{border:0 none !important;content:"\0020" !important}.admin-color-fresh .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{background-color:#b94a48;color:#f2dede}.admin-color-fresh .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{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{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{margin-right:2px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active,.admin-color-fresh .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{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{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{-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{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{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{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{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{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{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{padding-left:30px !important}.admin-color-fresh .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{background:#23282d}.admin-color-fresh .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{background:#23282d;text-shadow:none}.admin-color-fresh .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{border-color:#0073aa}.admin-color-fresh #redux-footer #redux-share a{color:#0073aa}.admin-color-fresh #redux-footer #redux-share a:hover{color:#002e44}.admin-color-fresh .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{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{border-top:inherit}.admin-color-fresh .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-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-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-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-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-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-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-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: 1124px){.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}.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: 650px){#redux-footer #redux-share,.redux-hint-qtip{display:none}.redux-container .redux-action_bar{float:none}}@media screen and (max-width: 476px){.redux-container .expand_options{display:none}#redux-footer,.redux-container #info_bar{text-align:center}}.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: 1124px){.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}}@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}}@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}
|
|
inc/redux/redux-framework/ReduxCore/assets/css/redux-fields.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
.redux-container-ace_editor .ace-wrapper{position:static}.redux-container-ace_editor .ace_editor{height:200px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-ace_editor .ace_gutter{z-index:1!important}.redux-main .redux-container-background .redux-background-attachment,.redux-main .redux-container-background .redux-background-attachment select,.redux-main .redux-container-background .redux-background-clip,.redux-main .redux-container-background .redux-background-clip select,.redux-main .redux-container-background .redux-background-origin,.redux-main .redux-container-background .redux-background-origin select,.redux-main .redux-container-background .redux-background-position,.redux-main .redux-container-background .redux-background-position select,.redux-main .redux-container-background .redux-background-repeat,.redux-main .redux-container-background .redux-background-repeat select,.redux-main .redux-container-background .redux-background-size,.redux-main .redux-container-background .redux-background-size select{width:200px!important;margin-right:10px;margin-bottom:7px}.redux-main .redux-container-background .background-preview{display:block;width:100%;margin:5px 0 10px;border:1px dotted #d3d3d3}.redux-main .redux-container-background .select2-container{margin-right:10px;margin-bottom:10px}.redux-main .redux-container-background .wp-picker-container{margin-bottom:10px}.redux-main .redux-container-background .upload{width:100%;margin-bottom:8px}.redux-main .redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.redux-container-border .select2-container{float:left;display:block;margin-right:10px}.redux-container-border .select_wrapper{float:left;width:inherit}.redux-container-border .select_wrapper select{width:80px;float:left}.redux-container-border .field-border-input{margin-right:10px;margin-bottom:7px}.redux-container-border .wp-picker-container{margin-top:2px}@media screen and (max-width:782px){.redux-container-border .field-border-input input{display:inline-block!important;width:100px!important}.redux-container-border .field-border-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-border .select_wrapper{margin-top:6px}}.redux-container-checkbox label{vertical-align:top;width:100%}.redux-container-checkbox label .field-desc{margin-top:0;float:left;width:93%;clear:none}.redux-container-color_gradient .colorGradient{display:inline-block}.redux-container-color_gradient .toLabel{padding-left:18px}@media screen and (max-width:660px){.redux-container-color_gradient .colorGradient{display:block;text-align:center!important}}.sp-container,.sp-replacer{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.sp-replacer.focus,.sp-replacer.hover,.sp-replacer:focus,.sp-replacer:hover{background:#fafafa;border-color:#999;color:#222}.sp-replacer.focus,.sp-replacer:focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sp-replacer.active:focus{-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sp-replacer.active,.sp-replacer.active:hover,.sp-replacer:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}#ui-datepicker-div{z-index:15!important}.ui-datepicker-header{background-color:#00abef}.redux-dimensions-container .select_wrapper,.redux-dimensions-container select{width:80px!important;float:left}.redux-dimensions-container .field-dimensions-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width:782px){.redux-dimensions-container .field-dimensions-input input{display:inline-block!important;width:100px!important}.redux-dimensions-container .field-dimensions-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-dimensions-container .select_wrapper{margin-top:6px}}.redux-container-editor .mceLayout td{border-width:1px;margin:0;padding:1px}.redux-container-editor input,.redux-container-editor textarea{margin:inherit}.redux-container-editor textarea{border:0;border-width:0}.redux-container-editor .wp-editor-container{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-editor .wp-editor-container textarea{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-style:inherit}.redux-container-editor .quicktags-toolbar input{margin:2px 1px 4px;line-height:18px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px Arial,Helvetica,sans-serif normal;color:#464646;border:1px solid #c3c3c3;-webkit-border-radius:3px;border-radius:3px;background:#eee;background:-webkit-gradient(linear,left bottom,left top,from(#e3e3e3),to(#fff)) #eee;background:-webkit-linear-gradient(bottom,#e3e3e3,#fff) #eee;background:-moz-linear-gradient(bottom,#e3e3e3,#fff) #eee;background:-o-linear-gradient(bottom,#e3e3e3,#fff) #eee;background:linear-gradient(to top,#e3e3e3,#fff) #eee}.redux-container-image_select .redux-table-container{display:table;table-layout:fixed;width:100%}.redux-container-image_select .redux-image-select{margin:0!important}.redux-container-image_select .redux-image-select .tiles{display:block;background-color:#FFF;background-repeat:repeat;width:40px;height:40px}.redux-container-image_select .redux-image-select .tiles,.redux-container-image_select .redux-image-select img{border-color:#d9d9d9}.redux-container-image_select .redux-image-select li:last-child{margin-bottom:0}.redux-container-image_select .redux-image-select input[type=radio]{display:none}.redux-container-image_select .redux-image-select-presets img{width:100%}.redux-container-image_select ul.redux-image-select li{margin:0 10px 3px;display:inline-block;padding:2px 2px 2px 0}.redux-container-image_select .redux-image-select-selected{background-color:#f9f9f9}.redux-container-image_select .redux-image-select .tiles,.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select-selected .tiles,.redux-container-image_select .redux-image-select-selected img{border-width:4px;border-style:solid}.redux-container-image_select .redux-image-select-selected .tiles{border-color:#7a7a7a}.redux-info-field{min-height:20px;padding:8px 19px;margin:10px 0;border-radius:4px;border:1px solid;position:relative}.redux-info-field h1,.redux-info-field h2,.redux-info-field h3,.redux-info-field h4,.redux-info-field h5,.redux-info-field h6{border-bottom:0!important}.redux-info-field h3{color:#777}.redux-info-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-info-field .redux-info-icon i{font-size:2em}.redux-info-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-info-field.redux-normal{background-color:#eee;border-color:#ccc;color:#666}.redux-info-field.redux-normal i{color:#c5c5c5}.redux-info-field.redux-warning{background-color:#fbeba4;border-color:#d7c281;color:#958234}.redux-info-field.redux-warning i{color:#dcca81}.redux-info-field.redux-success{background-color:#c4ee91;border-color:#71af5d;color:#4d7615}.redux-info-field.redux-success i{color:#a0ca6c}.redux-info-field.redux-critical{background-color:#fba1a3;border-color:#b84f5b;color:#981225}.redux-info-field.redux-critical i{color:#dd767d}.redux-info-field.redux-info{background-color:#d3e4f4;border-color:#a9b6c2;color:#5c80a1}.redux-info-field.redux-info i{color:#afc6da}.redux-notice-field{margin:15px 0 0;background-color:#fff;border:0;border-left:4px solid #f3f3f3;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);padding:1px 12px}.redux-notice-field h1,.redux-notice-field h2,.redux-notice-field h3,.redux-notice-field h4,.redux-notice-field h5,.redux-notice-field h6{border-bottom:0!important}.redux-notice-field p{margin:.5em 0;padding:2px}.redux-notice-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-notice-field .redux-info-icon i{font-size:2em}.redux-notice-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-notice-field.redux-info{border-left:4px solid #0099d5}.redux-notice-field.redux-success{border-left:4px solid #7ad03a}.redux-notice-field.redux-warning{border-left:4px solid #fbeba4}.redux-notice-field.redux-critical{border-left:4px solid #dd3d36}.redux-container-link_color .linkColor{display:inline-block;padding-right:10px;padding-bottom:7px}.redux-main .button.remove-image,.redux-main .removeCSS{margin-left:10px;color:#ef521d}.redux-main .button.remove-image:hover,.redux-main .removeCSS:hover{color:red}.redux-main .upload_button_div{margin-bottom:5px}.redux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:700;text-decoration:none;text-shadow:1px 1px 0 #FFF;margin:0 10px 0 0;padding:3px 10px;background:#FFDFEC;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .reset-button{font-family:Arial,Verdana,sans-serif;float:left;margin:0;color:#ef521d;border-color:#bbb}.redux-main .redux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-main .redux-main .upload{width:80%!important}.redux-main .button{margin-top:2px}.redux-container-multi_text ul.redux-multi-text{margin:0;padding:0}.redux-container-multi_text .redux-multi-text-remove{color:red;padding:2px 4px;margin-left:5px}.redux-container-multi_text .redux-multi-text-remove:hover{background:red;color:#fff;text-decoration:none}.redux-container-multi_text .redux-multi-text-add{margin:5px 0}@media screen and (max-width:782px){.redux-container-multi_text input{clear:both}.redux-container-multi_text .redux-multi-text-remove{margin:0;float:right}}.redux-container-palette label.ui-button.ui-widget{width:95%;background:0 0;padding:0}.redux-container-palette label.ui-button.ui-widget .ui-button-text{display:flex}.redux-container-palette label.ui-button.ui-widget .ui-button-text span{padding:10px 0;flex-grow:1;font-size:0;line-height:10px;color:transparent;-webkit-transition:all 200ms ease-in-out;-moz-transition:all 200ms ease-in-out;-ms-transition:all 200ms ease-in-out;-o-transition:all 200ms ease-in-out;transition:all 200ms ease-in-out}.redux-container-palette label.ui-button.ui-widget .ui-button-text span:hover{padding:10px;flex-grow:3;min-width:60px;font-size:10px;line-height:10px;color:#000}.redux-container-palette label.ui-state-active.ui-button.ui-widget span.ui-button-text{border:3px solid #333}.redux-main .form-table-section-indented{width:95%;margin-left:5%}.redux-main .form-table-section tr:first-of-type th:first-of-type{padding:0!important}.redux-main h3{margin-top:10px}.redux-main .form-table-section-indented>tbody>tr:first-child{display:none}.redux-main .form-table-section-indented>tbody>tr:nth-last-child(2){border-bottom:0}.redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.redux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.redux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-container-slider .redux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.redux-container-slider .redux-slider-input,.redux-container-slider .redux-slider-select-one,.redux-container-slider .redux-slider-select-two{width:100px!important;text-align:center}.redux-container-slider .redux-slider-label{position:absolute;margin-left:-5px}.redux-container-slider .redux-slider-label-one{position:absolute;margin-left:-22px}.redux-container-slider .redux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width:782px){.redux-container-slider input{display:inline-block!important}}@media screen and (max-width:570px){.redux-container-slider{text-align:center}.redux-container-slider .redux-slider-label,.redux-container-slider .select2-container,.redux-container-slider input,.redux-container-slider select{display:block!important;position:inherit;margin:10px auto}.redux-container-slider .redux-slider-container{margin-top:3px;width:80%}}.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;-ms-user-select:none;-moz-user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-base{width:100%;height:100%;position:relative}.noUi-origin{position:absolute;right:0;top:0;left:0;bottom:0}.noUi-handle{position:relative;z-index:1}.noUi-stacking .noUi-handle{z-index:10}.noUi-state-tap .noUi-origin{-webkit-transition:left .3s,top .3s;transition:left .3s,top .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.noUi-horizontal.noUi-extended{padding:0 15px}.noUi-horizontal.noUi-extended .noUi-origin{right:-15px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.noUi-vertical.noUi-extended{padding:15px 0}.noUi-vertical.noUi-extended .noUi-origin{bottom:-15px}.noUi-background{background:#FAFAFA;box-shadow:inset 0 1px 1px #f0f0f0}.noUi-connect{background:#3FB8AF;box-shadow:inset 0 0 3px rgba(51,51,51,.45);-webkit-transition:background 450ms;transition:background 450ms}.noUi-origin{border-radius:2px}.noUi-target{border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-target.noUi-connect{box-shadow:inset 0 0 3px rgba(51,51,51,.45),0 3px 6px -5px #BBB}.noUi-dragable{cursor:w-resize}.noUi-vertical .noUi-dragable{cursor:n-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect,[disabled].noUi-connect{background:#B8B8B8}[disabled] .noUi-handle{cursor:not-allowed}.noUi-state-blocked .noUi-connect,.noUi-state-blocked.noUi-connect{background:#4FDACF}.redux-container-slides .redux-slides-list .select2-container{margin-bottom:10px;width:100%}.redux-container-slides .ui-accordion-header{margin-bottom:0}.redux-container-slides .full-text,.redux-container-slides .large-text{width:100%}.redux-container-slides .redux-slides-accordion-group{border:1px solid #dfdfdf!important;border-radius:3px!important;margin-top:0!important;margin-bottom:10px;background:#f9f9f9;padding:5px}.redux-container-slides .redux-slides-accordion-group h3{border:1px solid #dfdfdf;cursor:move!important;font-weight:700;padding:0 10px!important;height:40px;line-height:40px!important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-slides #redux-slides-accordion .redux-slides-image{height:250px;padding:5px;margin-top:10px;margin-bottom:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-container-slides .redux-slides-add{float:right;margin-right:10%;display:block;margin-bottom:10px}.redux-container-slides .redux-slides-remove{color:#ef521d!important;float:right;margin-top:5px}.redux-container-slides .redux-slides-header{font-weight:700}.redux-container-slides .redux_slides_add_remove{margin-bottom:10px}.redux-container-slides .ui-state-hover{background-color:#ececec!important}.redux-container-sortable i.el{cursor:move}.redux-container-sortable label{margin-right:10px;width:300px}.redux-container-sortable label.bugger{margin-bottom:0!important;font-size:12px!important;color:#999}.redux-container-sortable input{margin-right:10px}.redux-container-sortable .checkbox-container{width:364px}.redux-container-sortable .checkbox-container .drag{float:right;margin-left:10px}.redux-container-sortable ul.labeled li{line-height:1.4em!important}.redux-container-sortable li{line-height:30px!important}.redux-container-sortable li.ui-state-highlight{height:30px;width:364px;margin-bottom:13px}.redux-container-sortable li.placeholder{height:30px;margin:10px 0}.redux-container-sorter{margin-right:-20px}.redux-container-sorter ul{background:#F9F9F9;border:1px solid #E3E3E3;min-height:40px;padding:10px 10px 0;width:145px;float:left;margin:0 15px 0 0}.redux-container-sorter ul.filled{opacity:.7;filter:alpha(opacity=70);background:#efecec}.redux-container-sorter ul li{border:1px solid #DFDFDF;cursor:move;font-weight:700;margin-bottom:10px!important;padding:0 10px;height:40px;line-height:40px!important;background-color:#F1F1F1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-sorter ul li h3{margin:0 0 10px;text-align:center;color:#777;text-transform:capitalize;word-wrap:break-word}.redux-container-sorter ul li.placeholder{height:40px}.redux-container-spacing .select_wrapper,.redux-container-spacing select{width:80px!important;float:left}.redux-container-spacing .field-spacing-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width:782px){.redux-container-spacing .field-spacing-input input{display:inline-block!important;width:70px!important}.redux-container-spacing .field-spacing-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-spacing .select_wrapper{margin-top:6px}}.redux-container-spinner .spinner-wrpr{position:relative;display:block;height:30px;overflow:hidden}.redux-container-spinner .spinner-wrpr .spinner-input{position:relative!important;z-index:1;width:45px!important;height:30px!important;background:#e7e7e7!important;border:1px solid #bfbfbf!important;border-right:0!important;border-left:0!important;-webkit-border-radius:0!important;-moz-border-radius:0!important;border-radius:0!important}.redux-container-spinner .ui-spinner{position:static;display:inline}.redux-container-spinner .ui-spinner-buttons{position:absolute;padding:0}.redux-container-spinner .ui-widget .ui-spinner-button{position:absolute;top:0;padding:0 0 30px;overflow:hidden;cursor:pointer;background:-moz-linear-gradient(#fff,#f3f3f3) #fff;background:-o-linear-gradient(#fff,#f3f3f3) #fff;background:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f3f3f3)) #fff;background:linear-gradient(#fff,#f3f3f3) #fff;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.redux-container-spinner .ui-spinner-button:hover,.redux-container-spinner .ui-state-hover{background:-moz-linear-gradient(#f3f3f3,#fff) #f3f3f3;background:-o-linear-gradient(#f3f3f3,#fff) #f3f3f3;background:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff)) #f3f3f3;background:linear-gradient(#f3f3f3,#fff) #f3f3f3}.redux-container-spinner .ui-corner-tr,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 5px 5px 0;border-radius:0 5px 5px 0}.redux-container-spinner .ui-corner-br,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{-webkit-border-radius:5px 0 0 5px;-moz-border-radius:5px 0 0 5px;border-radius:5px 0 0 5px}.redux-container-spinner .ui-spinner-button .ui-icon{top:0;display:block;width:28px;height:28px;margin:0;border:1px solid #b7b7b7}.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpsjwsKADAIQu3u3tsRY6M5gz7w0AqSQFLdZ3ZRgmf44JQ/EOZ9oYOsiDviVemP2oYoWCwBBgDpO6VXVo3RyQAAAABJRU5ErkJggg==) 10px 10px no-repeat}.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNpi+P//PwM6bmlpwS4IorEKokggC8Il0AVhEv9x6sAmiaz9P05XIUsygmVRAUiAESDAAFHcpVdWtdj/AAAAAElFTkSuQmCC) 10px 10px no-repeat}.redux-container-switch .switch-options{min-height:30px;margin-right:10px}.redux-container-switch .switch-options label{cursor:pointer}.redux-container-switch .switch-options input{display:none}.redux-container-switch .cb-disable,.redux-container-switch .cb-enable{padding:0 10px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.redux-container-switch .cb-disable span,.redux-container-switch .cb-enable span{line-height:30px;font-weight:700;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.redux-container-switch .cb-disable,.redux-container-switch .cb-disable span,.redux-container-switch .cb-enable,.redux-container-switch .cb-enable span{display:block;float:left}.redux-container-switch .cb-enable{border-right:0;border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px}.redux-container-switch .cb-enable.selected{color:#fff}.redux-container-switch .cb-disable{border-left:0;border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0}.redux-container-switch .cb-disable.selected{color:#fff}.redux-container-text label{display:block;position:relative;font-size:12px!important;text-align:left;color:#999;margin:4px 0 2px!important;cursor:default;top:5px;width:100px}.redux-container-text input{clear:left}.redux-container-text .input_wrapper{display:block;position:relative;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:left;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container{display:block;position:relative;margin:0;padding:0;width:100%;max-width:660px}.redux-main .redux-typography-container .clearfix{clear:both}.redux-main .redux-typography-container .clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.redux-main .redux-typography-container .redux-typography-color,.redux-main .redux-typography-container input.wp-picker-default{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;height:24px;padding:0 14px!important;margin-top:0;margin-bottom:0;margin-left:4px!important;font-size:12px!important}.redux-main .redux-typography-container .select_wrapper{display:block;position:relative;float:left;clear:none;margin:0 10px 0 0;width:48%!important;min-width:210px!important;max-width:324px!important;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .select_wrapper:nth-child(even),.redux-main .redux-typography-container .select_wrapper:nth-child(odd){margin-right:10px!important}.redux-main .redux-typography-container .select_wrapper.typography-family .select2-container{width:100%}.redux-main .redux-typography-container .select_wrapper .redux-typography{font-size:14px!important;display:block;float:left;height:28px!important;line-height:50px!important;padding:0!important;width:100%!important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .wp-picker-container{float:left;clear:left;margin-bottom:12px;padding:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-main .redux-typography-container .input_wrapper{display:block;position:relative;margin:0 4px 0 5px;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container .input_wrapper.font-size{margin-left:0}.redux-main .redux-typography-container .input_wrapper input.mini{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;width:78%;text-align:center;margin:0;height:28px;top:3px;padding:0 2px 0 5px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .redux-typography-container .picker-wrapper{display:block;position:relative;margin:0;padding:0;width:23%;width:100%;max-width:23%;min-width:70px;min-width:100%;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container label{display:block;position:relative;font-size:12px!important;text-align:left;color:#999;margin:4px 0 2px!important;cursor:default}.redux-main .redux-typography-container .typography-preview{display:none;width:100%;border:1px dotted #d3d3d3;max-width:850px;padding:10px;font-size:10pt;height:auto;margin:5px 0 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.redux-main .redux-typography-container .typography-color{border:0;margin:0}.redux-main .redux-typography-container ::-webkit-input-placeholder{line-height:19px}@media screen and (max-width:540px){.redux-main .redux-main .redux-typography-container{max-width:230px;margin:0 auto}.redux-main .redux-main .redux-typography-container .select_wrapper{max-width:210px;min-width:210px;width:210px;margin-left:0!important;margin-right:0!important}.redux-main .redux-main .redux-typography-container .input_wrapper{max-width:101px;min-width:101px;width:101px;margin-left:0!important;margin-right:5px!important}.redux-main .redux-main .redux-typography-container .input_wrapper input.mini{width:73%}.redux-main .redux-main .redux-typography-container .input-append .add-on{width:30%;padding:5px!important}.redux-main .redux-main .redux-main .wp-picker-container .wp-picker-input-wrap{margin-top:7px}}@media screen and (max-width:360px){.redux-main .redux-typography-container .iris-picker .iris-square{margin-right:3%}}.redux-main input.redux-color{float:left;width:70px;margin-left:5px}.redux-main input.color-transparency{margin-left:10px;margin-right:3px}.redux-main input.wp-color-picker{width:80px!important}.redux-main .section-color .controls{width:345px}.redux-main .section-color .explain{width:225px}.redux-main .iris-picker .iris-strip .ui-slider-handle{position:absolute;background:0 0!important;right:-3px;left:-3px;border:4px solid #aaa!important;border-width:4px 3px;width:auto;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);opacity:.9;z-index:5;cursor:ns-resize}.redux-main .iris-picker .iris-slider-offset{position:absolute;top:2px;left:0;right:0;bottom:4px;width:28px;background:0 0!important;border:0!important;height:auto}.redux-main .wp-picker-container input{margin-bottom:inherit;margin-top:inherit;padding:3px 5px}.redux-main .wp-picker-container .wp-color-result{outline:0;margin:0}.redux-main .wp-picker-container .wp-picker-default{padding:0 10px 1px}.redux-main .redux-color-gradient{line-height:24px}.redux-main .color-transparency-check{line-height:1;margin-top:0!important}.redux-main .wp-picker-clear{margin-top:0!important}.redux-main .button.remove-image,.redux-main .removeCSS{margin-left:10px;color:#ef521d}.redux-main .button.remove-image:hover,.redux-main .removeCSS:hover{color:red}.redux-main .upload_button_div{margin-bottom:5px}.redux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:700;text-decoration:none;text-shadow:1px 1px 0 #FFF;margin:0 10px 0 0;padding:3px 10px;background:#FFDFEC;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .reset-button{font-family:Arial,Verdana,sans-serif;float:left;margin:0;color:#ef521d;border-color:#bbb}.redux-main .redux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-main .redux-main .upload{width:80%!important}.redux-main .button{margin-top:2px}
|
|
inc/redux/redux-framework/ReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
/*!
|
2 |
-
* jQuery UI Bootstrap (0.5)
|
3 |
-
* http://addyosmani.github.com/jquery-ui-bootstrap
|
4 |
-
*
|
5 |
-
* Copyright 2012 - 2013, Addy Osmani
|
6 |
-
* Dual licensed under the MIT or GPL Version 2 licenses.
|
7 |
-
*
|
8 |
-
* Portions copyright jQuery UI & Twitter Bootstrap
|
9 |
-
*/.ui-state-disabled{cursor:default !important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:13px}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaaaaa;background:#fff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x;color:#404040}.ui-widget-content a{color:#404040}.ui-widget-header{font-weight:bold;border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border:1px solid #666}.ui-widget-header a{color:#222222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), color-stop(25%, #fff), to(#e6e6e6));background-image:-webkit-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #fff, #fff 25%, #e6e6e6);background-image:-ms-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-o-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:linear-gradient(#fff, #fff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);text-shadow:0 1px 1px rgba(255,255,255,0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-webkit-transition:0.1s linear background-image;-moz-transition:0.1s linear background-image;-ms-transition:0.1s linear background-image;-o-transition:0.1s linear background-image;transition:0.1s linear background-image;overflow:visible}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{background-position:0 -15px;color:#333;text-decoration:none}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaaaaa;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget :active{outline:none}.ui-state-highlight p,.ui-state-error p,.ui-state-default p{font-size:13px;font-weight:normal;line-height:18px;margin:7px 15px}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{position:relative;margin-bottom:18px;color:#404040;background-color:#eedc94;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));background-image:-moz-linear-gradient(top, #fceec1, #eedc94);background-image:-ms-linear-gradient(top, #fceec1, #eedc94);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));background-image:-webkit-linear-gradient(top, #fceec1, #eedc94);background-image:-o-linear-gradient(top, #fceec1, #eedc94);background-image:linear-gradient(top, #fceec1, #eedc94);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#eedc94 #eedc94 #e4c652;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);text-shadow:0 1px 0 rgba(255,255,255,0.5);border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25)}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{position:relative;margin-bottom:18px;color:#ffffff;border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_f6cf3b_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;font-weight:bold}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0 !important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em 1.7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block}.ui-button{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), color-stop(25%, #fff), to(#e6e6e6));background-image:-webkit-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #fff, #fff 25%, #e6e6e6);background-image:-ms-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-o-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:linear-gradient(#fff, #fff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);padding:5px 14px 6px;margin:0;text-shadow:0 1px 1px rgba(255,255,255,0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-webkit-transition:0.1s linear background-image;-moz-transition:0.1s linear background-image;-ms-transition:0.1s linear background-image;-o-transition:0.1s linear background-image;transition:0.1s linear background-image;overflow:visible}.ui-button-primary{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.ui-button-success{color:#ffffff;background-color:#57a957;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#57a957 #57a957 #3d773d;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.ui-button-error{color:#ffffff;background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.ui-button-icon-only{width:2.2em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px;display:none}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{top:50%;margin-top:-3px;margin-bottom:3px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-state-active{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.ui-buttonset .ui-button{margin-left:0;margin-right:0}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;border:0px;font-weight:bold;width:100%;padding:4px 0;background-color:#f5f5f5;color:#808080}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-datepicker th{font-weight:bold;color:gray}.ui-datepicker-today a:hover{background-color:#808080;color:#ffffff}.ui-datepicker-today a{background-color:#BFBFBF;cursor:pointer;padding:0 4px;margin-bottom:0px}.ui-datepicker td a{margin-bottom:0px;border:0px}.ui-datepicker td:hover{color:#ffffff}.ui-datepicker td .ui-state-default{border:0px;background:none;margin-bottom:0px;padding:5px;color:gray;text-align:center;filter:none}.ui-datepicker td .ui-state-active{background:#BFBFBF;margin-bottom:0px;font-size:normal;text-shadow:0px;color:#ffffff;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.ui-datepicker td .ui-state-hover{color:#ffffff;background:#0064cd;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-border-radius:4px;-moz-border-radius:4px;-khtml-border-radius:4px;border-radius:4px}.ui-widget-content{border:1px solid #dfdfdf}.ui-datepicker table{background:#fff}.placeholder{background:#f9f9f9 !important;border:1px dashed #bbb !important}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/css/vendor/qtip/jquery.qtip.css
DELETED
@@ -1,623 +0,0 @@
|
|
1 |
-
/*
|
2 |
-
* qTip2 - Pretty powerful tooltips - v2.2.0
|
3 |
-
* http://qtip2.com
|
4 |
-
*
|
5 |
-
* Copyright (c) 2013 Craig Michael Thompson
|
6 |
-
* Released under the MIT, GPL licenses
|
7 |
-
* http://jquery.org/license
|
8 |
-
*
|
9 |
-
* Date: Thu Nov 21 2013 08:34 GMT+0000
|
10 |
-
* Plugins: tips modal viewport svg imagemap ie6
|
11 |
-
* Styles: basic css3
|
12 |
-
*/
|
13 |
-
.qtip{
|
14 |
-
position: absolute;
|
15 |
-
left: -28000px;
|
16 |
-
top: -28000px;
|
17 |
-
display: none;
|
18 |
-
|
19 |
-
max-width: 280px;
|
20 |
-
min-width: 50px;
|
21 |
-
|
22 |
-
font-size: 10.5px;
|
23 |
-
line-height: 12px;
|
24 |
-
|
25 |
-
direction: ltr;
|
26 |
-
|
27 |
-
box-shadow: none;
|
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 |
-
|
56 |
-
cursor: pointer;
|
57 |
-
outline: medium none;
|
58 |
-
|
59 |
-
border-width: 1px;
|
60 |
-
border-style: solid;
|
61 |
-
border-color: transparent;
|
62 |
-
}
|
63 |
-
|
64 |
-
.qtip-titlebar .qtip-close{
|
65 |
-
right: 4px; top: 50%;
|
66 |
-
margin-top: -9px;
|
67 |
-
}
|
68 |
-
|
69 |
-
* html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */
|
70 |
-
|
71 |
-
.qtip-titlebar .ui-icon,
|
72 |
-
.qtip-icon .ui-icon{
|
73 |
-
display: block;
|
74 |
-
text-indent: -1000em;
|
75 |
-
direction: ltr;
|
76 |
-
}
|
77 |
-
|
78 |
-
.qtip-icon, .qtip-icon .ui-icon{
|
79 |
-
-moz-border-radius: 3px;
|
80 |
-
-webkit-border-radius: 3px;
|
81 |
-
border-radius: 3px;
|
82 |
-
text-decoration: none;
|
83 |
-
}
|
84 |
-
|
85 |
-
.qtip-icon .ui-icon{
|
86 |
-
width: 18px;
|
87 |
-
height: 14px;
|
88 |
-
|
89 |
-
line-height: 14px;
|
90 |
-
text-align: center;
|
91 |
-
text-indent: 0;
|
92 |
-
font: normal bold 10px/13px Tahoma,sans-serif;
|
93 |
-
|
94 |
-
color: inherit;
|
95 |
-
background: transparent none no-repeat -100em -100em;
|
96 |
-
}
|
97 |
-
|
98 |
-
/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
|
99 |
-
.qtip-focus{}
|
100 |
-
|
101 |
-
/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */
|
102 |
-
.qtip-hover{}
|
103 |
-
|
104 |
-
/* Default tooltip style */
|
105 |
-
.qtip-default{
|
106 |
-
border-width: 1px;
|
107 |
-
border-style: solid;
|
108 |
-
border-color: #F1D031;
|
109 |
-
|
110 |
-
background-color: #FFFFA3;
|
111 |
-
color: #555;
|
112 |
-
}
|
113 |
-
|
114 |
-
.qtip-default .qtip-titlebar{
|
115 |
-
background-color: #FFEF93;
|
116 |
-
}
|
117 |
-
|
118 |
-
.qtip-default .qtip-icon{
|
119 |
-
border-color: #CCC;
|
120 |
-
background: #F1F1F1;
|
121 |
-
color: #777;
|
122 |
-
}
|
123 |
-
|
124 |
-
.qtip-default .qtip-titlebar .qtip-close{
|
125 |
-
border-color: #AAA;
|
126 |
-
color: #111;
|
127 |
-
}
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
/*! Light tooltip style */
|
132 |
-
.qtip-light{
|
133 |
-
background-color: white;
|
134 |
-
border-color: #E2E2E2;
|
135 |
-
color: #454545;
|
136 |
-
}
|
137 |
-
|
138 |
-
.qtip-light .qtip-titlebar{
|
139 |
-
background-color: #f1f1f1;
|
140 |
-
}
|
141 |
-
|
142 |
-
|
143 |
-
/*! Dark tooltip style */
|
144 |
-
.qtip-dark{
|
145 |
-
background-color: #505050;
|
146 |
-
border-color: #303030;
|
147 |
-
color: #f3f3f3;
|
148 |
-
}
|
149 |
-
|
150 |
-
.qtip-dark .qtip-titlebar{
|
151 |
-
background-color: #404040;
|
152 |
-
}
|
153 |
-
|
154 |
-
.qtip-dark .qtip-icon{
|
155 |
-
border-color: #444;
|
156 |
-
}
|
157 |
-
|
158 |
-
.qtip-dark .qtip-titlebar .ui-state-hover{
|
159 |
-
border-color: #303030;
|
160 |
-
}
|
161 |
-
|
162 |
-
|
163 |
-
/*! Cream tooltip style */
|
164 |
-
.qtip-cream{
|
165 |
-
background-color: #FBF7AA;
|
166 |
-
border-color: #F9E98E;
|
167 |
-
color: #A27D35;
|
168 |
-
}
|
169 |
-
|
170 |
-
.qtip-cream .qtip-titlebar{
|
171 |
-
background-color: #F0DE7D;
|
172 |
-
}
|
173 |
-
|
174 |
-
.qtip-cream .qtip-close .qtip-icon{
|
175 |
-
background-position: -82px 0;
|
176 |
-
}
|
177 |
-
|
178 |
-
|
179 |
-
/*! Red tooltip style */
|
180 |
-
.qtip-red{
|
181 |
-
background-color: #F78B83;
|
182 |
-
border-color: #D95252;
|
183 |
-
color: #912323;
|
184 |
-
}
|
185 |
-
|
186 |
-
.qtip-red .qtip-titlebar{
|
187 |
-
background-color: #F06D65;
|
188 |
-
}
|
189 |
-
|
190 |
-
.qtip-red .qtip-close .qtip-icon{
|
191 |
-
background-position: -102px 0;
|
192 |
-
}
|
193 |
-
|
194 |
-
.qtip-red .qtip-icon{
|
195 |
-
border-color: #D95252;
|
196 |
-
}
|
197 |
-
|
198 |
-
.qtip-red .qtip-titlebar .ui-state-hover{
|
199 |
-
border-color: #D95252;
|
200 |
-
}
|
201 |
-
|
202 |
-
|
203 |
-
/*! Green tooltip style */
|
204 |
-
.qtip-green{
|
205 |
-
background-color: #CAED9E;
|
206 |
-
border-color: #90D93F;
|
207 |
-
color: #3F6219;
|
208 |
-
}
|
209 |
-
|
210 |
-
.qtip-green .qtip-titlebar{
|
211 |
-
background-color: #B0DE78;
|
212 |
-
}
|
213 |
-
|
214 |
-
.qtip-green .qtip-close .qtip-icon{
|
215 |
-
background-position: -42px 0;
|
216 |
-
}
|
217 |
-
|
218 |
-
|
219 |
-
/*! Blue tooltip style */
|
220 |
-
.qtip-blue{
|
221 |
-
background-color: #E5F6FE;
|
222 |
-
border-color: #ADD9ED;
|
223 |
-
color: #5E99BD;
|
224 |
-
}
|
225 |
-
|
226 |
-
.qtip-blue .qtip-titlebar{
|
227 |
-
background-color: #D0E9F5;
|
228 |
-
}
|
229 |
-
|
230 |
-
.qtip-blue .qtip-close .qtip-icon{
|
231 |
-
background-position: -2px 0;
|
232 |
-
}
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
.qtip-shadow{
|
237 |
-
-webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
|
238 |
-
-moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
|
239 |
-
box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
|
240 |
-
}
|
241 |
-
|
242 |
-
/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */
|
243 |
-
.qtip-rounded,
|
244 |
-
.qtip-tipsy,
|
245 |
-
.qtip-bootstrap{
|
246 |
-
-moz-border-radius: 5px;
|
247 |
-
-webkit-border-radius: 5px;
|
248 |
-
border-radius: 5px;
|
249 |
-
}
|
250 |
-
|
251 |
-
.qtip-rounded .qtip-titlebar{
|
252 |
-
-moz-border-radius: 4px 4px 0 0;
|
253 |
-
-webkit-border-radius: 4px 4px 0 0;
|
254 |
-
border-radius: 4px 4px 0 0;
|
255 |
-
}
|
256 |
-
|
257 |
-
/* Youtube tooltip style */
|
258 |
-
.qtip-youtube{
|
259 |
-
-moz-border-radius: 2px;
|
260 |
-
-webkit-border-radius: 2px;
|
261 |
-
border-radius: 2px;
|
262 |
-
|
263 |
-
-webkit-box-shadow: 0 0 3px #333;
|
264 |
-
-moz-box-shadow: 0 0 3px #333;
|
265 |
-
box-shadow: 0 0 3px #333;
|
266 |
-
|
267 |
-
color: white;
|
268 |
-
border-width: 0;
|
269 |
-
|
270 |
-
background: #4A4A4A;
|
271 |
-
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));
|
272 |
-
background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%);
|
273 |
-
background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%);
|
274 |
-
background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%);
|
275 |
-
background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%);
|
276 |
-
}
|
277 |
-
|
278 |
-
.qtip-youtube .qtip-titlebar{
|
279 |
-
background-color: #4A4A4A;
|
280 |
-
background-color: rgba(0,0,0,0);
|
281 |
-
}
|
282 |
-
|
283 |
-
.qtip-youtube .qtip-content{
|
284 |
-
padding: .75em;
|
285 |
-
font: 12px arial,sans-serif;
|
286 |
-
|
287 |
-
filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);
|
288 |
-
-ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);";
|
289 |
-
}
|
290 |
-
|
291 |
-
.qtip-youtube .qtip-icon{
|
292 |
-
border-color: #222;
|
293 |
-
}
|
294 |
-
|
295 |
-
.qtip-youtube .qtip-titlebar .ui-state-hover{
|
296 |
-
border-color: #303030;
|
297 |
-
}
|
298 |
-
|
299 |
-
|
300 |
-
/* jQuery TOOLS Tooltip style */
|
301 |
-
.qtip-jtools{
|
302 |
-
background: #232323;
|
303 |
-
background: rgba(0, 0, 0, 0.7);
|
304 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323));
|
305 |
-
background-image: -moz-linear-gradient(top, #717171, #232323);
|
306 |
-
background-image: -webkit-linear-gradient(top, #717171, #232323);
|
307 |
-
background-image: -ms-linear-gradient(top, #717171, #232323);
|
308 |
-
background-image: -o-linear-gradient(top, #717171, #232323);
|
309 |
-
|
310 |
-
border: 2px solid #ddd;
|
311 |
-
border: 2px solid rgba(241,241,241,1);
|
312 |
-
|
313 |
-
-moz-border-radius: 2px;
|
314 |
-
-webkit-border-radius: 2px;
|
315 |
-
border-radius: 2px;
|
316 |
-
|
317 |
-
-webkit-box-shadow: 0 0 12px #333;
|
318 |
-
-moz-box-shadow: 0 0 12px #333;
|
319 |
-
box-shadow: 0 0 12px #333;
|
320 |
-
}
|
321 |
-
|
322 |
-
/* IE Specific */
|
323 |
-
.qtip-jtools .qtip-titlebar{
|
324 |
-
background-color: transparent;
|
325 |
-
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);
|
326 |
-
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)";
|
327 |
-
}
|
328 |
-
.qtip-jtools .qtip-content{
|
329 |
-
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);
|
330 |
-
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)";
|
331 |
-
}
|
332 |
-
|
333 |
-
.qtip-jtools .qtip-titlebar,
|
334 |
-
.qtip-jtools .qtip-content{
|
335 |
-
background: transparent;
|
336 |
-
color: white;
|
337 |
-
border: 0 dashed transparent;
|
338 |
-
}
|
339 |
-
|
340 |
-
.qtip-jtools .qtip-icon{
|
341 |
-
border-color: #555;
|
342 |
-
}
|
343 |
-
|
344 |
-
.qtip-jtools .qtip-titlebar .ui-state-hover{
|
345 |
-
border-color: #333;
|
346 |
-
}
|
347 |
-
|
348 |
-
|
349 |
-
/* Cluetip style */
|
350 |
-
.qtip-cluetip{
|
351 |
-
-webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
|
352 |
-
-moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
|
353 |
-
box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
|
354 |
-
|
355 |
-
background-color: #D9D9C2;
|
356 |
-
color: #111;
|
357 |
-
border: 0 dashed transparent;
|
358 |
-
}
|
359 |
-
|
360 |
-
.qtip-cluetip .qtip-titlebar{
|
361 |
-
background-color: #87876A;
|
362 |
-
color: white;
|
363 |
-
border: 0 dashed transparent;
|
364 |
-
}
|
365 |
-
|
366 |
-
.qtip-cluetip .qtip-icon{
|
367 |
-
border-color: #808064;
|
368 |
-
}
|
369 |
-
|
370 |
-
.qtip-cluetip .qtip-titlebar .ui-state-hover{
|
371 |
-
border-color: #696952;
|
372 |
-
color: #696952;
|
373 |
-
}
|
374 |
-
|
375 |
-
|
376 |
-
/* Tipsy style */
|
377 |
-
.qtip-tipsy{
|
378 |
-
background: black;
|
379 |
-
background: rgba(0, 0, 0, .87);
|
380 |
-
|
381 |
-
color: white;
|
382 |
-
border: 0 solid transparent;
|
383 |
-
|
384 |
-
font-size: 11px;
|
385 |
-
font-family: 'Lucida Grande', sans-serif;
|
386 |
-
font-weight: bold;
|
387 |
-
line-height: 16px;
|
388 |
-
text-shadow: 0 1px black;
|
389 |
-
}
|
390 |
-
|
391 |
-
.qtip-tipsy .qtip-titlebar{
|
392 |
-
padding: 6px 35px 0 10px;
|
393 |
-
background-color: transparent;
|
394 |
-
}
|
395 |
-
|
396 |
-
.qtip-tipsy .qtip-content{
|
397 |
-
padding: 6px 10px;
|
398 |
-
}
|
399 |
-
|
400 |
-
.qtip-tipsy .qtip-icon{
|
401 |
-
border-color: #222;
|
402 |
-
text-shadow: none;
|
403 |
-
}
|
404 |
-
|
405 |
-
.qtip-tipsy .qtip-titlebar .ui-state-hover{
|
406 |
-
border-color: #303030;
|
407 |
-
}
|
408 |
-
|
409 |
-
|
410 |
-
/* Tipped style */
|
411 |
-
.qtip-tipped{
|
412 |
-
border: 3px solid #959FA9;
|
413 |
-
|
414 |
-
-moz-border-radius: 3px;
|
415 |
-
-webkit-border-radius: 3px;
|
416 |
-
border-radius: 3px;
|
417 |
-
|
418 |
-
background-color: #F9F9F9;
|
419 |
-
color: #454545;
|
420 |
-
|
421 |
-
font-weight: normal;
|
422 |
-
font-family: serif;
|
423 |
-
}
|
424 |
-
|
425 |
-
.qtip-tipped .qtip-titlebar{
|
426 |
-
border-bottom-width: 0;
|
427 |
-
|
428 |
-
color: white;
|
429 |
-
background: #3A79B8;
|
430 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D));
|
431 |
-
background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D);
|
432 |
-
background-image: -moz-linear-gradient(top, #3A79B8, #2E629D);
|
433 |
-
background-image: -ms-linear-gradient(top, #3A79B8, #2E629D);
|
434 |
-
background-image: -o-linear-gradient(top, #3A79B8, #2E629D);
|
435 |
-
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);
|
436 |
-
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)";
|
437 |
-
}
|
438 |
-
|
439 |
-
.qtip-tipped .qtip-icon{
|
440 |
-
border: 2px solid #285589;
|
441 |
-
background: #285589;
|
442 |
-
}
|
443 |
-
|
444 |
-
.qtip-tipped .qtip-icon .ui-icon{
|
445 |
-
background-color: #FBFBFB;
|
446 |
-
color: #555;
|
447 |
-
}
|
448 |
-
|
449 |
-
|
450 |
-
/**
|
451 |
-
* Twitter Bootstrap style.
|
452 |
-
*
|
453 |
-
* Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11.
|
454 |
-
* Does not work with IE 7.
|
455 |
-
*/
|
456 |
-
.qtip-bootstrap{
|
457 |
-
/** Taken from Bootstrap body */
|
458 |
-
font-size: 14px;
|
459 |
-
line-height: 20px;
|
460 |
-
color: #333333;
|
461 |
-
|
462 |
-
/** Taken from Bootstrap .popover */
|
463 |
-
padding: 1px;
|
464 |
-
background-color: #ffffff;
|
465 |
-
border: 1px solid #ccc;
|
466 |
-
border: 1px solid rgba(0, 0, 0, 0.2);
|
467 |
-
-webkit-border-radius: 6px;
|
468 |
-
-moz-border-radius: 6px;
|
469 |
-
border-radius: 6px;
|
470 |
-
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
471 |
-
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
472 |
-
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
473 |
-
-webkit-background-clip: padding-box;
|
474 |
-
-moz-background-clip: padding;
|
475 |
-
background-clip: padding-box;
|
476 |
-
}
|
477 |
-
|
478 |
-
.qtip-bootstrap .qtip-titlebar{
|
479 |
-
/** Taken from Bootstrap .popover-title */
|
480 |
-
padding: 8px 14px;
|
481 |
-
margin: 0;
|
482 |
-
font-size: 14px;
|
483 |
-
font-weight: normal;
|
484 |
-
line-height: 18px;
|
485 |
-
background-color: #f7f7f7;
|
486 |
-
border-bottom: 1px solid #ebebeb;
|
487 |
-
-webkit-border-radius: 5px 5px 0 0;
|
488 |
-
-moz-border-radius: 5px 5px 0 0;
|
489 |
-
border-radius: 5px 5px 0 0;
|
490 |
-
}
|
491 |
-
|
492 |
-
.qtip-bootstrap .qtip-titlebar .qtip-close{
|
493 |
-
/**
|
494 |
-
* Overrides qTip2:
|
495 |
-
* .qtip-titlebar .qtip-close{
|
496 |
-
* [...]
|
497 |
-
* right: 4px;
|
498 |
-
* top: 50%;
|
499 |
-
* [...]
|
500 |
-
* border-style: solid;
|
501 |
-
* }
|
502 |
-
*/
|
503 |
-
right: 11px;
|
504 |
-
top: 45%;
|
505 |
-
border-style: none;
|
506 |
-
}
|
507 |
-
|
508 |
-
.qtip-bootstrap .qtip-content{
|
509 |
-
/** Taken from Bootstrap .popover-content */
|
510 |
-
padding: 9px 14px;
|
511 |
-
}
|
512 |
-
|
513 |
-
.qtip-bootstrap .qtip-icon{
|
514 |
-
/**
|
515 |
-
* Overrides qTip2:
|
516 |
-
* .qtip-default .qtip-icon {
|
517 |
-
* border-color: #CCC;
|
518 |
-
* background: #F1F1F1;
|
519 |
-
* color: #777;
|
520 |
-
* }
|
521 |
-
*/
|
522 |
-
background: transparent;
|
523 |
-
}
|
524 |
-
|
525 |
-
.qtip-bootstrap .qtip-icon .ui-icon{
|
526 |
-
/**
|
527 |
-
* Overrides qTip2:
|
528 |
-
* .qtip-icon .ui-icon{
|
529 |
-
* width: 18px;
|
530 |
-
* height: 14px;
|
531 |
-
* }
|
532 |
-
*/
|
533 |
-
width: auto;
|
534 |
-
height: auto;
|
535 |
-
|
536 |
-
/* Taken from Bootstrap .close */
|
537 |
-
float: right;
|
538 |
-
font-size: 20px;
|
539 |
-
font-weight: bold;
|
540 |
-
line-height: 18px;
|
541 |
-
color: #000000;
|
542 |
-
text-shadow: 0 1px 0 #ffffff;
|
543 |
-
opacity: 0.2;
|
544 |
-
filter: alpha(opacity=20);
|
545 |
-
}
|
546 |
-
|
547 |
-
.qtip-bootstrap .qtip-icon .ui-icon:hover{
|
548 |
-
/* Taken from Bootstrap .close:hover */
|
549 |
-
color: #000000;
|
550 |
-
text-decoration: none;
|
551 |
-
cursor: pointer;
|
552 |
-
opacity: 0.4;
|
553 |
-
filter: alpha(opacity=40);
|
554 |
-
}
|
555 |
-
|
556 |
-
|
557 |
-
/* IE9 fix - removes all filters */
|
558 |
-
.qtip:not(.ie9haxors) div.qtip-content,
|
559 |
-
.qtip:not(.ie9haxors) div.qtip-titlebar{
|
560 |
-
filter: none;
|
561 |
-
-ms-filter: none;
|
562 |
-
}
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
.qtip .qtip-tip{
|
567 |
-
margin: 0 auto;
|
568 |
-
overflow: hidden;
|
569 |
-
z-index: 10;
|
570 |
-
|
571 |
-
}
|
572 |
-
|
573 |
-
/* Opera bug #357 - Incorrect tip position
|
574 |
-
https://github.com/Craga89/qTip2/issues/367 */
|
575 |
-
x:-o-prefocus, .qtip .qtip-tip{
|
576 |
-
visibility: hidden;
|
577 |
-
}
|
578 |
-
|
579 |
-
.qtip .qtip-tip,
|
580 |
-
.qtip .qtip-tip .qtip-vml,
|
581 |
-
.qtip .qtip-tip canvas{
|
582 |
-
position: absolute;
|
583 |
-
|
584 |
-
color: #123456;
|
585 |
-
background: transparent;
|
586 |
-
border: 0 dashed transparent;
|
587 |
-
}
|
588 |
-
|
589 |
-
.qtip .qtip-tip canvas{ top: 0; left: 0; }
|
590 |
-
|
591 |
-
.qtip .qtip-tip .qtip-vml{
|
592 |
-
behavior: url(#default#VML);
|
593 |
-
display: inline-block;
|
594 |
-
visibility: visible;
|
595 |
-
}
|
596 |
-
|
597 |
-
#qtip-overlay{
|
598 |
-
position: fixed;
|
599 |
-
left: 0; top: 0;
|
600 |
-
width: 100%; height: 100%;
|
601 |
-
}
|
602 |
-
|
603 |
-
/* Applied to modals with show.modal.blur set to true */
|
604 |
-
#qtip-overlay.blurs{ cursor: pointer; }
|
605 |
-
|
606 |
-
/* Change opacity of overlay here */
|
607 |
-
#qtip-overlay div{
|
608 |
-
position: absolute;
|
609 |
-
left: 0; top: 0;
|
610 |
-
width: 100%; height: 100%;
|
611 |
-
|
612 |
-
background-color: black;
|
613 |
-
|
614 |
-
opacity: 0.7;
|
615 |
-
filter:alpha(opacity=70);
|
616 |
-
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
|
617 |
-
}
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
.qtipmodal-ie6fix{
|
622 |
-
position: absolute !important;
|
623 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/css/vendor/qtip/jquery.qtip.min.css
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
/* qTip2 v2.2.0 basic css3 | qtip2.com | Licensed MIT, GPL | Sun Dec 15 2013 23:29:06 */
|
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:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:medium none;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .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:transparent none no-repeat -100em -100em}.qtip-focus{}.qtip-hover{}.qtip-default{border-width:1px;border-style:solid;border-color:#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{border-color:#D95252}.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-rounded,.qtip-tipsy,.qtip-bootstrap{-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-width:0;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:#4A4A4A;background-color:rgba(0,0,0,0)}.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{background-color:transparent;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-titlebar,.qtip-jtools .qtip-content{background:transparent;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:transparent}.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}
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/js/redux.min.js
DELETED
@@ -1,3 +0,0 @@
|
|
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")}b.find(".saved_notice:visible").length>0||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?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}}),"undefined"==typeof jQuery.qtip&&!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=G,this.elements={target:a},this._id=T+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:F,attr:e,onTooltip:F,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=F}function f(a){return a===G||"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)?F:(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)?F:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==F,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,G,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||F)&&(b.title=F))),"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===E?{ready:E}:{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(S,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 W.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):void a.call(this)}function n(a){return this.tooltip.hasClass(bb)?F:(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),void(this.timers.show=m.call(this,function(){this.toggle(E,a)},this.options.show.delay)))}function o(a){if(this.tooltip.hasClass(bb))return F;var b=d(a.relatedTarget),c=b.closest(X)[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(F,a)},this.options.hide.delay,this)}function p(a){return this.tooltip.hasClass(bb)||!this.options.hide.inactive?F:(clearTimeout(this.timers.inactive),void(this.timers.inactive=m.call(this,function(){this.hide(a)},this.options.hide.inactive)))}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(ib+" "))+ib,function(){var a=z.api[d.attr(this,V)];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):G,p="html5"===f.metadata.type&&o?o[f.metadata.name]:G,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(E,{},z.defaults,f,"object"==typeof q?h(q):G,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===F||!j)return F;k.content.text=j}if(i.container.length||(i.container=m),i.target===F&&(i.target=n),k.show.target===F&&(k.show.target=n),k.show.solo===E&&(k.show.solo=i.container.closest("body")),k.hide.target===F&&(k.hide.target=n),k.position.viewport===E&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new B(i.at,E),i.my=new B(i.my),a.data(T))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===F)return F;return a.attr(U,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(db,l).attr("title",""),g=new e(a,k,c,!!j),a.data(T,g),a.one("remove.qtip-"+c+" removeqtip.qtip-"+c,function(){var a;(a=d(this).data(T))&&a.destroy(!0)}),g}function t(a){return a.charAt(0).toUpperCase()+a.slice(1)}function u(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+tb.join(f+" ")+f).split(" "),h=0;if(sb[b])return a.css(sb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return sb[b]=d,e}function v(a,b){return Math.ceil(parseFloat(u(a,b)))}function w(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function x(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function y(a){this._ns="ie6",this.init(this.qtip=a)}var z,A,B,C,D,E=!0,F=!1,G=null,H="x",I="y",J="width",K="height",L="top",M="left",N="bottom",O="right",P="center",Q="flipinvert",R="shift",S={},T="qtip",U="data-hasqtip",V="data-qtip-id",W=["ui-widget","ui-tooltip"],X="."+T,Y="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Z=T+"-fixed",$=T+"-default",_=T+"-focus",ab=T+"-hover",bb=T+"-disabled",cb="_replacedByqTip",db="oldtitle",eb={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("_",""))||F};A=e.prototype,A._when=function(a){return d.when.apply(d,a)},A.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":[T,$,e.style.classes,T+"-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":F,"aria-describedby":this._id+"-content","aria-hidden":E}).toggleClass(bb,this.disabled).attr(V,this.id).data(T,this).appendTo(k.container).append(g.content=d("<div />",{"class":T+"-content",id:this._id+"-content","aria-atomic":E})),this.rendered=-1,this.positioning=E,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,F))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,F)),this.rendered=E,this._setWidget(),d.each(S,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=F,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(E,f.event,F),c.hiddenDuringWait=F}),z.api[this.id]=this,this},A.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=E;var a=this.target,b=a.attr(db);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(T).removeAttr(V).removeAttr(U).removeAttr("aria-describedby"),this.options.suppress&&b&&a.attr("title",b).removeAttr(db),this._unbind(a),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=G,delete z.api[this.id]}}return this.destroyed?this.target:(a===E&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},C=A.checks={builtin:{"^id$":function(a,b,c,e){var f=c===E?z.nextid:c,g=T+"-"+f;f!==F&&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&&(a[b]=new B(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(E)||this.toggle(E))},"^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($,!!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()}}}},A.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 fb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,gb=/^prerender|show\.ready/i;A.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=F,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&&gb.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=fb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=E,d.each(a,d.proxy(j,this)),this.positioning=F,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?G:this.cache.event),this},A._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=E,a.then(function(a){return e.waiting=F,c._update(a,b)},G,function(a){return c._update(a,b)})):a===F||!a&&""!==a?F:(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)}))):F},A._waitForContent=function(a){var b=this.cache;return b.waiting=E,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=F}).promise()},A._updateContent=function(a,b){this._update(a,this.elements.content,b)},A._updateTitle=function(a,b){this._update(a,this.elements.title,b)===F&&this._removeTitle(F)},A._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":T+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":T+"-title","aria-atomic":E})).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()},A._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=G,a!==F&&this.reposition())},A.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=E;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(F),s=i.outerHeight(F),t=0,u=0,v=i.css("position"),w={left:0,top:0},x=i[0].offsetWidth>0,y=c&&"scroll"===c.type,z=d(a),A=o[0].ownerDocument,B=this.mouse;if(d.isArray(k)&&2===k.length)m={x:M,y:L},w={left:k[0],top:k[1]};else if("mouse"===k)m={x:M,y:L},!B||!B.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=B,"static"!==v&&(w=o.offset()),A.body.offsetWidth!==(a.innerWidth||A.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&&y&&B&&(w.left-=(B.scrollX||0)-z.scrollLeft(),w.top-=(B.scrollY||0)-z.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=eb.iOS?a.innerWidth:k.width(),u=eb.iOS?a.innerHeight:k.height(),k[0]===a&&(w={top:(n||k).scrollTop(),left:(n||k).scrollLeft()})):S.imagemap&&k.is("area")?f=S.imagemap(this,k,m,S.viewport?q:F):S.svg&&k&&k[0].ownerSVGElement?f=S.svg(this,k,m,S.viewport?q:F):(t=k.outerWidth(F),u=k.outerHeight(F),w=k.offset()),f&&(t=f.width,u=f.height,g=f.offset,w=f.position),w=this.reposition.offset(k,w,o),(eb.iOS>3.1&&eb.iOS<4.1||eb.iOS>=4.3&&eb.iOS<4.33||!eb.iOS&&"fixed"===v)&&(w.left-=z.scrollLeft(),w.top-=z.scrollTop()),(!f||f&&f.adjustable!==F)&&(w.left+=m.x===O?t:m.x===P?t/2:0,w.top+=m.y===N?u:m.y===P?u/2:0)}return w.left+=p.x+(l.x===O?-r:l.x===P?-r/2:0),w.top+=p.y+(l.y===N?-s:l.y===P?-s/2:0),S.viewport?(w.adjusted=S.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===F||!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:""}),eb.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=F,this):this},A.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=!!eb.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 hb=(B=A.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,P).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?I:H}).prototype;hb.invert=function(a,b){this[a]=this[a]===M?O:this[a]===O?M:b||this[a]},hb.string=function(){var a=this.x,b=this.y;return a===b?a:this.precedance===I||this.forceY&&"center"!==b?b+" "+a:a+" "+b},hb.abbrev=function(){var a=this.string().split(" ");return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},hb.clone=function(){return new B(this.string(),this.forceY)},A.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=E),!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?G:!!this._trigger(k,[90]),this.destroyed?this:(i!==F&&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,F),d.isFunction(o.title)&&this._updateTitle(o.title,F),!D&&"mouse"===n.target&&n.adjust.mouse&&(d(b).bind("mousemove."+T,this._storeMouse),D=E),p||g.css("width",g.outerWidth(F)),this.reposition(c,arguments[2]),p||g.css("width",""),m.solo&&("string"==typeof m.solo?d(m.solo):d(X,m.solo)).not(g).not(m.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,D&&!d(X+'[tracking="true"]:visible',m.solo).not(g).length&&(d(b).unbind("mousemove."+T),D=F),this.blur(c)),j=d.proxy(function(){a?(eb.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===F||r===F?(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))},A.show=function(a){return this.toggle(E,a)},A.hide=function(a){return this.toggle(F,a)},A.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(X),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=z.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},A.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(_),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},A.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(bb):this.disabled):"boolean"!=typeof a&&(a=E),this.rendered&&this.tooltip.toggleClass(bb,a).attr("aria-disabled",a),this.disabled=!!a,this)},A.enable=function(){return this.disable(F)},A._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?"":T+"-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(bb)||a.hide(b),F})},A._updateButton=function(a){if(!this.rendered)return F;var b=this.elements.button;a?this._createButton():b.remove()},A._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(bb);c.removeClass(bb),bb=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(bb,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass($,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(T+"-icon",!a)},A._storeMouse=function(a){(this.mouse=l(a)).type="mousemove"},A._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))},A._unbind=function(a,b){d(a).unbind("."+this._id+(b?"-"+b:""))};var ib="."+T;d(function(){r(X,["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(Z)&&!c.hasClass(bb)&&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(ab,b)}),r("["+V+"]",Y,p)}),A._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||G,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=F,!e.isDefaultPrevented()},A._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?void h.push(a.splice(c,1)[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)},A._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?F:(this.cache.event=l(a),this.cache.target=a?d(a.target):[c],clearTimeout(this.timers.show),void(this.timers.show=m.call(this,function(){this.render("object"==typeof a||e.show.ready)},e.show.delay)))}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=E}),this._bindEvents(h,i,f,g,b,function(){clearTimeout(this.timers.show)}),(e.show.ready||e.prerender)&&b.call(this,a)},A._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(Z)):/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(bb)&&this.tooltip[0].offsetWidth>0,e=b.parents(X).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),z.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(bb)&&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)},A._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})))},z=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=G,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],T):G;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,T);if(!a)return E;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),F;a.set(b,e)}}),g!==G?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(E,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===F||c.length<1||z.api[c]?z.nextid++:c,b=s(d(this),c,k),b===F?E:(z.api[c]=b,d.each(S,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,z.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,db):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(db,b))}return d.fn["attr"+cb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+cb].apply(this,arguments));return a||b.filter("["+db+"]").attr("title",function(){return d.attr(this,db)}).removeAttr(db),b}},function(a,b){if(!b||d.fn[a+cb])return E;var c=d.fn[a+cb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+cb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(U))try{b.triggerHandler("removeqtip")
|
2 |
-
}catch(e){}d["cleanData"+cb].apply(this,arguments)}),z.version="2.2.0",z.nextid=0,z.inactiveEvents=Y,z.zindex=15e3,z.defaults={prerender:F,id:F,overwrite:E,suppress:E,content:{text:E,attr:"title",title:F,button:F},position:{my:"top left",at:"bottom right",target:F,container:F,viewport:F,adjust:{x:0,y:0,mouse:E,scroll:E,resize:E,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:F})}},show:{target:F,event:"mouseenter",effect:E,delay:90,solo:F,ready:F,autofocus:F},hide:{target:F,event:"mouseleave",effect:E,delay:0,fixed:F,inactive:F,leave:"window",distance:F},style:{classes:"",widget:F,width:F,height:F,def:E},events:{render:G,move:G,show:G,hide:G,toggle:G,visible:G,hidden:G,focus:G,blur:G}};var jb,kb="margin",lb="border",mb="color",nb="background-color",ob="transparent",pb=" !important",qb=!!b.createElement("canvas").getContext,rb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,sb={},tb=["Webkit","O","Moz","ms"];if(qb)var ub=a.devicePixelRatio||1,vb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),wb=ub/vb;else var xb=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(w.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":T+"-tip"}).prependTo(a.tooltip),qb?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=xb("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===L||a.y===P&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(E))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===F||b===F?a=F:a===E?a=new B(b.string()):a.string||(a=new B(a),a.fixed=E),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=lb+t(b)+"Width";return(c?v(c,e):v(d.content,e)||v(this._useTitle(a)&&d.titlebar||d.content,e)||v(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=lb+t(a.y)+t(a.x)+"Radius";return eb.ie<9?0:v(this._useTitle(a)&&b.titlebar||b.content,c)||v(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||rb.test(d)?F:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=lb+t(a[a.precedance])+t(mb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,nb)||g(f,nb)||g(b.content,nb)||g(b.tooltip,nb)||c.css(nb),h[1]=g(c,e,mb)||g(f,e,mb)||g(b.content,e,mb)||g(b.tooltip,e,mb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",nb+":"+ob+pb+";"+lb+":0"+pb+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===I,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=(qb||eb.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===F?r=b:(r=new B(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===H?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==ob?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!rb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==E?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===I?[s(r.x===M?l:r.x===O?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===L?k[1]-q[1]:0)]:[s(r.x===M?k[0]-q[0]:0),s(r.y===L?l:r.y===N?k[1]-q[1]-l:(k[1]-q[1])/2)],qb?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,wb),i=this._calculateTip(r,this.size,wb),o.attr(J,k[0]*wb).attr(K,k[1]*wb),o.css(J,k[0]).css(K,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*wb,j[1]*wb),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===eb.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(P)>-1),left:j[0]-j[2]*Number(f===H),top:j[1]-j[2]*Number(f===I),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(xb("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!==F&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return F;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===H&&e.reverse(),d.each(e,function(d,e){var h,k,l;e===P?(h=c===I?M:L,j[h]="50%",j[kb+"-"+h]=-Math.round(b[c===I?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===H?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===R&&j.precedance===b&&k[d]&&j[c]!==P?j.precedance=j.precedance===H?I:H:a!==R&&k[d]&&(j[b]=j[b]===P?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===P?p[kb+"-"+b]=o[a]=g[kb+"-"+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]=F),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:F,top:F,x:0,y:0},p={};this.corner.fixed!==E&&(e(m,H,I,M,O),e(n,I,H,L,N),j.string()===i.corner.string()||i.cornerTop===k.top&&i.cornerLeft===k.left||this.update(j,F)),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===R&&!!k.left)&&f(H,M,O),(o.top=n===R&&!!k.top)&&f(I,L,N),this.element.css(p).toggle(!(o.x&&o.y||j.x===P&&o.y||j.y===P&&o.x)),d.left-=g.left.charAt?g.user:m!==R||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==R||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()}}),jb=S.tip=function(a){return new w(a,a.options.style.tip)},jb.initialize="render",jb.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=E)}},C.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(E,z.defaults,{style:{tip:{corner:E,mimic:F,width:6,height:6,border:E,offset:0}}});var yb,zb,Ab="qtip-modal",Bb="."+Ab;zb=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(X);b=j.length<1?F:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(X)[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 F}}).hide(),d(b.body).bind("focusin"+Bb,e),d(b).bind("keydown"+Bb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+Bb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==F?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(Bb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==F&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==F||!e&&p.length?j:(i.stop(E,F),d.isFunction(m)?m.call(i,e):m===F?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(Bb).length||i.detach(),a()}),h=e,f.destroyed&&(f=G),j)}}),j.init()},zb=new zb,d.extend(x.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=zb.elem,b.addClass(Ab).css("z-index",z.modal_zindex+d(Bb).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(zb.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(Bb),f=z.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);zb.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,zb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(Bb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void zb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(Ab),this.qtip._unbind(this.qtip.tooltip,this._ns),zb.toggle(this.qtip,F),delete this.qtip.elements.overlay}}),yb=S.modal=function(a){return new x(a,a.options.show.modal)},yb.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=E))},z.modal_zindex=z.zindex-200,yb.initialize="render",C.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(E,z.defaults,{show:{modal:{on:F,effect:E,blur:E,stealfocus:E,escape:E}}}),S.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],m=v[a],t=w[a],u=c===R,x=m===f?j:m===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=r[f]+s[f]-(o?0:n[f]),A=z-k,B=k+j-(h===J?p:q)-z,C=x-(v.precedance===a||m===v[b]?y:0)-(t===P?i/2:0);return u?(C=(m===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-n[f]+s[f],k-C,Math.min(Math.max(-n[f]+s[f]+(h===J?p:q),k+C),d[f],"center"===m?k-x:1e9))):(e*=c===Q?2:0,A>0&&(m!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(m!==g||A>0)&&(d[f]-=(m===P?-C:C)+e,l.invert(a,g)),d[f]<r&&-d[f]>B&&(d[f]=k,l=v.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s,t=e.target,u=c.elements.tooltip,v=e.my,w=e.at,x=e.adjust,y=x.method.split(" "),z=y[0],A=y[1]||y[0],B=e.viewport,C=e.container,D=c.cache,E={left:0,top:0};return B.jquery&&t[0]!==a&&t[0]!==b.body&&"none"!==x.method?(n=C.offset()||E,o="static"===C.css("position"),k="fixed"===u.css("position"),p=B[0]===a?B.width():B.outerWidth(F),q=B[0]===a?B.height():B.outerHeight(F),r={left:k?0:B.scrollLeft(),top:k?0:B.scrollTop()},s=B.offset()||E,("shift"!==z||"shift"!==A)&&(l=v.clone()),E={left:"none"!==z?j(H,I,z,x.x,M,O,J,f,h):0,top:"none"!==A?j(I,H,A,x.y,L,N,K,g,i):0},l&&D.lastClass!==(m=T+"-pos-"+l.abbrev())&&u.removeClass(c.cache.lastClass).addClass(c.cache.lastClass=m),E):E},S.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:F},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===M?i=d:b.x===O?i=f.width-d:i+=Math.floor(d/2),b.y===L?j=e:b.y===N?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===M&&k>=i||b.x===O&&i>=k||b.x===P&&(i>k||k>f.width-i)||b.y===L&&l>=j||b.y===N&&j>=l||b.y===P&&(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=S.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:F}},circle:function(a,b,c,d){return S.polys.ellipse(a,b,c,c,d)}},S.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o,p,q=d(b),r=c[0],s=d(r.ownerSVGElement),t=1,u=1,v=!0;!r.getBBox;)r=r.parentNode;if(!r.getBBox||!r.parentNode)return F;f=s.attr("width")||s.width()||parseInt(s.css("width"),10),g=s.attr("height")||s.height()||parseInt(s.css("height"),10);var w=(parseInt(c.css("stroke-width"),10)||0)/2;switch(w&&(t+=w/f,u+=w/g),r.nodeName){case"ellipse":case"circle":o=S.polys.ellipse(r.cx.baseVal.value,r.cy.baseVal.value,(r.rx||r.r).baseVal.value+w,(r.ry||r.r).baseVal.value+w,e);break;case"line":case"polygon":case"polyline":for(n=r.points||[{x:r.x1.baseVal.value,y:r.y1.baseVal.value},{x:r.x2.baseVal.value,y:r.y2.baseVal.value}],o=[],m=-1,k=n.numberOfItems||n.length;++m<k;)l=n.getItem?n.getItem(m):n[m],o.push.apply(o,[l.x,l.y]);o=S.polys.polygon(o,e);break;default:o=r.getBoundingClientRect(),o={width:o.width,height:o.height,position:{left:o.left,top:o.top}},v=!1}return p=o.position,s=s[0],v&&(s.createSVGPoint&&(h=r.getScreenCTM(),n=s.createSVGPoint(),n.x=p.left,n.y=p.top,i=n.matrixTransform(h),p.left=i.x,p.top=i.y),s.viewBox&&(j=s.viewBox.baseVal)&&j.width&&j.height&&(t*=f/j.width,u*=g/j.height)),p.left+=q.scrollLeft(),p.top+=q.scrollTop(),o},S.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=b.attr("shape").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 F;if("polygon"===j)h=S.polys.polygon(m,c);else{if(!S.polys[j])return F;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=S.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(F)-k.width())/2),e.top+=Math.ceil((k.outerHeight(F)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Cb,Db='<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(y.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(Db).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:T+"-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(F),width:c.outerWidth(F)},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?[J,M]:[K,L],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(K,f.height),f.width?e.css(J,f.width):(e.css(J,"").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(J,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)}}),Cb=S.ie6=function(a){return 6===eb.ie?new y(a):F},Cb.initialize="render",C.ie6={"^content|style$":function(){this.redraw()}}})}(window,document),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),a.alphanum_caret(e.length==f.length+1?g-1: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){if(0==a.length)return!1;var b=a.indexOf(J);if(b>=0)return!1;var c=a.indexOf(I);if(0>c)return!0;var d=a.lastIndexOf(I),e=a.length-d-1;if(3>e)return!1;var f=m(a.substring(c));return f%3>0?!1:!0}function B(a){this.map="string"==typeof a?C(a):{}}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:0/0},E={allowPlus:!1,allowMinus:!0,allowThouSep:!0,allowDecSep:!0,allowLeadingSpaces:!1,maxDigits:0/0,maxDecimalPlaces:0/0,maxPreDecimalPlaces:0/0,max:0/0,min:0/0},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){var c=a.Range.current(b).clone(),d=a.Range(b).select(b);return c.overlaps(d)?(c.compare("START_TO_START",d)<1?(startPos=0,c.move("START_TO_START",d)):(fromElementToCurrent=d.clone(),fromElementToCurrent.move("END_TO_START",c),startPos=fromElementToCurrent.toString().length),endPos=c.compare("END_TO_END",d)>=0?d.toString().length:startPos+c.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.devFunctions()}),a.redux.ajax_save=function(b){var c=a(document.getElementById("redux_ajax_overlay"));c.fadeIn(),jQuery(".redux-action_bar .spinner").show(),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){var b=tinyMCE.get(a);b&&b.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(){},console.log(redux.ajax.console),console.log(a.responseText),jQuery(".redux-action_bar input").removeAttr("disabled"),c.fadeOut("fast"),jQuery(".redux-action_bar .spinner").fadeOut("fast"),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").fadeOut("fast"),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").fadeOut("fast"),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;
|
3 |
-
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(){var b=a(this).parent().parent();a(b).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(){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;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).show(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(){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")}});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(),a(this).hasClass("redux_remove_th")){var c=a(this).parents("tr:first"),d=c.find("th:first");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.devFunctions=function(){a("#consolePrintObject").on("click",function(b){b.preventDefault(),console.log(a.parseJSON(a("#redux-object-json").html()))}),"function"==typeof jsonView&&jsonView("#redux-object-json","#redux-object-browser")},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"),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){var c=a(this),d=!1,e=a("#"+redux.args.opt_name+"-"+b),g=e.parents("tr:first");if(f||(d=a.redux.check_parents_dependencies(b)),d===!0){if(e.hasClass("redux-container-section")){var h=a("#section-"+b);h.hasClass("redux-section-indent-start")&&h.hasClass("hide")&&(a("#section-table-"+b).fadeIn(300).removeClass("hide"),h.fadeIn(300).removeClass("hide"))}if(e.hasClass("redux-container-info")&&a("#info-"+b).fadeIn(300).removeClass("hide"),e.hasClass("redux-container-divide")&&a("#divide-"+b).fadeIn(300).removeClass("hide"),e.hasClass("redux-container-raw")){var i=e.parents().find("table#"+redux.args.opt_name+"-"+b);i.fadeIn(300).removeClass("hide")}g.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()}),(e.hasClass("redux-container-section")||e.hasClass("redux-container-info"))&&g.css({display:"none"})}else d===!1&&g.fadeOut(100,function(){a(this).addClass("hide"),redux.required.hasOwnProperty(b)&&a.redux.required_recursive_hide(b)});c.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=!1,e=c.checkValue,f=c.operation;switch(f){case"=":case"equals":a.isArray(b)?a(b[0]).each(function(b,c){if(a.isArray(e))a(e).each(function(a,b){return c==b?(d=!0,!0):void 0});else if(c==e)return d=!0,!0}):a.isArray(e)?a(e).each(function(a,c){b==c&&(d=!0)}):b==e&&(d=!0);break;case"!=":case"not":a.isArray(b)?a(b[0]).each(function(b,c){if(a.isArray(e))a(e).each(function(a,b){return c!=b?(d=!0,!0):void 0});else if(c!=e)return d=!0,!0}):a.isArray(e)?a(e).each(function(a,c){b!=c&&(d=!0)}):b!=e&&(d=!0);break;case">":case"greater":case"is_larger":parseFloat(b)>parseFloat(e)&&(d=!0);break;case">=":case"greater_equal":case"is_larger_equal":parseFloat(b)>=parseFloat(e)&&(d=!0);break;case"<":case"less":case"is_smaller":parseFloat(b)<parseFloat(e)&&(d=!0);break;case"<=":case"less_equal":case"is_smaller_equal":parseFloat(b)<=parseFloat(e)&&(d=!0);break;case"contains":a.isArray(e)?a(e).each(function(a,c){-1!==b.toString().indexOf(c)&&(d=!0)}):-1!==b.toString().indexOf(e)&&(d=!0);break;case"doesnt_contain":case"not_contain":a.isArray(e)?a(e).each(function(a,c){-1===b.toString().indexOf(c)&&(d=!0)}):-1===b.toString().indexOf(e)&&(d=!0);break;case"is_empty_or":(""===b||b==e)&&(d=!0);break;case"not_empty_and":""!==b&&b!=e&&(d=!0);break;case"is_empty":case"empty":case"!isset":b&&""!==b&&null!==b||(d=!0);break;case"not_empty":case"!empty":case"isset":b&&""!==b&&null!==b&&(d=!0)}return d},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=a("#redux-header"),c=b.find(".rAds"),d=b.height(),e=b.width()-b.find(".display_header").width()-30;a(c).find("video").each(function(){a.redux.scaleToRatio(a(this),d,e)}),a(c).find("img").each(function(){a.redux.scaleToRatio(a(this),d,e)}),a(c).find("div").each(function(){a.redux.scaleToRatio(a(this),d,e)}),"-99999px"==c.css("left")&&c.css("display","none").css("left","auto"),c.fadeIn("slow")},a(document).ready(function(){redux.rAds&&setTimeout(function(){a("#redux-header").append('<div class="rAds"></div>');var b=a("#redux-header");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};
|
|
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/js/vendor.min.js
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
!function(a){"function"==typeof define&&define.amd?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}}),"undefined"==typeof jQuery.qtip&&!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=G,this.elements={target:a},this._id=T+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:F,attr:e,onTooltip:F,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=F}function f(a){return a===G||"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)?F:(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)?F:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==F,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,G,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||F)&&(b.title=F))),"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===E?{ready:E}:{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(S,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 W.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):void a.call(this)}function n(a){return this.tooltip.hasClass(bb)?F:(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),void(this.timers.show=m.call(this,function(){this.toggle(E,a)},this.options.show.delay)))}function o(a){if(this.tooltip.hasClass(bb))return F;var b=d(a.relatedTarget),c=b.closest(X)[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(F,a)},this.options.hide.delay,this)}function p(a){return this.tooltip.hasClass(bb)||!this.options.hide.inactive?F:(clearTimeout(this.timers.inactive),void(this.timers.inactive=m.call(this,function(){this.hide(a)},this.options.hide.inactive)))}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(ib+" "))+ib,function(){var a=z.api[d.attr(this,V)];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):G,p="html5"===f.metadata.type&&o?o[f.metadata.name]:G,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(E,{},z.defaults,f,"object"==typeof q?h(q):G,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===F||!j)return F;k.content.text=j}if(i.container.length||(i.container=m),i.target===F&&(i.target=n),k.show.target===F&&(k.show.target=n),k.show.solo===E&&(k.show.solo=i.container.closest("body")),k.hide.target===F&&(k.hide.target=n),k.position.viewport===E&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new B(i.at,E),i.my=new B(i.my),a.data(T))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===F)return F;return a.attr(U,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(db,l).attr("title",""),g=new e(a,k,c,!!j),a.data(T,g),a.one("remove.qtip-"+c+" removeqtip.qtip-"+c,function(){var a;(a=d(this).data(T))&&a.destroy(!0)}),g}function t(a){return a.charAt(0).toUpperCase()+a.slice(1)}function u(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+tb.join(f+" ")+f).split(" "),h=0;if(sb[b])return a.css(sb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return sb[b]=d,e}function v(a,b){return Math.ceil(parseFloat(u(a,b)))}function w(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function x(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function y(a){this._ns="ie6",this.init(this.qtip=a)}var z,A,B,C,D,E=!0,F=!1,G=null,H="x",I="y",J="width",K="height",L="top",M="left",N="bottom",O="right",P="center",Q="flipinvert",R="shift",S={},T="qtip",U="data-hasqtip",V="data-qtip-id",W=["ui-widget","ui-tooltip"],X="."+T,Y="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Z=T+"-fixed",$=T+"-default",_=T+"-focus",ab=T+"-hover",bb=T+"-disabled",cb="_replacedByqTip",db="oldtitle",eb={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("_",""))||F};A=e.prototype,A._when=function(a){return d.when.apply(d,a)},A.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":[T,$,e.style.classes,T+"-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":F,"aria-describedby":this._id+"-content","aria-hidden":E}).toggleClass(bb,this.disabled).attr(V,this.id).data(T,this).appendTo(k.container).append(g.content=d("<div />",{"class":T+"-content",id:this._id+"-content","aria-atomic":E})),this.rendered=-1,this.positioning=E,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,F))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,F)),this.rendered=E,this._setWidget(),d.each(S,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=F,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(E,f.event,F),c.hiddenDuringWait=F}),z.api[this.id]=this,this},A.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=E;var a=this.target,b=a.attr(db);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(T).removeAttr(V).removeAttr(U).removeAttr("aria-describedby"),this.options.suppress&&b&&a.attr("title",b).removeAttr(db),this._unbind(a),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=G,delete z.api[this.id]}}return this.destroyed?this.target:(a===E&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},C=A.checks={builtin:{"^id$":function(a,b,c,e){var f=c===E?z.nextid:c,g=T+"-"+f;f!==F&&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&&(a[b]=new B(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(E)||this.toggle(E))},"^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($,!!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()}}}},A.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 fb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,gb=/^prerender|show\.ready/i;A.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=F,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&&gb.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=fb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=E,d.each(a,d.proxy(j,this)),this.positioning=F,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?G:this.cache.event),this},A._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=E,a.then(function(a){return e.waiting=F,c._update(a,b)},G,function(a){return c._update(a,b)})):a===F||!a&&""!==a?F:(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)}))):F},A._waitForContent=function(a){var b=this.cache;return b.waiting=E,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=F}).promise()},A._updateContent=function(a,b){this._update(a,this.elements.content,b)},A._updateTitle=function(a,b){this._update(a,this.elements.title,b)===F&&this._removeTitle(F)},A._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":T+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":T+"-title","aria-atomic":E})).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()},A._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=G,a!==F&&this.reposition())},A.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=E;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(F),s=i.outerHeight(F),t=0,u=0,v=i.css("position"),w={left:0,top:0},x=i[0].offsetWidth>0,y=c&&"scroll"===c.type,z=d(a),A=o[0].ownerDocument,B=this.mouse;if(d.isArray(k)&&2===k.length)m={x:M,y:L},w={left:k[0],top:k[1]};else if("mouse"===k)m={x:M,y:L},!B||!B.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=B,"static"!==v&&(w=o.offset()),A.body.offsetWidth!==(a.innerWidth||A.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&&y&&B&&(w.left-=(B.scrollX||0)-z.scrollLeft(),w.top-=(B.scrollY||0)-z.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=eb.iOS?a.innerWidth:k.width(),u=eb.iOS?a.innerHeight:k.height(),k[0]===a&&(w={top:(n||k).scrollTop(),left:(n||k).scrollLeft()})):S.imagemap&&k.is("area")?f=S.imagemap(this,k,m,S.viewport?q:F):S.svg&&k&&k[0].ownerSVGElement?f=S.svg(this,k,m,S.viewport?q:F):(t=k.outerWidth(F),u=k.outerHeight(F),w=k.offset()),f&&(t=f.width,u=f.height,g=f.offset,w=f.position),w=this.reposition.offset(k,w,o),(eb.iOS>3.1&&eb.iOS<4.1||eb.iOS>=4.3&&eb.iOS<4.33||!eb.iOS&&"fixed"===v)&&(w.left-=z.scrollLeft(),w.top-=z.scrollTop()),(!f||f&&f.adjustable!==F)&&(w.left+=m.x===O?t:m.x===P?t/2:0,w.top+=m.y===N?u:m.y===P?u/2:0)}return w.left+=p.x+(l.x===O?-r:l.x===P?-r/2:0),w.top+=p.y+(l.y===N?-s:l.y===P?-s/2:0),S.viewport?(w.adjusted=S.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===F||!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:""}),eb.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=F,this):this},A.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=!!eb.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 hb=(B=A.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,P).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?I:H}).prototype;hb.invert=function(a,b){this[a]=this[a]===M?O:this[a]===O?M:b||this[a]},hb.string=function(){var a=this.x,b=this.y;return a===b?a:this.precedance===I||this.forceY&&"center"!==b?b+" "+a:a+" "+b},hb.abbrev=function(){var a=this.string().split(" ");return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},hb.clone=function(){return new B(this.string(),this.forceY)},A.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=E),!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?G:!!this._trigger(k,[90]),this.destroyed?this:(i!==F&&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,F),d.isFunction(o.title)&&this._updateTitle(o.title,F),!D&&"mouse"===n.target&&n.adjust.mouse&&(d(b).bind("mousemove."+T,this._storeMouse),D=E),p||g.css("width",g.outerWidth(F)),this.reposition(c,arguments[2]),p||g.css("width",""),m.solo&&("string"==typeof m.solo?d(m.solo):d(X,m.solo)).not(g).not(m.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,D&&!d(X+'[tracking="true"]:visible',m.solo).not(g).length&&(d(b).unbind("mousemove."+T),D=F),this.blur(c)),j=d.proxy(function(){a?(eb.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===F||r===F?(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))},A.show=function(a){return this.toggle(E,a)},A.hide=function(a){return this.toggle(F,a)},A.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(X),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=z.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},A.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(_),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},A.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(bb):this.disabled):"boolean"!=typeof a&&(a=E),this.rendered&&this.tooltip.toggleClass(bb,a).attr("aria-disabled",a),this.disabled=!!a,this)},A.enable=function(){return this.disable(F)},A._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?"":T+"-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(bb)||a.hide(b),F})},A._updateButton=function(a){if(!this.rendered)return F;var b=this.elements.button;a?this._createButton():b.remove()},A._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(bb);c.removeClass(bb),bb=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(bb,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass($,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(T+"-icon",!a)},A._storeMouse=function(a){(this.mouse=l(a)).type="mousemove"},A._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))},A._unbind=function(a,b){d(a).unbind("."+this._id+(b?"-"+b:""))};var ib="."+T;d(function(){r(X,["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(Z)&&!c.hasClass(bb)&&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(ab,b)}),r("["+V+"]",Y,p)}),A._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||G,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=F,!e.isDefaultPrevented()},A._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?void h.push(a.splice(c,1)[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)},A._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?F:(this.cache.event=l(a),this.cache.target=a?d(a.target):[c],clearTimeout(this.timers.show),void(this.timers.show=m.call(this,function(){this.render("object"==typeof a||e.show.ready)},e.show.delay)))}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=E}),this._bindEvents(h,i,f,g,b,function(){clearTimeout(this.timers.show)}),(e.show.ready||e.prerender)&&b.call(this,a)},A._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(Z)):/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(bb)&&this.tooltip[0].offsetWidth>0,e=b.parents(X).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),z.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(bb)&&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)},A._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})))},z=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=G,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],T):G;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,T);if(!a)return E;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),F;a.set(b,e)}}),g!==G?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(E,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===F||c.length<1||z.api[c]?z.nextid++:c,b=s(d(this),c,k),b===F?E:(z.api[c]=b,d.each(S,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,z.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,db):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(db,b))}return d.fn["attr"+cb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+cb].apply(this,arguments));return a||b.filter("["+db+"]").attr("title",function(){return d.attr(this,db)}).removeAttr(db),b}},function(a,b){if(!b||d.fn[a+cb])return E;var c=d.fn[a+cb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+cb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(U))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+cb].apply(this,arguments)}),z.version="2.2.0",z.nextid=0,z.inactiveEvents=Y,z.zindex=15e3,z.defaults={prerender:F,id:F,overwrite:E,suppress:E,content:{text:E,attr:"title",title:F,button:F},position:{my:"top left",at:"bottom right",target:F,container:F,viewport:F,adjust:{x:0,y:0,mouse:E,scroll:E,resize:E,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:F})}},show:{target:F,event:"mouseenter",effect:E,delay:90,solo:F,ready:F,autofocus:F},hide:{target:F,event:"mouseleave",effect:E,delay:0,fixed:F,inactive:F,leave:"window",distance:F},style:{classes:"",widget:F,width:F,height:F,def:E},events:{render:G,move:G,show:G,hide:G,toggle:G,visible:G,hidden:G,focus:G,blur:G}};var jb,kb="margin",lb="border",mb="color",nb="background-color",ob="transparent",pb=" !important",qb=!!b.createElement("canvas").getContext,rb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,sb={},tb=["Webkit","O","Moz","ms"];if(qb)var ub=a.devicePixelRatio||1,vb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),wb=ub/vb;else var xb=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(w.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":T+"-tip"}).prependTo(a.tooltip),qb?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=xb("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===L||a.y===P&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(E))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===F||b===F?a=F:a===E?a=new B(b.string()):a.string||(a=new B(a),a.fixed=E),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=lb+t(b)+"Width";return(c?v(c,e):v(d.content,e)||v(this._useTitle(a)&&d.titlebar||d.content,e)||v(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=lb+t(a.y)+t(a.x)+"Radius";return eb.ie<9?0:v(this._useTitle(a)&&b.titlebar||b.content,c)||v(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||rb.test(d)?F:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=lb+t(a[a.precedance])+t(mb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,nb)||g(f,nb)||g(b.content,nb)||g(b.tooltip,nb)||c.css(nb),h[1]=g(c,e,mb)||g(f,e,mb)||g(b.content,e,mb)||g(b.tooltip,e,mb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",nb+":"+ob+pb+";"+lb+":0"+pb+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===I,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=(qb||eb.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===F?r=b:(r=new B(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===H?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==ob?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!rb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==E?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===I?[s(r.x===M?l:r.x===O?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===L?k[1]-q[1]:0)]:[s(r.x===M?k[0]-q[0]:0),s(r.y===L?l:r.y===N?k[1]-q[1]-l:(k[1]-q[1])/2)],qb?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,wb),i=this._calculateTip(r,this.size,wb),o.attr(J,k[0]*wb).attr(K,k[1]*wb),o.css(J,k[0]).css(K,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*wb,j[1]*wb),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===eb.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(P)>-1),left:j[0]-j[2]*Number(f===H),top:j[1]-j[2]*Number(f===I),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);
|
2 |
-
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(xb("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!==F&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return F;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===H&&e.reverse(),d.each(e,function(d,e){var h,k,l;e===P?(h=c===I?M:L,j[h]="50%",j[kb+"-"+h]=-Math.round(b[c===I?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===H?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===R&&j.precedance===b&&k[d]&&j[c]!==P?j.precedance=j.precedance===H?I:H:a!==R&&k[d]&&(j[b]=j[b]===P?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===P?p[kb+"-"+b]=o[a]=g[kb+"-"+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]=F),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:F,top:F,x:0,y:0},p={};this.corner.fixed!==E&&(e(m,H,I,M,O),e(n,I,H,L,N),j.string()===i.corner.string()||i.cornerTop===k.top&&i.cornerLeft===k.left||this.update(j,F)),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===R&&!!k.left)&&f(H,M,O),(o.top=n===R&&!!k.top)&&f(I,L,N),this.element.css(p).toggle(!(o.x&&o.y||j.x===P&&o.y||j.y===P&&o.x)),d.left-=g.left.charAt?g.user:m!==R||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==R||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()}}),jb=S.tip=function(a){return new w(a,a.options.style.tip)},jb.initialize="render",jb.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=E)}},C.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(E,z.defaults,{style:{tip:{corner:E,mimic:F,width:6,height:6,border:E,offset:0}}});var yb,zb,Ab="qtip-modal",Bb="."+Ab;zb=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(X);b=j.length<1?F:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(X)[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 F}}).hide(),d(b.body).bind("focusin"+Bb,e),d(b).bind("keydown"+Bb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+Bb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==F?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(Bb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==F&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==F||!e&&p.length?j:(i.stop(E,F),d.isFunction(m)?m.call(i,e):m===F?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(Bb).length||i.detach(),a()}),h=e,f.destroyed&&(f=G),j)}}),j.init()},zb=new zb,d.extend(x.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=zb.elem,b.addClass(Ab).css("z-index",z.modal_zindex+d(Bb).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(zb.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(Bb),f=z.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);zb.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,zb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(Bb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void zb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(Ab),this.qtip._unbind(this.qtip.tooltip,this._ns),zb.toggle(this.qtip,F),delete this.qtip.elements.overlay}}),yb=S.modal=function(a){return new x(a,a.options.show.modal)},yb.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=E))},z.modal_zindex=z.zindex-200,yb.initialize="render",C.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(E,z.defaults,{show:{modal:{on:F,effect:E,blur:E,stealfocus:E,escape:E}}}),S.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],m=v[a],t=w[a],u=c===R,x=m===f?j:m===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=r[f]+s[f]-(o?0:n[f]),A=z-k,B=k+j-(h===J?p:q)-z,C=x-(v.precedance===a||m===v[b]?y:0)-(t===P?i/2:0);return u?(C=(m===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-n[f]+s[f],k-C,Math.min(Math.max(-n[f]+s[f]+(h===J?p:q),k+C),d[f],"center"===m?k-x:1e9))):(e*=c===Q?2:0,A>0&&(m!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(m!==g||A>0)&&(d[f]-=(m===P?-C:C)+e,l.invert(a,g)),d[f]<r&&-d[f]>B&&(d[f]=k,l=v.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s,t=e.target,u=c.elements.tooltip,v=e.my,w=e.at,x=e.adjust,y=x.method.split(" "),z=y[0],A=y[1]||y[0],B=e.viewport,C=e.container,D=c.cache,E={left:0,top:0};return B.jquery&&t[0]!==a&&t[0]!==b.body&&"none"!==x.method?(n=C.offset()||E,o="static"===C.css("position"),k="fixed"===u.css("position"),p=B[0]===a?B.width():B.outerWidth(F),q=B[0]===a?B.height():B.outerHeight(F),r={left:k?0:B.scrollLeft(),top:k?0:B.scrollTop()},s=B.offset()||E,("shift"!==z||"shift"!==A)&&(l=v.clone()),E={left:"none"!==z?j(H,I,z,x.x,M,O,J,f,h):0,top:"none"!==A?j(I,H,A,x.y,L,N,K,g,i):0},l&&D.lastClass!==(m=T+"-pos-"+l.abbrev())&&u.removeClass(c.cache.lastClass).addClass(c.cache.lastClass=m),E):E},S.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:F},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===M?i=d:b.x===O?i=f.width-d:i+=Math.floor(d/2),b.y===L?j=e:b.y===N?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===M&&k>=i||b.x===O&&i>=k||b.x===P&&(i>k||k>f.width-i)||b.y===L&&l>=j||b.y===N&&j>=l||b.y===P&&(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=S.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:F}},circle:function(a,b,c,d){return S.polys.ellipse(a,b,c,c,d)}},S.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o,p,q=d(b),r=c[0],s=d(r.ownerSVGElement),t=1,u=1,v=!0;!r.getBBox;)r=r.parentNode;if(!r.getBBox||!r.parentNode)return F;f=s.attr("width")||s.width()||parseInt(s.css("width"),10),g=s.attr("height")||s.height()||parseInt(s.css("height"),10);var w=(parseInt(c.css("stroke-width"),10)||0)/2;switch(w&&(t+=w/f,u+=w/g),r.nodeName){case"ellipse":case"circle":o=S.polys.ellipse(r.cx.baseVal.value,r.cy.baseVal.value,(r.rx||r.r).baseVal.value+w,(r.ry||r.r).baseVal.value+w,e);break;case"line":case"polygon":case"polyline":for(n=r.points||[{x:r.x1.baseVal.value,y:r.y1.baseVal.value},{x:r.x2.baseVal.value,y:r.y2.baseVal.value}],o=[],m=-1,k=n.numberOfItems||n.length;++m<k;)l=n.getItem?n.getItem(m):n[m],o.push.apply(o,[l.x,l.y]);o=S.polys.polygon(o,e);break;default:o=r.getBoundingClientRect(),o={width:o.width,height:o.height,position:{left:o.left,top:o.top}},v=!1}return p=o.position,s=s[0],v&&(s.createSVGPoint&&(h=r.getScreenCTM(),n=s.createSVGPoint(),n.x=p.left,n.y=p.top,i=n.matrixTransform(h),p.left=i.x,p.top=i.y),s.viewBox&&(j=s.viewBox.baseVal)&&j.width&&j.height&&(t*=f/j.width,u*=g/j.height)),p.left+=q.scrollLeft(),p.top+=q.scrollTop(),o},S.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=b.attr("shape").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 F;if("polygon"===j)h=S.polys.polygon(m,c);else{if(!S.polys[j])return F;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=S.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(F)-k.width())/2),e.top+=Math.ceil((k.outerHeight(F)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Cb,Db='<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(y.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(Db).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:T+"-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(F),width:c.outerWidth(F)},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?[J,M]:[K,L],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(K,f.height),f.width?e.css(J,f.width):(e.css(J,"").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(J,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)}}),Cb=S.ie6=function(a){return 6===eb.ie?new y(a):F},Cb.initialize="render",C.ie6={"^content|style$":function(){this.redraw()}}})}(window,document),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){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){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),a.alphanum_caret(e.length==f.length+1?g-1: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){if(0==a.length)return!1;var b=a.indexOf(J);if(b>=0)return!1;var c=a.indexOf(I);if(0>c)return!0;var d=a.lastIndexOf(I),e=a.length-d-1;if(3>e)return!1;var f=m(a.substring(c));return f%3>0?!1:!0}function B(a){this.map="string"==typeof a?C(a):{}}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:0/0},E={allowPlus:!1,allowMinus:!0,allowThouSep:!0,allowDecSep:!0,allowLeadingSpaces:!1,maxDigits:0/0,maxDecimalPlaces:0/0,maxPreDecimalPlaces:0/0,max:0/0,min:0/0},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){var c=a.Range.current(b).clone(),d=a.Range(b).select(b);return c.overlaps(d)?(c.compare("START_TO_START",d)<1?(startPos=0,c.move("START_TO_START",d)):(fromElementToCurrent=d.clone(),fromElementToCurrent.move("END_TO_START",c),startPos=fromElementToCurrent.toString().length),endPos=c.compare("END_TO_END",d)>=0?d.toString().length:startPos+c.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);
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/js/vendor/qtip/jquery.qtip.js
DELETED
@@ -1,3951 +0,0 @@
|
|
1 |
-
/*
|
2 |
-
* qTip2 - Pretty powerful tooltips - v2.2.0
|
3 |
-
* http://qtip2.com
|
4 |
-
*
|
5 |
-
* Copyright (c) 2013 Craig Michael Thompson
|
6 |
-
* Released under the MIT, GPL licenses
|
7 |
-
* http://jquery.org/license
|
8 |
-
*
|
9 |
-
* Date: Thu Nov 21 2013 08:34 GMT+0000
|
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 |
-
if ( typeof jQuery.qtip === 'undefined' ) {
|
16 |
-
/* Cache window, document, undefined */
|
17 |
-
(function( window, document, undefined ) {
|
18 |
-
|
19 |
-
// Uses AMD or browser globals to create a jQuery plugin.
|
20 |
-
(function( factory ) {
|
21 |
-
"use strict";
|
22 |
-
if ( typeof define === 'function' && define.amd ) {
|
23 |
-
define( ['jquery'], factory );
|
24 |
-
}
|
25 |
-
else if ( jQuery && !jQuery.fn.qtip ) {
|
26 |
-
factory( jQuery );
|
27 |
-
}
|
28 |
-
}
|
29 |
-
(
|
30 |
-
function( $ ) {
|
31 |
-
"use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
|
32 |
-
|
33 |
-
;// Munge the primitives - Paul Irish tip
|
34 |
-
var TRUE = true,
|
35 |
-
FALSE = false,
|
36 |
-
NULL = null,
|
37 |
-
|
38 |
-
// Common variables
|
39 |
-
X = 'x', Y = 'y',
|
40 |
-
WIDTH = 'width',
|
41 |
-
HEIGHT = 'height',
|
42 |
-
|
43 |
-
// Positioning sides
|
44 |
-
TOP = 'top',
|
45 |
-
LEFT = 'left',
|
46 |
-
BOTTOM = 'bottom',
|
47 |
-
RIGHT = 'right',
|
48 |
-
CENTER = 'center',
|
49 |
-
|
50 |
-
// Position adjustment types
|
51 |
-
FLIP = 'flip',
|
52 |
-
FLIPINVERT = 'flipinvert',
|
53 |
-
SHIFT = 'shift',
|
54 |
-
|
55 |
-
// Shortcut vars
|
56 |
-
QTIP, PROTOTYPE, CORNER, CHECKS,
|
57 |
-
PLUGINS = {},
|
58 |
-
NAMESPACE = 'qtip',
|
59 |
-
ATTR_HAS = 'data-hasqtip',
|
60 |
-
ATTR_ID = 'data-qtip-id',
|
61 |
-
WIDGET = ['ui-widget', 'ui-tooltip'],
|
62 |
-
SELECTOR = '.' + NAMESPACE,
|
63 |
-
INACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split( ' ' ),
|
64 |
-
|
65 |
-
CLASS_FIXED = NAMESPACE + '-fixed',
|
66 |
-
CLASS_DEFAULT = NAMESPACE + '-default',
|
67 |
-
CLASS_FOCUS = NAMESPACE + '-focus',
|
68 |
-
CLASS_HOVER = NAMESPACE + '-hover',
|
69 |
-
CLASS_DISABLED = NAMESPACE + '-disabled',
|
70 |
-
|
71 |
-
replaceSuffix = '_replacedByqTip',
|
72 |
-
oldtitle = 'oldtitle',
|
73 |
-
trackingBound,
|
74 |
-
|
75 |
-
// Browser detection
|
76 |
-
BROWSER = {
|
77 |
-
/*
|
78 |
-
* IE version detection
|
79 |
-
*
|
80 |
-
* Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment
|
81 |
-
* Credit to James Padolsey for the original implemntation!
|
82 |
-
*/
|
83 |
-
ie: (function() {
|
84 |
-
var v = 3, div = document.createElement( 'div' );
|
85 |
-
while ( (div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->') ) {
|
86 |
-
if ( !div.getElementsByTagName( 'i' )[0] ) {
|
87 |
-
break;
|
88 |
-
}
|
89 |
-
}
|
90 |
-
return v > 4 ? v : NaN;
|
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 |
-
// Set the initial flags
|
127 |
-
this.rendered = this.destroyed = this.disabled = this.waiting =
|
128 |
-
this.hiddenDuringWait = this.positioning = this.triggering = FALSE;
|
129 |
-
}
|
130 |
-
|
131 |
-
PROTOTYPE = QTip.prototype;
|
132 |
-
|
133 |
-
PROTOTYPE._when = function( deferreds ) {
|
134 |
-
return $.when.apply( $, deferreds );
|
135 |
-
};
|
136 |
-
|
137 |
-
PROTOTYPE.render = function( show ) {
|
138 |
-
if ( this.rendered || this.destroyed ) {
|
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 |
-
// Set rendered flag and prevent redundant reposition calls for now
|
190 |
-
this.rendered = -1;
|
191 |
-
this.positioning = TRUE;
|
192 |
-
|
193 |
-
// Create title...
|
194 |
-
if ( title ) {
|
195 |
-
|
196 |
-
this._createTitle();
|
197 |
-
|
198 |
-
// Update title only if its not a callback (called in toggle if so)
|
199 |
-
if ( !$.isFunction( title ) ) {
|
200 |
-
deferreds.push( this._updateTitle( title, FALSE ) );
|
201 |
-
}
|
202 |
-
}
|
203 |
-
|
204 |
-
// Create button
|
205 |
-
if ( button ) {
|
206 |
-
this._createButton();
|
207 |
-
}
|
208 |
-
|
209 |
-
// Set proper rendered flag and update content if not a callback function (called in toggle)
|
210 |
-
if ( !$.isFunction( text ) ) {
|
211 |
-
deferreds.push( this._updateContent( text, FALSE ) );
|
212 |
-
}
|
213 |
-
this.rendered = TRUE;
|
214 |
-
|
215 |
-
// Setup widget classes
|
216 |
-
this._setWidget();
|
217 |
-
|
218 |
-
// Initialize 'render' plugins
|
219 |
-
$.each(
|
220 |
-
PLUGINS, function( name ) {
|
221 |
-
var instance;
|
222 |
-
if ( this.initialize === 'render' && (instance = this( self )) ) {
|
223 |
-
self.plugins[name] = instance;
|
224 |
-
}
|
225 |
-
}
|
226 |
-
);
|
227 |
-
|
228 |
-
// Unassign initial events and assign proper events
|
229 |
-
this._unassignEvents();
|
230 |
-
this._assignEvents();
|
231 |
-
|
232 |
-
// When deferreds have completed
|
233 |
-
this._when( deferreds ).then(
|
234 |
-
function() {
|
235 |
-
// tooltiprender event
|
236 |
-
self._trigger( 'render' );
|
237 |
-
|
238 |
-
// Reset flags
|
239 |
-
self.positioning = FALSE;
|
240 |
-
|
241 |
-
// Show tooltip if not hidden during wait period
|
242 |
-
if ( !self.hiddenDuringWait && (options.show.ready || show) ) {
|
243 |
-
self.toggle( TRUE, cache.event, FALSE );
|
244 |
-
}
|
245 |
-
self.hiddenDuringWait = FALSE;
|
246 |
-
}
|
247 |
-
);
|
248 |
-
|
249 |
-
// Expose API
|
250 |
-
QTIP.api[this.id] = this;
|
251 |
-
|
252 |
-
return this;
|
253 |
-
};
|
254 |
-
|
255 |
-
PROTOTYPE.destroy = function( immediate ) {
|
256 |
-
// Set flag the signify destroy is taking place to plugins
|
257 |
-
// and ensure it only gets destroyed once!
|
258 |
-
if ( this.destroyed ) {
|
259 |
-
return this.target;
|
260 |
-
}
|
261 |
-
|
262 |
-
function process() {
|
263 |
-
if ( this.destroyed ) {
|
264 |
-
return;
|
265 |
-
}
|
266 |
-
this.destroyed = TRUE;
|
267 |
-
|
268 |
-
var target = this.target,
|
269 |
-
title = target.attr( oldtitle );
|
270 |
-
|
271 |
-
// Destroy tooltip if rendered
|
272 |
-
if ( this.rendered ) {
|
273 |
-
this.tooltip.stop( 1, 0 ).find( '*' ).remove().end().remove();
|
274 |
-
}
|
275 |
-
|
276 |
-
// Destroy all plugins
|
277 |
-
$.each(
|
278 |
-
this.plugins, function( name ) {
|
279 |
-
this.destroy && this.destroy();
|
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 |
-
// Remove qTip events associated with this API
|
300 |
-
this._unbind( target );
|
301 |
-
|
302 |
-
// Remove ID from used id objects, and delete object references
|
303 |
-
// for better garbage collection and leak protection
|
304 |
-
this.options = this.elements = this.cache = this.timers =
|
305 |
-
this.plugins = this.mouse = NULL;
|
306 |
-
|
307 |
-
// Delete epoxsed API object
|
308 |
-
delete QTIP.api[this.id];
|
309 |
-
}
|
310 |
-
|
311 |
-
// If an immediate destory is needed
|
312 |
-
if ( (immediate !== TRUE || this.triggering === 'hide') && this.rendered ) {
|
313 |
-
this.tooltip.one( 'tooltiphidden', $.proxy( process, this ) );
|
314 |
-
!this.triggering && this.hide();
|
315 |
-
}
|
316 |
-
|
317 |
-
// If we're not in the process of hiding... process
|
318 |
-
else {
|
319 |
-
process.call( this );
|
320 |
-
}
|
321 |
-
|
322 |
-
return this.target;
|
323 |
-
};
|
324 |
-
|
325 |
-
;
|
326 |
-
function invalidOpt( a ) {
|
327 |
-
return a === NULL || $.type( a ) !== 'object';
|
328 |
-
}
|
329 |
-
|
330 |
-
function invalidContent( c ) {
|
331 |
-
return !( $.isFunction( c ) || (c && c.attr) || c.length || ($.type( c ) === 'object' && (c.jquery || c.then) ));
|
332 |
-
}
|
333 |
-
|
334 |
-
// Option object sanitizer
|
335 |
-
function sanitizeOptions( opts ) {
|
336 |
-
var content, text, ajax, once;
|
337 |
-
|
338 |
-
if ( invalidOpt( opts ) ) {
|
339 |
-
return FALSE;
|
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 |
-
if ( invalidContent( content.title || FALSE ) ) {
|
398 |
-
content.title = FALSE;
|
399 |
-
}
|
400 |
-
}
|
401 |
-
}
|
402 |
-
|
403 |
-
if ( 'position' in opts && invalidOpt( opts.position ) ) {
|
404 |
-
opts.position = {my: opts.position, at: opts.position};
|
405 |
-
}
|
406 |
-
|
407 |
-
if ( 'show' in opts && invalidOpt( opts.show ) ) {
|
408 |
-
opts.show = opts.show.jquery ? {target: opts.show} :
|
409 |
-
opts.show === TRUE ? {ready: TRUE} : {event: opts.show};
|
410 |
-
}
|
411 |
-
|
412 |
-
if ( 'hide' in opts && invalidOpt( opts.hide ) ) {
|
413 |
-
opts.hide = opts.hide.jquery ? {target: opts.hide} : {event: opts.hide};
|
414 |
-
}
|
415 |
-
|
416 |
-
if ( 'style' in opts && invalidOpt( opts.style ) ) {
|
417 |
-
opts.style = {classes: opts.style};
|
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 |
-
// Setup builtin .set() option checks
|
431 |
-
CHECKS = PROTOTYPE.checks = {
|
432 |
-
builtin: {
|
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 |
-
if ( id !== FALSE && id.length > 0 && !$( '#' + new_id ).length ) {
|
439 |
-
this._id = new_id;
|
440 |
-
|
441 |
-
if ( this.rendered ) {
|
442 |
-
this.tooltip[0].id = this._id;
|
443 |
-
this.elements.content[0].id = this._id + '-content';
|
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 |
-
// Content checks
|
456 |
-
'^content.text$': function( obj, o, v ) {
|
457 |
-
this._updateContent( v );
|
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 |
-
// Remove title if content is null
|
467 |
-
if ( !v ) {
|
468 |
-
return this._removeTitle();
|
469 |
-
}
|
470 |
-
|
471 |
-
// If title isn't already created, create it now and update
|
472 |
-
v && !this.elements.title && this._createTitle();
|
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 |
-
// Position checks
|
483 |
-
'^position.(my|at)$': function( obj, o, v ) {
|
484 |
-
'string' === typeof v && (obj[o] = new CORNER( v, o === 'at' ));
|
485 |
-
},
|
486 |
-
'^position.container$': function( obj, o, v ) {
|
487 |
-
this.rendered && this.tooltip.appendTo( v );
|
488 |
-
},
|
489 |
-
|
490 |
-
// Show checks
|
491 |
-
'^show.ready$': function( obj, o, v ) {
|
492 |
-
v && (!this.rendered && this.render( TRUE ) || this.toggle( TRUE ));
|
493 |
-
},
|
494 |
-
|
495 |
-
// Style checks
|
496 |
-
'^style.classes$': function( obj, o, v, p ) {
|
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 |
-
// Events check
|
510 |
-
'^events.(render|show|move|hide|focus|blur)$': function( obj, o, v ) {
|
511 |
-
this.rendered && this.tooltip[($.isFunction( v ) ? '' : 'un') + 'bind']( 'tooltip' + o, v );
|
512 |
-
},
|
513 |
-
|
514 |
-
// Properties which require event reassignment
|
515 |
-
'^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() {
|
516 |
-
if ( !this.rendered ) {
|
517 |
-
return;
|
518 |
-
}
|
519 |
-
|
520 |
-
// Set tracking flag
|
521 |
-
var posOptions = this.options.position;
|
522 |
-
this.tooltip.attr( 'tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse );
|
523 |
-
|
524 |
-
// Reassign events
|
525 |
-
this._unassignEvents();
|
526 |
-
this._assignEvents();
|
527 |
-
}
|
528 |
-
}
|
529 |
-
};
|
530 |
-
|
531 |
-
// Dot notation converter
|
532 |
-
function convertNotation( options, notation ) {
|
533 |
-
var i = 0, obj, option = options,
|
534 |
-
|
535 |
-
// Split notation into array
|
536 |
-
levels = notation.split( '.' );
|
537 |
-
|
538 |
-
// Loop through
|
539 |
-
while ( option = option[levels[i++]] ) {
|
540 |
-
if ( i < levels.length ) {
|
541 |
-
obj = option;
|
542 |
-
}
|
543 |
-
}
|
544 |
-
|
545 |
-
return [obj || options, levels.pop()];
|
546 |
-
}
|
547 |
-
|
548 |
-
PROTOTYPE.get = function( notation ) {
|
549 |
-
if ( this.destroyed ) {
|
550 |
-
return this;
|
551 |
-
}
|
552 |
-
|
553 |
-
var o = convertNotation( this.options, notation.toLowerCase() ),
|
554 |
-
result = o[0][o[1]];
|
555 |
-
|
556 |
-
return result.precedance ? result.string() : result;
|
557 |
-
};
|
558 |
-
|
559 |
-
function setCallback( notation, args ) {
|
560 |
-
var category, rule, match;
|
561 |
-
|
562 |
-
for ( category in this.checks ) {
|
563 |
-
for ( rule in this.checks[category] ) {
|
564 |
-
if ( match = (new RegExp( rule, 'i' )).exec( notation ) ) {
|
565 |
-
args.push( match );
|
566 |
-
|
567 |
-
if ( category === 'builtin' || this.plugins[category] ) {
|
568 |
-
this.checks[category][rule].apply(
|
569 |
-
this.plugins[category] || this, args
|
570 |
-
);
|
571 |
-
}
|
572 |
-
}
|
573 |
-
}
|
574 |
-
}
|
575 |
-
}
|
576 |
-
|
577 |
-
var rmove = /^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,
|
578 |
-
rrender = /^prerender|show\.ready/i;
|
579 |
-
|
580 |
-
PROTOTYPE.set = function( option, value ) {
|
581 |
-
if ( this.destroyed ) {
|
582 |
-
return this;
|
583 |
-
}
|
584 |
-
|
585 |
-
var rendered = this.rendered,
|
586 |
-
reposition = FALSE,
|
587 |
-
options = this.options,
|
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 |
-
// Set all of the defined options to their new values
|
602 |
-
$.each(
|
603 |
-
option, function( notation, value ) {
|
604 |
-
if ( rendered && rrender.test( notation ) ) {
|
605 |
-
delete option[notation];
|
606 |
-
return;
|
607 |
-
}
|
608 |
-
|
609 |
-
// Set new obj value
|
610 |
-
var obj = convertNotation( options, notation.toLowerCase() ), previous;
|
611 |
-
previous = obj[0][obj[1]];
|
612 |
-
obj[0][obj[1]] = value && value.nodeType ? $( value ) : value;
|
613 |
-
|
614 |
-
// Also check if we need to reposition
|
615 |
-
reposition = rmove.test( notation ) || reposition;
|
616 |
-
|
617 |
-
// Set the new params for the callback
|
618 |
-
option[notation] = [obj[0], obj[1], value, previous];
|
619 |
-
}
|
620 |
-
);
|
621 |
-
|
622 |
-
// Re-sanitize options
|
623 |
-
sanitizeOptions( options );
|
624 |
-
|
625 |
-
/*
|
626 |
-
* Execute any valid callbacks for the set options
|
627 |
-
* Also set positioning flag so we don't get loads of redundant repositioning calls.
|
628 |
-
*/
|
629 |
-
this.positioning = TRUE;
|
630 |
-
$.each( option, $.proxy( setCallback, this ) );
|
631 |
-
this.positioning = FALSE;
|
632 |
-
|
633 |
-
// Update position if needed
|
634 |
-
if ( this.rendered && this.tooltip[0].offsetWidth > 0 && reposition ) {
|
635 |
-
this.reposition( options.position.target === 'mouse' ? NULL : this.cache.event );
|
636 |
-
}
|
637 |
-
|
638 |
-
return this;
|
639 |
-
};
|
640 |
-
|
641 |
-
;
|
642 |
-
PROTOTYPE._update = function( content, element, reposition ) {
|
643 |
-
var self = this,
|
644 |
-
cache = this.cache;
|
645 |
-
|
646 |
-
// Make sure tooltip is rendered and content is defined. If not return
|
647 |
-
if ( !this.rendered || !content ) {
|
648 |
-
return FALSE;
|
649 |
-
}
|
650 |
-
|
651 |
-
// Use function to parse content
|
652 |
-
if ( $.isFunction( content ) ) {
|
653 |
-
content = content.call( this.elements.target, cache.event, this ) || '';
|
654 |
-
}
|
655 |
-
|
656 |
-
// Handle deferred content
|
657 |
-
if ( $.isFunction( content.then ) ) {
|
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 |
-
// If content is null... return false
|
670 |
-
if ( content === FALSE || (!content && content !== '') ) {
|
671 |
-
return FALSE;
|
672 |
-
}
|
673 |
-
|
674 |
-
// Append new content if its a DOM array and show it if hidden
|
675 |
-
if ( content.jquery && content.length > 0 ) {
|
676 |
-
element.empty().append(
|
677 |
-
content.css( {display: 'block', visibility: 'visible'} )
|
678 |
-
);
|
679 |
-
}
|
680 |
-
|
681 |
-
// Content is a regular string, insert the new content
|
682 |
-
else {
|
683 |
-
element.html( content );
|
684 |
-
}
|
685 |
-
|
686 |
-
// Wait for content to be loaded, and reposition
|
687 |
-
return this._waitForContent( element ).then(
|
688 |
-
function( images ) {
|
689 |
-
if ( images.images && images.images.length && self.rendered && self.tooltip[0].offsetWidth > 0 ) {
|
690 |
-
self.reposition( cache.event, !images.length );
|
691 |
-
}
|
692 |
-
}
|
693 |
-
);
|
694 |
-
};
|
695 |
-
|
696 |
-
PROTOTYPE._waitForContent = function( element ) {
|
697 |
-
var cache = this.cache;
|
698 |
-
|
699 |
-
// Set flag
|
700 |
-
cache.waiting = TRUE;
|
701 |
-
|
702 |
-
// If imagesLoaded is included, ensure images have loaded and return promise
|
703 |
-
return ( $.fn.imagesLoaded ? element.imagesLoaded() : $.Deferred().resolve( [] ) )
|
704 |
-
.done(
|
705 |
-
function() {
|
706 |
-
cache.waiting = FALSE;
|
707 |
-
}
|
708 |
-
)
|
709 |
-
.promise();
|
710 |
-
};
|
711 |
-
|
712 |
-
PROTOTYPE._updateContent = function( content, reposition ) {
|
713 |
-
this._update( content, this.elements.content, reposition );
|
714 |
-
};
|
715 |
-
|
716 |
-
PROTOTYPE._updateTitle = function( content, reposition ) {
|
717 |
-
if ( this._update( content, this.elements.title, reposition ) === FALSE ) {
|
718 |
-
this._removeTitle( FALSE );
|
719 |
-
}
|
720 |
-
};
|
721 |
-
|
722 |
-
PROTOTYPE._createTitle = function() {
|
723 |
-
var elements = this.elements,
|
724 |
-
id = this._id + '-title';
|
725 |
-
|
726 |
-
// Destroy previous title element, if present
|
727 |
-
if ( elements.titlebar ) {
|
728 |
-
this._removeTitle();
|
729 |
-
}
|
730 |
-
|
731 |
-
// Create title bar and title elements
|
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 |
-
PROTOTYPE._removeTitle = function( reposition ) {
|
769 |
-
var elements = this.elements;
|
770 |
-
|
771 |
-
if ( elements.title ) {
|
772 |
-
elements.titlebar.remove();
|
773 |
-
elements.titlebar = elements.title = elements.button = NULL;
|
774 |
-
|
775 |
-
// Reposition if enabled
|
776 |
-
if ( reposition !== FALSE ) {
|
777 |
-
this.reposition();
|
778 |
-
}
|
779 |
-
}
|
780 |
-
};
|
781 |
-
|
782 |
-
;
|
783 |
-
PROTOTYPE.reposition = function( event, effect ) {
|
784 |
-
if ( !this.rendered || this.positioning || this.destroyed ) {
|
785 |
-
return this;
|
786 |
-
}
|
787 |
-
|
788 |
-
// Set positioning flag
|
789 |
-
this.positioning = TRUE;
|
790 |
-
|
791 |
-
var cache = this.cache,
|
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 |
-
// Check if mouse was the target
|
822 |
-
else if ( target === 'mouse' ) {
|
823 |
-
// Force left top to allow flipping
|
824 |
-
at = {x: LEFT, y: TOP};
|
825 |
-
|
826 |
-
// Use the cached mouse coordinates if available, or passed event has no coordinates
|
827 |
-
if ( mouse && mouse.pageX && (adjust.mouse || !event || !event.pageX) ) {
|
828 |
-
event = mouse;
|
829 |
-
}
|
830 |
-
|
831 |
-
// If the passed event has no coordinates (such as a scroll event)
|
832 |
-
else if ( !event || !event.pageX ) {
|
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 |
-
// Use cached event for resize/scroll events
|
839 |
-
else if ( !event || (event && (event.type === 'resize' || event.type === 'scroll')) ) {
|
840 |
-
event = cache.event;
|
841 |
-
}
|
842 |
-
}
|
843 |
-
|
844 |
-
// Calculate body and container offset and take them into account below
|
845 |
-
if ( type !== 'static' ) {
|
846 |
-
position = container.offset();
|
847 |
-
}
|
848 |
-
if ( doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth) ) {
|
849 |
-
offset = $( document.body ).offset();
|
850 |
-
}
|
851 |
-
|
852 |
-
// Use event coordinates for position
|
853 |
-
position = {
|
854 |
-
left: event.pageX - position.left + (offset && offset.left || 0),
|
855 |
-
top: event.pageY - position.top + (offset && offset.top || 0)
|
856 |
-
};
|
857 |
-
|
858 |
-
// Scroll events are a pain, some browsers
|
859 |
-
if ( adjust.mouse && isScroll && mouse ) {
|
860 |
-
position.left -= (mouse.scrollX || 0) - win.scrollLeft();
|
861 |
-
position.top -= (mouse.scrollY || 0) - win.scrollTop();
|
862 |
-
}
|
863 |
-
}
|
864 |
-
|
865 |
-
// Target wasn't mouse or absolute...
|
866 |
-
else {
|
867 |
-
// Check if event targetting is being used
|
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 |
-
// Parse the target into a jQuery object and make sure there's an element present
|
882 |
-
target = $( target ).eq( 0 );
|
883 |
-
if ( target.length === 0 ) {
|
884 |
-
return this;
|
885 |
-
}
|
886 |
-
|
887 |
-
// Check if window or document is the target
|
888 |
-
else if ( target[0] === document || target[0] === window ) {
|
889 |
-
targetWidth = BROWSER.iOS ? window.innerWidth : target.width();
|
890 |
-
targetHeight = BROWSER.iOS ? window.innerHeight : target.height();
|
891 |
-
|
892 |
-
if ( target[0] === window ) {
|
893 |
-
position = {
|
894 |
-
top: (viewport || target).scrollTop(),
|
895 |
-
left: (viewport || target).scrollLeft()
|
896 |
-
};
|
897 |
-
}
|
898 |
-
}
|
899 |
-
|
900 |
-
// Check if the target is an <AREA> element
|
901 |
-
else if ( PLUGINS.imagemap && target.is( 'area' ) ) {
|
902 |
-
pluginCalculations = PLUGINS.imagemap(
|
903 |
-
this, target, at, PLUGINS.viewport ? method : FALSE
|
904 |
-
);
|
905 |
-
}
|
906 |
-
|
907 |
-
// Check if the target is an SVG element
|
908 |
-
else if ( PLUGINS.svg && target && target[0].ownerSVGElement ) {
|
909 |
-
pluginCalculations = PLUGINS.svg( this, target, at, PLUGINS.viewport ? method : FALSE );
|
910 |
-
}
|
911 |
-
|
912 |
-
// Otherwise use regular jQuery methods
|
913 |
-
else {
|
914 |
-
targetWidth = target.outerWidth( FALSE );
|
915 |
-
targetHeight = target.outerHeight( FALSE );
|
916 |
-
position = target.offset();
|
917 |
-
}
|
918 |
-
|
919 |
-
// Parse returned plugin values into proper variables
|
920 |
-
if ( pluginCalculations ) {
|
921 |
-
targetWidth = pluginCalculations.width;
|
922 |
-
targetHeight = pluginCalculations.height;
|
923 |
-
offset = pluginCalculations.offset;
|
924 |
-
position = pluginCalculations.position;
|
925 |
-
}
|
926 |
-
|
927 |
-
// Adjust position to take into account offset parents
|
928 |
-
position = this.reposition.offset( target, position, container );
|
929 |
-
|
930 |
-
// Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2)
|
931 |
-
if ( (BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1) ||
|
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 |
-
// Adjust position relative to target
|
940 |
-
if ( !pluginCalculations || (pluginCalculations && pluginCalculations.adjustable !== FALSE) ) {
|
941 |
-
position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0;
|
942 |
-
position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0;
|
943 |
-
}
|
944 |
-
}
|
945 |
-
|
946 |
-
// Adjust position relative to tooltip
|
947 |
-
position.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0);
|
948 |
-
position.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0);
|
949 |
-
|
950 |
-
// Use viewport adjustment plugin if enabled
|
951 |
-
if ( PLUGINS.viewport ) {
|
952 |
-
position.adjusted = PLUGINS.viewport(
|
953 |
-
this, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight
|
954 |
-
);
|
955 |
-
|
956 |
-
// Apply offsets supplied by positioning plugin (if used)
|
957 |
-
if ( offset && position.adjusted.left ) {
|
958 |
-
position.left += offset.left;
|
959 |
-
}
|
960 |
-
if ( offset && position.adjusted.top ) {
|
961 |
-
position.top += offset.top;
|
962 |
-
}
|
963 |
-
}
|
964 |
-
|
965 |
-
// Viewport adjustment is disabled, set values to zero
|
966 |
-
else {
|
967 |
-
position.adjusted = {left: 0, top: 0};
|
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 |
-
// If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly
|
977 |
-
if ( effect === FALSE || !visible || isNaN( position.left ) || isNaN( position.top ) || target === 'mouse' || !$.isFunction( posOptions.effect ) ) {
|
978 |
-
tooltip.css( position );
|
979 |
-
}
|
980 |
-
|
981 |
-
// Use custom function if provided
|
982 |
-
else if ( $.isFunction( posOptions.effect ) ) {
|
983 |
-
posOptions.effect.call( tooltip, this, $.extend( {}, position ) );
|
984 |
-
tooltip.queue(
|
985 |
-
function( next ) {
|
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 |
-
// Set positioning flag
|
998 |
-
this.positioning = FALSE;
|
999 |
-
|
1000 |
-
return this;
|
1001 |
-
};
|
1002 |
-
|
1003 |
-
// Custom (more correct for qTip!) offset calculator
|
1004 |
-
PROTOTYPE.reposition.offset = function( elem, pos, container ) {
|
1005 |
-
if ( !container[0] ) {
|
1006 |
-
return pos;
|
1007 |
-
}
|
1008 |
-
|
1009 |
-
var ownerDocument = $( elem[0].ownerDocument ),
|
1010 |
-
quirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat',
|
1011 |
-
parent = container[0],
|
1012 |
-
scrolled, position, parentOffset, overflow;
|
1013 |
-
|
1014 |
-
function scroll( e, i ) {
|
1015 |
-
pos.left += i * e.scrollLeft();
|
1016 |
-
pos.top += i * e.scrollTop();
|
1017 |
-
}
|
1018 |
-
|
1019 |
-
// Compensate for non-static containers offset
|
1020 |
-
do {
|
1021 |
-
if ( (position = $.css( parent, 'position' )) !== 'static' ) {
|
1022 |
-
if ( position === 'fixed' ) {
|
1023 |
-
parentOffset = parent.getBoundingClientRect();
|
1024 |
-
scroll( ownerDocument, -1 );
|
1025 |
-
}
|
1026 |
-
else {
|
1027 |
-
parentOffset = $( parent ).position();
|
1028 |
-
parentOffset.left += (parseFloat( $.css( parent, 'borderLeftWidth' ) ) || 0);
|
1029 |
-
parentOffset.top += (parseFloat( $.css( parent, 'borderTopWidth' ) ) || 0);
|
1030 |
-
}
|
1031 |
-
|
1032 |
-
pos.left -= parentOffset.left + (parseFloat( $.css( parent, 'marginLeft' ) ) || 0);
|
1033 |
-
pos.top -= parentOffset.top + (parseFloat( $.css( parent, 'marginTop' ) ) || 0);
|
1034 |
-
|
1035 |
-
// If this is the first parent element with an overflow of "scroll" or "auto", store it
|
1036 |
-
if ( !scrolled && (overflow = $.css(
|
1037 |
-
parent, 'overflow'
|
1038 |
-
)) !== 'hidden' && overflow !== 'visible' ) {
|
1039 |
-
scrolled = $( parent );
|
1040 |
-
}
|
1041 |
-
}
|
1042 |
-
}
|
1043 |
-
while ( (parent = parent.offsetParent) );
|
1044 |
-
|
1045 |
-
// Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode)
|
1046 |
-
if ( scrolled && (scrolled[0] !== ownerDocument[0] || quirks) ) {
|
1047 |
-
scroll( scrolled, 1 );
|
1048 |
-
}
|
1049 |
-
|
1050 |
-
return pos;
|
1051 |
-
};
|
1052 |
-
|
1053 |
-
// Corner class
|
1054 |
-
var C = (CORNER = PROTOTYPE.reposition.Corner = function( corner, forceY ) {
|
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 |
-
var f = corner.charAt( 0 );
|
1061 |
-
this.precedance = (f === 't' || f === 'b' ? Y : X);
|
1062 |
-
}).prototype;
|
1063 |
-
|
1064 |
-
C.invert = function( z, center ) {
|
1065 |
-
this[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z];
|
1066 |
-
};
|
1067 |
-
|
1068 |
-
C.string = function() {
|
1069 |
-
var x = this.x, y = this.y;
|
1070 |
-
return x === y ? x : this.precedance === Y || (this.forceY && y !== 'center') ? y + ' ' + x : x + ' ' + y;
|
1071 |
-
};
|
1072 |
-
|
1073 |
-
C.abbrev = function() {
|
1074 |
-
var result = this.string().split( ' ' );
|
1075 |
-
return result[0].charAt( 0 ) + (result[1] && result[1].charAt( 0 ) || '');
|
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 |
-
// If we're currently waiting and we've just hidden... stop it
|
1100 |
-
this.waiting && !state && (this.hiddenDuringWait = TRUE);
|
1101 |
-
|
1102 |
-
// Render the tooltip if showing and it isn't already
|
1103 |
-
if ( !this.rendered ) {
|
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 |
-
// If the state hasn't changed or the user stopped it, return early
|
1143 |
-
if ( !allow || identicalState ) {
|
1144 |
-
return this;
|
1145 |
-
}
|
1146 |
-
|
1147 |
-
// Set ARIA hidden attribute
|
1148 |
-
$.attr( tooltip[0], 'aria-hidden', !!!state );
|
1149 |
-
|
1150 |
-
// Execute state specific properties
|
1151 |
-
if ( state ) {
|
1152 |
-
// Store show origin coordinates
|
1153 |
-
cache.origin = cloneEvent( this.mouse );
|
1154 |
-
|
1155 |
-
// Update tooltip content & title if it's a dynamic function
|
1156 |
-
if ( $.isFunction( contentOptions.text ) ) {
|
1157 |
-
this._updateContent( contentOptions.text, FALSE );
|
1158 |
-
}
|
1159 |
-
if ( $.isFunction( contentOptions.title ) ) {
|
1160 |
-
this._updateTitle( contentOptions.title, FALSE );
|
1161 |
-
}
|
1162 |
-
|
1163 |
-
// Cache mousemove events for positioning purposes (if not already tracking)
|
1164 |
-
if ( !trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse ) {
|
1165 |
-
$( document ).bind( 'mousemove.' + NAMESPACE, this._storeMouse );
|
1166 |
-
trackingBound = TRUE;
|
1167 |
-
}
|
1168 |
-
|
1169 |
-
// Update the tooltip position (set width first to prevent viewport/max-width issues)
|
1170 |
-
if ( !width ) {
|
1171 |
-
tooltip.css( 'width', tooltip.outerWidth( FALSE ) );
|
1172 |
-
}
|
1173 |
-
this.reposition( event, arguments[2] );
|
1174 |
-
if ( !width ) {
|
1175 |
-
tooltip.css( 'width', '' );
|
1176 |
-
}
|
1177 |
-
|
1178 |
-
// Hide other tooltips if tooltip is solo
|
1179 |
-
if ( !!opts.solo ) {
|
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 |
-
// Blur the tooltip
|
1200 |
-
this.blur( event );
|
1201 |
-
}
|
1202 |
-
|
1203 |
-
// Define post-animation, state specific properties
|
1204 |
-
after = $.proxy(
|
1205 |
-
function() {
|
1206 |
-
if ( state ) {
|
1207 |
-
// Prevent antialias from disappearing in IE by removing filter
|
1208 |
-
if ( BROWSER.ie ) {
|
1209 |
-
tooltip[0].style.removeAttribute( 'filter' );
|
1210 |
-
}
|
1211 |
-
|
1212 |
-
// Remove overflow setting to prevent tip bugs
|
1213 |
-
tooltip.css( 'overflow', '' );
|
1214 |
-
|
1215 |
-
// Autofocus elements if enabled
|
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 |
-
// tooltipvisible/tooltiphidden events
|
1237 |
-
this._trigger( state ? 'visible' : 'hidden' );
|
1238 |
-
}, this
|
1239 |
-
);
|
1240 |
-
|
1241 |
-
// If no effect type is supplied, use a simple toggle
|
1242 |
-
if ( opts.effect === FALSE || animate === FALSE ) {
|
1243 |
-
tooltip[type]();
|
1244 |
-
after();
|
1245 |
-
}
|
1246 |
-
|
1247 |
-
// Use custom function if provided
|
1248 |
-
else if ( $.isFunction( opts.effect ) ) {
|
1249 |
-
tooltip.stop( 1, 1 );
|
1250 |
-
opts.effect.call( tooltip, this );
|
1251 |
-
tooltip.queue(
|
1252 |
-
'fx', function( n ) {
|
1253 |
-
after();
|
1254 |
-
n();
|
1255 |
-
}
|
1256 |
-
);
|
1257 |
-
}
|
1258 |
-
|
1259 |
-
// Use basic fade function by default
|
1260 |
-
else {
|
1261 |
-
tooltip.fadeTo( 90, state ? 1 : 0, after );
|
1262 |
-
}
|
1263 |
-
|
1264 |
-
// If inactive hide method is set, active it
|
1265 |
-
if ( state ) {
|
1266 |
-
opts.target.trigger( 'qtip-' + this.id + '-inactive' );
|
1267 |
-
}
|
1268 |
-
|
1269 |
-
return this;
|
1270 |
-
};
|
1271 |
-
|
1272 |
-
PROTOTYPE.show = function( event ) {
|
1273 |
-
return this.toggle( TRUE, event );
|
1274 |
-
};
|
1275 |
-
|
1276 |
-
PROTOTYPE.hide = function( event ) {
|
1277 |
-
return this.toggle( FALSE, event );
|
1278 |
-
};
|
1279 |
-
|
1280 |
-
;
|
1281 |
-
PROTOTYPE.focus = function( event ) {
|
1282 |
-
if ( !this.rendered || this.destroyed ) {
|
1283 |
-
return this;
|
1284 |
-
}
|
1285 |
-
|
1286 |
-
var qtips = $( SELECTOR ),
|
1287 |
-
tooltip = this.tooltip,
|
1288 |
-
curIndex = parseInt( tooltip[0].style.zIndex, 10 ),
|
1289 |
-
newIndex = QTIP.zindex + qtips.length,
|
1290 |
-
focusedElem;
|
1291 |
-
|
1292 |
-
// Only update the z-index if it has changed and tooltip is not already focused
|
1293 |
-
if ( !tooltip.hasClass( CLASS_FOCUS ) ) {
|
1294 |
-
// tooltipfocus event
|
1295 |
-
if ( this._trigger( 'focus', [newIndex], event ) ) {
|
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 |
-
// Set the new z-index
|
1312 |
-
tooltip.addClass( CLASS_FOCUS )[0].style.zIndex = newIndex;
|
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 focused status to FALSE
|
1325 |
-
this.tooltip.removeClass( CLASS_FOCUS );
|
1326 |
-
|
1327 |
-
// tooltipblur event
|
1328 |
-
this._trigger( 'blur', [this.tooltip.css( 'zIndex' )], event );
|
1329 |
-
|
1330 |
-
return this;
|
1331 |
-
};
|
1332 |
-
|
1333 |
-
;
|
1334 |
-
PROTOTYPE.disable = function( state ) {
|
1335 |
-
if ( this.destroyed ) {
|
1336 |
-
return this;
|
1337 |
-
}
|
1338 |
-
|
1339 |
-
// If 'toggle' is passed, toggle the current state
|
1340 |
-
if ( state === 'toggle' ) {
|
1341 |
-
state = !(this.rendered ? this.tooltip.hasClass( CLASS_DISABLED ) : this.disabled);
|
1342 |
-
}
|
1343 |
-
|
1344 |
-
// Disable if no state passed
|
1345 |
-
else if ( 'boolean' !== typeof state ) {
|
1346 |
-
state = TRUE;
|
1347 |
-
}
|
1348 |
-
|
1349 |
-
if ( this.rendered ) {
|
1350 |
-
this.tooltip.toggleClass( CLASS_DISABLED, state )
|
1351 |
-
.attr( 'aria-disabled', state );
|
1352 |
-
}
|
1353 |
-
|
1354 |
-
this.disabled = !!state;
|
1355 |
-
|
1356 |
-
return this;
|
1357 |
-
};
|
1358 |
-
|
1359 |
-
PROTOTYPE.enable = function() {
|
1360 |
-
return this.disable( FALSE );
|
1361 |
-
};
|
1362 |
-
|
1363 |
-
;
|
1364 |
-
PROTOTYPE._createButton = function() {
|
1365 |
-
var self = this,
|
1366 |
-
elements = this.elements,
|
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 |
-
// Use custom button if one was supplied by user, else use default
|
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 |
-
// Create button and setup attributes
|
1399 |
-
elements.button.appendTo( elements.titlebar || tooltip )
|
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 |
-
PROTOTYPE._updateButton = function( button ) {
|
1412 |
-
// Make sure tooltip is rendered and if not, return
|
1413 |
-
if ( !this.rendered ) {
|
1414 |
-
return FALSE;
|
1415 |
-
}
|
1416 |
-
|
1417 |
-
var elem = this.elements.button;
|
1418 |
-
if ( button ) {
|
1419 |
-
this._createButton();
|
1420 |
-
}
|
1421 |
-
else {
|
1422 |
-
elem.remove();
|
1423 |
-
}
|
1424 |
-
};
|
1425 |
-
|
1426 |
-
;// Widget class creator
|
1427 |
-
function createWidgetClass( cls ) {
|
1428 |
-
return WIDGET.concat( '' ).join( cls ? '-' + cls + ' ' : ' ' );
|
1429 |
-
}
|
1430 |
-
|
1431 |
-
// Widget class setter method
|
1432 |
-
PROTOTYPE._setWidget = function() {
|
1433 |
-
var on = this.options.style.widget,
|
1434 |
-
elements = this.elements,
|
1435 |
-
tooltip = elements.tooltip,
|
1436 |
-
disabled = tooltip.hasClass( CLASS_DISABLED );
|
1437 |
-
|
1438 |
-
tooltip.removeClass( CLASS_DISABLED );
|
1439 |
-
CLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled';
|
1440 |
-
tooltip.toggleClass( CLASS_DISABLED, disabled );
|
1441 |
-
|
1442 |
-
tooltip.toggleClass( 'ui-helper-reset ' + createWidgetClass(), on ).toggleClass(
|
1443 |
-
CLASS_DEFAULT, this.options.style.def && !on
|
1444 |
-
);
|
1445 |
-
|
1446 |
-
if ( elements.content ) {
|
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 |
-
function showMethod( event ) {
|
1482 |
-
if ( this.tooltip.hasClass( CLASS_DISABLED ) ) {
|
1483 |
-
return FALSE;
|
1484 |
-
}
|
1485 |
-
|
1486 |
-
// Clear hide timers
|
1487 |
-
clearTimeout( this.timers.show );
|
1488 |
-
clearTimeout( this.timers.hide );
|
1489 |
-
|
1490 |
-
// Start show timer
|
1491 |
-
this.timers.show = delay.call(
|
1492 |
-
this,
|
1493 |
-
function() {
|
1494 |
-
this.toggle( TRUE, event );
|
1495 |
-
},
|
1496 |
-
this.options.show.delay
|
1497 |
-
);
|
1498 |
-
}
|
1499 |
-
|
1500 |
-
function hideMethod( event ) {
|
1501 |
-
if ( this.tooltip.hasClass( CLASS_DISABLED ) ) {
|
1502 |
-
return FALSE;
|
1503 |
-
}
|
1504 |
-
|
1505 |
-
// Check if new target was actually the tooltip element
|
1506 |
-
var relatedTarget = $( event.relatedTarget ),
|
1507 |
-
ontoTooltip = relatedTarget.closest( SELECTOR )[0] === this.tooltip[0],
|
1508 |
-
ontoTarget = relatedTarget[0] === this.options.show.target[0];
|
1509 |
-
|
1510 |
-
// Clear timers and stop animation queue
|
1511 |
-
clearTimeout( this.timers.show );
|
1512 |
-
clearTimeout( this.timers.hide );
|
1513 |
-
|
1514 |
-
// Prevent hiding if tooltip is fixed and event target is the tooltip.
|
1515 |
-
// Or if mouse positioning is enabled and cursor momentarily overlaps
|
1516 |
-
if ( this !== relatedTarget[0] &&
|
1517 |
-
(this.options.position.target === 'mouse' && ontoTooltip) ||
|
1518 |
-
(this.options.hide.fixed && (
|
1519 |
-
(/mouse(out|leave|move)/).test( event.type ) && (ontoTooltip || ontoTarget))
|
1520 |
-
) ) {
|
1521 |
-
try {
|
1522 |
-
event.preventDefault();
|
1523 |
-
event.stopImmediatePropagation();
|
1524 |
-
} catch ( e ) {
|
1525 |
-
}
|
1526 |
-
|
1527 |
-
return;
|
1528 |
-
}
|
1529 |
-
|
1530 |
-
// If tooltip has displayed, start hide timer
|
1531 |
-
this.timers.hide = delay.call(
|
1532 |
-
this,
|
1533 |
-
function() {
|
1534 |
-
this.toggle( FALSE, event );
|
1535 |
-
},
|
1536 |
-
this.options.hide.delay,
|
1537 |
-
this
|
1538 |
-
);
|
1539 |
-
}
|
1540 |
-
|
1541 |
-
function inactiveMethod( event ) {
|
1542 |
-
if ( this.tooltip.hasClass( CLASS_DISABLED ) || !this.options.hide.inactive ) {
|
1543 |
-
return FALSE;
|
1544 |
-
}
|
1545 |
-
|
1546 |
-
// Clear timer
|
1547 |
-
clearTimeout( this.timers.inactive );
|
1548 |
-
|
1549 |
-
this.timers.inactive = delay.call(
|
1550 |
-
this,
|
1551 |
-
function() {
|
1552 |
-
this.hide( event );
|
1553 |
-
},
|
1554 |
-
this.options.hide.inactive
|
1555 |
-
);
|
1556 |
-
}
|
1557 |
-
|
1558 |
-
function repositionMethod( event ) {
|
1559 |
-
if ( this.rendered && this.tooltip[0].offsetWidth > 0 ) {
|
1560 |
-
this.reposition( event );
|
1561 |
-
}
|
1562 |
-
}
|
1563 |
-
|
1564 |
-
// Store mouse coordinates
|
1565 |
-
PROTOTYPE._storeMouse = function( event ) {
|
1566 |
-
(this.mouse = cloneEvent( event )).type = 'mousemove';
|
1567 |
-
};
|
1568 |
-
|
1569 |
-
// Bind events
|
1570 |
-
PROTOTYPE._bind = function( targets, events, method, suffix, context ) {
|
1571 |
-
var ns = '.' + this._id + (suffix ? '-' + suffix : '');
|
1572 |
-
events.length && $( targets ).bind(
|
1573 |
-
(events.split ? events : events.join( ns + ' ' )) + ns,
|
1574 |
-
$.proxy( method, context || this )
|
1575 |
-
);
|
1576 |
-
};
|
1577 |
-
PROTOTYPE._unbind = function( targets, suffix ) {
|
1578 |
-
$( targets ).unbind( '.' + this._id + (suffix ? '-' + suffix : '') );
|
1579 |
-
};
|
1580 |
-
|
1581 |
-
// Apply common event handlers using delegate (avoids excessive .bind calls!)
|
1582 |
-
var ns = '.' + NAMESPACE;
|
1583 |
-
|
1584 |
-
function delegate( selector, events, method ) {
|
1585 |
-
$( document.body ).delegate(
|
1586 |
-
selector,
|
1587 |
-
(events.split ? events : events.join( ns + ' ' )) + ns,
|
1588 |
-
function() {
|
1589 |
-
var api = QTIP.api[$.attr( this, ATTR_ID )];
|
1590 |
-
api && !api.disabled && method.apply( api, arguments );
|
1591 |
-
}
|
1592 |
-
);
|
1593 |
-
}
|
1594 |
-
|
1595 |
-
$(
|
1596 |
-
function() {
|
1597 |
-
delegate(
|
1598 |
-
SELECTOR, ['mouseenter', 'mouseleave'], function( event ) {
|
1599 |
-
var state = event.type === 'mouseenter',
|
1600 |
-
tooltip = $( event.currentTarget ),
|
1601 |
-
target = $( event.relatedTarget || event.target ),
|
1602 |
-
options = this.options;
|
1603 |
-
|
1604 |
-
// On mouseenter...
|
1605 |
-
if ( state ) {
|
1606 |
-
// Focus the tooltip on mouseenter (z-index stacking)
|
1607 |
-
this.focus( event );
|
1608 |
-
|
1609 |
-
// Clear hide timer on tooltip hover to prevent it from closing
|
1610 |
-
tooltip.hasClass( CLASS_FIXED ) && !tooltip.hasClass( CLASS_DISABLED ) && clearTimeout( this.timers.hide );
|
1611 |
-
}
|
1612 |
-
|
1613 |
-
// On mouseleave...
|
1614 |
-
else {
|
1615 |
-
// Hide when we leave the tooltip and not onto the show target (if a hide event is set)
|
1616 |
-
if ( options.position.target === 'mouse' && options.hide.event &&
|
1617 |
-
options.show.target && !target.closest( options.show.target[0] ).length ) {
|
1618 |
-
this.hide( event );
|
1619 |
-
}
|
1620 |
-
}
|
1621 |
-
|
1622 |
-
// Add hover class
|
1623 |
-
tooltip.toggleClass( CLASS_HOVER, state );
|
1624 |
-
}
|
1625 |
-
);
|
1626 |
-
|
1627 |
-
// Define events which reset the 'inactive' event handler
|
1628 |
-
delegate( '[' + ATTR_ID + ']', INACTIVE_EVENTS, inactiveMethod );
|
1629 |
-
}
|
1630 |
-
);
|
1631 |
-
|
1632 |
-
// Event trigger
|
1633 |
-
PROTOTYPE._trigger = function( type, args, event ) {
|
1634 |
-
var callback = $.Event( 'tooltip' + type );
|
1635 |
-
callback.originalEvent = (event && $.extend( {}, event )) || this.cache.event || NULL;
|
1636 |
-
|
1637 |
-
this.triggering = type;
|
1638 |
-
this.tooltip.trigger( callback, [this].concat( args || [] ) );
|
1639 |
-
this.triggering = FALSE;
|
1640 |
-
|
1641 |
-
return !callback.isDefaultPrevented();
|
1642 |
-
};
|
1643 |
-
|
1644 |
-
PROTOTYPE._bindEvents = function( showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod ) {
|
1645 |
-
// If hide and show targets are the same...
|
1646 |
-
if ( hideTarget.add( showTarget ).length === hideTarget.length ) {
|
1647 |
-
var toggleEvents = [];
|
1648 |
-
|
1649 |
-
// Filter identical show/hide events
|
1650 |
-
hideEvents = $.map(
|
1651 |
-
hideEvents, function( type ) {
|
1652 |
-
var showIndex = $.inArray( type, showEvents );
|
1653 |
-
|
1654 |
-
// Both events are identical, remove from both hide and show events
|
1655 |
-
// and append to toggleEvents
|
1656 |
-
if ( showIndex > -1 ) {
|
1657 |
-
toggleEvents.push( showEvents.splice( showIndex, 1 )[0] );
|
1658 |
-
return;
|
1659 |
-
}
|
1660 |
-
|
1661 |
-
return type;
|
1662 |
-
}
|
1663 |
-
);
|
1664 |
-
|
1665 |
-
// Toggle events are special case of identical show/hide events, which happen in sequence
|
1666 |
-
toggleEvents.length && this._bind(
|
1667 |
-
showTarget, toggleEvents, function( event ) {
|
1668 |
-
var state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false;
|
1669 |
-
(state ? hideMethod : showMethod).call( this, event );
|
1670 |
-
}
|
1671 |
-
);
|
1672 |
-
}
|
1673 |
-
|
1674 |
-
// Apply show/hide/toggle events
|
1675 |
-
this._bind( showTarget, showEvents, showMethod );
|
1676 |
-
this._bind( hideTarget, hideEvents, hideMethod );
|
1677 |
-
};
|
1678 |
-
|
1679 |
-
PROTOTYPE._assignInitialEvents = function( event ) {
|
1680 |
-
var options = this.options,
|
1681 |
-
showTarget = options.show.target,
|
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 |
-
* Also make sure initial mouse targetting works correctly by caching mousemove coords
|
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 |
-
// Define hoverIntent function
|
1707 |
-
function hoverIntent( event ) {
|
1708 |
-
// Only continue if tooltip isn't disabled
|
1709 |
-
if ( this.disabled || this.destroyed ) {
|
1710 |
-
return FALSE;
|
1711 |
-
}
|
1712 |
-
|
1713 |
-
// Cache the event data
|
1714 |
-
this.cache.event = cloneEvent( event );
|
1715 |
-
this.cache.target = event ? $( event.target ) : [undefined];
|
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 |
-
// Filter and bind events
|
1729 |
-
this._bindEvents(
|
1730 |
-
showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() {
|
1731 |
-
clearTimeout( this.timers.show );
|
1732 |
-
}
|
1733 |
-
);
|
1734 |
-
|
1735 |
-
// Prerendering is enabled, create tooltip now
|
1736 |
-
if ( options.show.ready || options.prerender ) {
|
1737 |
-
hoverIntent.call( this, event );
|
1738 |
-
}
|
1739 |
-
};
|
1740 |
-
|
1741 |
-
// Event assignment method
|
1742 |
-
PROTOTYPE._assignEvents = function() {
|
1743 |
-
var self = this,
|
1744 |
-
options = this.options,
|
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 |
-
// Hide tooltips when leaving current window/frame (but not select/option elements)
|
1771 |
-
if ( /mouse(out|leave)/i.test( options.hide.event ) && options.hide.leave === 'window' ) {
|
1772 |
-
this._bind(
|
1773 |
-
documentTarget, ['mouseout', 'blur'], function( event ) {
|
1774 |
-
if ( !/select|option/.test( event.target.nodeName ) && !event.relatedTarget ) {
|
1775 |
-
this.hide( event );
|
1776 |
-
}
|
1777 |
-
}
|
1778 |
-
);
|
1779 |
-
}
|
1780 |
-
|
1781 |
-
// Enable hide.fixed by adding appropriate class
|
1782 |
-
if ( options.hide.fixed ) {
|
1783 |
-
hideTarget = hideTarget.add( tooltip.addClass( CLASS_FIXED ) );
|
1784 |
-
}
|
1785 |
-
|
1786 |
-
/*
|
1787 |
-
* Make sure hoverIntent functions properly by using mouseleave to clear show timer if
|
1788 |
-
* mouseenter/mouseout is used for show.event, even if it isn't in the users options.
|
1789 |
-
*/
|
1790 |
-
else if ( /mouse(over|enter)/i.test( options.show.event ) ) {
|
1791 |
-
this._bind(
|
1792 |
-
hideTarget, 'mouseleave', function() {
|
1793 |
-
clearTimeout( this.timers.show );
|
1794 |
-
}
|
1795 |
-
);
|
1796 |
-
}
|
1797 |
-
|
1798 |
-
// Hide tooltip on document mousedown if unfocus events are enabled
|
1799 |
-
if ( ('' + options.hide.event).indexOf( 'unfocus' ) > -1 ) {
|
1800 |
-
this._bind(
|
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 |
-
// Check if the tooltip hides when inactive
|
1815 |
-
if ( 'number' === typeof options.hide.inactive ) {
|
1816 |
-
// Bind inactive method to show target(s) as a custom event
|
1817 |
-
this._bind( showTarget, 'qtip-' + this.id + '-inactive', inactiveMethod );
|
1818 |
-
|
1819 |
-
// Define events which reset the 'inactive' event handler
|
1820 |
-
this._bind( hideTarget.add( tooltip ), QTIP.inactiveEvents, inactiveMethod, '-inactive' );
|
1821 |
-
}
|
1822 |
-
|
1823 |
-
// Filter and bind events
|
1824 |
-
this._bindEvents( showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod );
|
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 |
-
// Cache mousemove coords on show targets
|
1842 |
-
this._storeMouse( event );
|
1843 |
-
}
|
1844 |
-
);
|
1845 |
-
|
1846 |
-
// Mouse positioning events
|
1847 |
-
if ( posOptions.target === 'mouse' ) {
|
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 |
-
// Update tooltip position on mousemove
|
1861 |
-
this._bind(
|
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 |
-
// Adjust positions of the tooltip on window resize if enabled
|
1873 |
-
if ( posOptions.adjust.resize || viewportTarget.length ) {
|
1874 |
-
this._bind(
|
1875 |
-
$.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod
|
1876 |
-
);
|
1877 |
-
}
|
1878 |
-
|
1879 |
-
// Adjust tooltip position on scroll of the window or viewport element if present
|
1880 |
-
if ( posOptions.adjust.scroll ) {
|
1881 |
-
this._bind( windowTarget.add( posOptions.container ), 'scroll', repositionMethod );
|
1882 |
-
}
|
1883 |
-
};
|
1884 |
-
|
1885 |
-
// Un-assignment method
|
1886 |
-
PROTOTYPE._unassignEvents = function() {
|
1887 |
-
var targets = [
|
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 |
-
this._unbind(
|
1899 |
-
$( [] ).pushStack(
|
1900 |
-
$.grep(
|
1901 |
-
targets, function( i ) {
|
1902 |
-
return typeof i === 'object';
|
1903 |
-
}
|
1904 |
-
)
|
1905 |
-
)
|
1906 |
-
);
|
1907 |
-
};
|
1908 |
-
|
1909 |
-
;// Initialization method
|
1910 |
-
function init( elem, id, opts ) {
|
1911 |
-
var obj, posOptions, attr, config, title,
|
1912 |
-
|
1913 |
-
// Setup element references
|
1914 |
-
docBody = $( document.body ),
|
1915 |
-
|
1916 |
-
// Use document body instead of document element if needed
|
1917 |
-
newTarget = elem[0] === document ? docBody : elem,
|
1918 |
-
|
1919 |
-
// Grab metadata from element if plugin is present
|
1920 |
-
metadata = (elem.metadata) ? elem.metadata( opts.metadata ) : NULL,
|
1921 |
-
|
1922 |
-
// If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise
|
1923 |
-
metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL,
|
1924 |
-
|
1925 |
-
// Grab data from metadata.name (or data-qtipopts as fallback) using .data() method,
|
1926 |
-
html5 = elem.data( opts.metadata.name || 'qtipopts' );
|
1927 |
-
|
1928 |
-
// If we don't get an object returned attempt to parse it manualyl without parseJSON
|
1929 |
-
try {
|
1930 |
-
html5 = typeof html5 === 'string' ? $.parseJSON( html5 ) : html5;
|
1931 |
-
} catch ( e ) {
|
1932 |
-
}
|
1933 |
-
|
1934 |
-
// Merge in and sanitize metadata
|
1935 |
-
config = $.extend(
|
1936 |
-
TRUE, {}, QTIP.defaults, opts,
|
1937 |
-
typeof html5 === 'object' ? sanitizeOptions( html5 ) : NULL,
|
1938 |
-
sanitizeOptions( metadata5 || metadata )
|
1939 |
-
);
|
1940 |
-
|
1941 |
-
// Re-grab our positioning options now we've merged our metadata and set id to passed value
|
1942 |
-
posOptions = config.position;
|
1943 |
-
config.id = id;
|
1944 |
-
|
1945 |
-
// Setup missing content if none is detected
|
1946 |
-
if ( 'boolean' === typeof config.content.text ) {
|
1947 |
-
attr = elem.attr( config.content.attr );
|
1948 |
-
|
1949 |
-
// Grab from supplied attribute if available
|
1950 |
-
if ( config.content.attr !== FALSE && attr ) {
|
1951 |
-
config.content.text = attr;
|
1952 |
-
}
|
1953 |
-
|
1954 |
-
// No valid content was found, abort render
|
1955 |
-
else {
|
1956 |
-
return FALSE;
|
1957 |
-
}
|
1958 |
-
}
|
1959 |
-
|
1960 |
-
// Setup target options
|
1961 |
-
if ( !posOptions.container.length ) {
|
1962 |
-
posOptions.container = docBody;
|
1963 |
-
}
|
1964 |
-
if ( posOptions.target === FALSE ) {
|
1965 |
-
posOptions.target = newTarget;
|
1966 |
-
}
|
1967 |
-
if ( config.show.target === FALSE ) {
|
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 |
-
// Convert position corner values into x and y strings
|
1984 |
-
posOptions.at = new CORNER( posOptions.at, TRUE );
|
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 |
-
// jQuery $.fn extension method
|
2024 |
-
QTIP = $.fn.qtip = function( options, notation, newValue ) {
|
2025 |
-
var command = ('' + options).toLowerCase(), // Parse command
|
2026 |
-
returned = NULL,
|
2027 |
-
args = $.makeArray( arguments ).slice( 1 ),
|
2028 |
-
event = args[args.length - 1],
|
2029 |
-
opts = this[0] ? $.data( this[0], NAMESPACE ) : NULL;
|
2030 |
-
|
2031 |
-
// Check for API request
|
2032 |
-
if ( (!arguments.length && opts) || command === 'api' ) {
|
2033 |
-
return opts;
|
2034 |
-
}
|
2035 |
-
|
2036 |
-
// Execute API command if present
|
2037 |
-
else if ( 'string' === typeof options ) {
|
2038 |
-
this.each(
|
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 |
-
// No API commands. validate provided options and setup qTips
|
2072 |
-
else if ( 'object' === typeof options || !arguments.length ) {
|
2073 |
-
// Sanitize options first
|
2074 |
-
opts = sanitizeOptions( $.extend( TRUE, {}, options ) );
|
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 |
-
// Expose class
|
2110 |
-
$.qtip = QTip;
|
2111 |
-
|
2112 |
-
// Populated in render method
|
2113 |
-
QTIP.api = {};
|
2114 |
-
;
|
2115 |
-
$.each(
|
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 |
-
return $.fn['attr' + replaceSuffix].apply( this, arguments );
|
2140 |
-
},
|
2141 |
-
|
2142 |
-
/* Allow clone to correctly retrieve cached title attributes */
|
2143 |
-
clone: function( keepData ) {
|
2144 |
-
var titles = $( [] ), title = 'title',
|
2145 |
-
|
2146 |
-
// Clone our element using the real clone method
|
2147 |
-
elems = $.fn['clone' + replaceSuffix].apply( this, arguments );
|
2148 |
-
|
2149 |
-
// Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false
|
2150 |
-
if ( !keepData ) {
|
2151 |
-
elems.filter( '[' + oldtitle + ']' ).attr(
|
2152 |
-
'title', function() {
|
2153 |
-
return $.attr( this, oldtitle );
|
2154 |
-
}
|
2155 |
-
)
|
2156 |
-
.removeAttr( oldtitle );
|
2157 |
-
}
|
2158 |
-
|
2159 |
-
return elems;
|
2160 |
-
}
|
2161 |
-
}, function( name, func ) {
|
2162 |
-
if ( !func || $.fn[name + replaceSuffix] ) {
|
2163 |
-
return TRUE;
|
2164 |
-
}
|
2165 |
-
|
2166 |
-
var old = $.fn[name + replaceSuffix] = $.fn[name];
|
2167 |
-
$.fn[name] = function() {
|
2168 |
-
return func.apply( this, arguments ) || old.apply( this, arguments );
|
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 |
-
// Define configuration defaults
|
2206 |
-
QTIP.defaults = {
|
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 |
-
* Modified from Modernizr's testPropsAll()
|
2306 |
-
* http://modernizr.com/downloads/modernizr-latest.js
|
2307 |
-
*/
|
2308 |
-
var cssProps = {}, cssPrefixes = ["Webkit", "O", "Moz", "ms"];
|
2309 |
-
|
2310 |
-
function vendorCss( elem, prop ) {
|
2311 |
-
var ucProp = prop.charAt( 0 ).toUpperCase() + prop.slice( 1 ),
|
2312 |
-
props = (prop + ' ' + cssPrefixes.join( ucProp + ' ' ) + ucProp).split( ' ' ),
|
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 |
-
while ( (cur = props[i++]) ) {
|
2321 |
-
if ( (val = elem.css( cur )) !== undefined ) {
|
2322 |
-
return cssProps[prop] = cur, val;
|
2323 |
-
}
|
2324 |
-
}
|
2325 |
-
}
|
2326 |
-
|
2327 |
-
// Parse a given elements CSS property into an int
|
2328 |
-
function intCss( elem, prop ) {
|
2329 |
-
return Math.ceil( parseFloat( vendorCss( elem, prop ) ) );
|
2330 |
-
}
|
2331 |
-
|
2332 |
-
|
2333 |
-
// VML creation (for IE only)
|
2334 |
-
if ( !HASCANVAS ) {
|
2335 |
-
var createVML = function( tag, props, style ) {
|
2336 |
-
return '<qtipvml:' + tag + ' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" ' + (props || '') +
|
2337 |
-
' style="behavior: url(#default#VML); ' + (style || '') + '" />';
|
2338 |
-
};
|
2339 |
-
}
|
2340 |
-
|
2341 |
-
// Canvas only definitions
|
2342 |
-
else {
|
2343 |
-
var PIXEL_RATIO = window.devicePixelRatio || 1,
|
2344 |
-
BACKING_STORE_RATIO = (function() {
|
2345 |
-
var context = document.createElement( 'canvas' ).getContext( '2d' );
|
2346 |
-
return context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio ||
|
2347 |
-
context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1;
|
2348 |
-
}()),
|
2349 |
-
SCALE = PIXEL_RATIO / BACKING_STORE_RATIO;
|
2350 |
-
}
|
2351 |
-
|
2352 |
-
|
2353 |
-
function Tip( qtip, options ) {
|
2354 |
-
this._ns = 'tip';
|
2355 |
-
this.options = options;
|
2356 |
-
this.offset = options.offset;
|
2357 |
-
this.size = [options.width, options.height];
|
2358 |
-
|
2359 |
-
// Initialize
|
2360 |
-
this.init( (this.qtip = qtip) );
|
2361 |
-
}
|
2362 |
-
|
2363 |
-
$.extend(
|
2364 |
-
Tip.prototype, {
|
2365 |
-
init: function( qtip ) {
|
2366 |
-
var context, tip;
|
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 |
-
_swapDimensions: function() {
|
2403 |
-
this.size[0] = this.options.height;
|
2404 |
-
this.size[1] = this.options.width;
|
2405 |
-
},
|
2406 |
-
_resetDimensions: function() {
|
2407 |
-
this.size[0] = this.options.width;
|
2408 |
-
this.size[1] = this.options.height;
|
2409 |
-
},
|
2410 |
-
|
2411 |
-
_useTitle: function( corner ) {
|
2412 |
-
var titlebar = this.qtip.elements.titlebar;
|
2413 |
-
return titlebar && (
|
2414 |
-
corner.y === TOP || (corner.y === CENTER && this.element.position().top + (this.size[1] / 2) + this.options.offset < titlebar.outerHeight( TRUE ))
|
2415 |
-
);
|
2416 |
-
},
|
2417 |
-
|
2418 |
-
_parseCorner: function( corner ) {
|
2419 |
-
var my = this.qtip.options.position.my;
|
2420 |
-
|
2421 |
-
// Detect corner and mimic properties
|
2422 |
-
if ( corner === FALSE || my === FALSE ) {
|
2423 |
-
corner = FALSE;
|
2424 |
-
}
|
2425 |
-
else if ( corner === TRUE ) {
|
2426 |
-
corner = new CORNER( my.string() );
|
2427 |
-
}
|
2428 |
-
else if ( !corner.string ) {
|
2429 |
-
corner = new CORNER( corner );
|
2430 |
-
corner.fixed = TRUE;
|
2431 |
-
}
|
2432 |
-
|
2433 |
-
return corner;
|
2434 |
-
},
|
2435 |
-
|
2436 |
-
_parseWidth: function( corner, side, use ) {
|
2437 |
-
var elements = this.qtip.elements,
|
2438 |
-
prop = BORDER + camel( side ) + 'Width';
|
2439 |
-
|
2440 |
-
return (use ? intCss( use, prop ) : (
|
2441 |
-
intCss( elements.content, prop ) ||
|
2442 |
-
intCss( this._useTitle( corner ) && elements.titlebar || elements.content, prop ) ||
|
2443 |
-
intCss( elements.tooltip, prop )
|
2444 |
-
)) || 0;
|
2445 |
-
},
|
2446 |
-
|
2447 |
-
_parseRadius: function( corner ) {
|
2448 |
-
var elements = this.qtip.elements,
|
2449 |
-
prop = BORDER + camel( corner.y ) + camel( corner.x ) + 'Radius';
|
2450 |
-
|
2451 |
-
return BROWSER.ie < 9 ? 0 :
|
2452 |
-
intCss( this._useTitle( corner ) && elements.titlebar || elements.content, prop ) ||
|
2453 |
-
intCss( elements.tooltip, prop ) || 0;
|
2454 |
-
},
|
2455 |
-
|
2456 |
-
_invalidColour: function( elem, prop, compare ) {
|
2457 |
-
var val = elem.css( prop );
|
2458 |
-
return !val || (compare && val === elem.css( compare )) || INVALID.test( val ) ? FALSE : val;
|
2459 |
-
},
|
2460 |
-
|
2461 |
-
_parseColours: function( corner ) {
|
2462 |
-
var elements = this.qtip.elements,
|
2463 |
-
tip = this.element.css( 'cssText', '' ),
|
2464 |
-
borderSide = BORDER + camel( corner[corner.precedance] ) + camel( COLOR ),
|
2465 |
-
colorElem = this._useTitle( corner ) && elements.titlebar || elements.content,
|
2466 |
-
css = this._invalidColour, color = [];
|
2467 |
-
|
2468 |
-
// Attempt to detect the background colour from various elements, left-to-right precedance
|
2469 |
-
color[0] = css( tip, BG_COLOR ) || css( colorElem, BG_COLOR ) || css(
|
2470 |
-
elements.content, BG_COLOR
|
2471 |
-
) ||
|
2472 |
-
css( elements.tooltip, BG_COLOR ) || tip.css( BG_COLOR );
|
2473 |
-
|
2474 |
-
// Attempt to detect the correct border side colour from various elements, left-to-right precedance
|
2475 |
-
color[1] = css( tip, borderSide, COLOR ) || css( colorElem, borderSide, COLOR ) ||
|
2476 |
-
css( elements.content, borderSide, COLOR ) || css(
|
2477 |
-
elements.tooltip, borderSide, COLOR
|
2478 |
-
) || elements.tooltip.css( borderSide );
|
2479 |
-
|
2480 |
-
// Reset background and border colours
|
2481 |
-
$( '*', tip ).add( tip ).css(
|
2482 |
-
'cssText',
|
2483 |
-
BG_COLOR + ':' + TRANSPARENT + IMPORTANT + ';' + BORDER + ':0' + IMPORTANT + ';'
|
2484 |
-
);
|
2485 |
-
|
2486 |
-
return color;
|
2487 |
-
},
|
2488 |
-
|
2489 |
-
_calculateSize: function( corner ) {
|
2490 |
-
var y = corner.precedance === Y,
|
2491 |
-
width = this.options['width'],
|
2492 |
-
height = this.options['height'],
|
2493 |
-
isCenter = corner.abbrev() === 'c',
|
2494 |
-
base = (y ? width : height) * (isCenter ? 0.5 : 1),
|
2495 |
-
pow = Math.pow,
|
2496 |
-
round = Math.round,
|
2497 |
-
bigHyp, ratio, result,
|
2498 |
-
|
2499 |
-
smallHyp = Math.sqrt( pow( base, 2 ) + pow( height, 2 ) ),
|
2500 |
-
hyp = [(this.border / base) * smallHyp, (this.border / height) * smallHyp];
|
2501 |
-
|
2502 |
-
hyp[2] = Math.sqrt( pow( hyp[0], 2 ) - pow( this.border, 2 ) );
|
2503 |
-
hyp[3] = Math.sqrt( pow( hyp[1], 2 ) - pow( this.border, 2 ) );
|
2504 |
-
|
2505 |
-
bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]);
|
2506 |
-
ratio = bigHyp / smallHyp;
|
2507 |
-
|
2508 |
-
result = [round( ratio * width ), round( ratio * height )];
|
2509 |
-
return y ? result : result.reverse();
|
2510 |
-
},
|
2511 |
-
|
2512 |
-
// Tip coordinates calculator
|
2513 |
-
_calculateTip: function( corner, size, scale ) {
|
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 |
-
// Tip coordinates drawer (canvas)
|
2543 |
-
_drawCoords: function( context, coords ) {
|
2544 |
-
context.beginPath();
|
2545 |
-
context.moveTo( coords[0], coords[1] );
|
2546 |
-
context.lineTo( coords[2], coords[3] );
|
2547 |
-
context.lineTo( coords[4], coords[5] );
|
2548 |
-
context.closePath();
|
2549 |
-
},
|
2550 |
-
|
2551 |
-
create: function() {
|
2552 |
-
// Determine tip corner
|
2553 |
-
var c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner( this.options.corner );
|
2554 |
-
|
2555 |
-
// If we have a tip corner...
|
2556 |
-
if ( (this.enabled = !!this.corner && this.corner.abbrev() !== 'c') ) {
|
2557 |
-
// Cache it
|
2558 |
-
this.qtip.cache.corner = c.clone();
|
2559 |
-
|
2560 |
-
// Create it
|
2561 |
-
this.update();
|
2562 |
-
}
|
2563 |
-
|
2564 |
-
// Toggle tip element
|
2565 |
-
this.element.toggle( this.enabled );
|
2566 |
-
|
2567 |
-
return this.corner;
|
2568 |
-
},
|
2569 |
-
|
2570 |
-
update: function( corner, position ) {
|
2571 |
-
if ( !this.enabled ) {
|
2572 |
-
return this;
|
2573 |
-
}
|
2574 |
-
|
2575 |
-
var elements = this.qtip.elements,
|
2576 |
-
tip = this.element,
|
2577 |
-
inner = tip.children(),
|
2578 |
-
options = this.options,
|
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 |
-
// Use corner property if we detect an invalid mimic value
|
2591 |
-
if ( mimic === FALSE ) {
|
2592 |
-
mimic = corner;
|
2593 |
-
}
|
2594 |
-
|
2595 |
-
// Otherwise inherit mimic properties from the corner object as necessary
|
2596 |
-
else {
|
2597 |
-
mimic = new CORNER( mimic );
|
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 |
-
// Ensure the tip width.height are relative to the tip position
|
2613 |
-
if ( corner.precedance === X ) {
|
2614 |
-
this._swapDimensions();
|
2615 |
-
}
|
2616 |
-
else {
|
2617 |
-
this._resetDimensions();
|
2618 |
-
}
|
2619 |
-
|
2620 |
-
// Update our colours
|
2621 |
-
color = this.color = this._parseColours( corner );
|
2622 |
-
|
2623 |
-
// Detect border width, taking into account colours
|
2624 |
-
if ( color[1] !== TRANSPARENT ) {
|
2625 |
-
// Grab border width
|
2626 |
-
border = this.border = this._parseWidth( corner, corner[corner.precedance] );
|
2627 |
-
|
2628 |
-
// If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips)
|
2629 |
-
if ( options.border && border < 1 && !INVALID.test( color[1] ) ) {
|
2630 |
-
color[0] = color[1];
|
2631 |
-
}
|
2632 |
-
|
2633 |
-
// Set border width (use detected border width if options.border is true)
|
2634 |
-
this.border = border = options.border !== TRUE ? options.border : border;
|
2635 |
-
}
|
2636 |
-
|
2637 |
-
// Border colour was invalid, set border to zero
|
2638 |
-
else {
|
2639 |
-
this.border = border = 0;
|
2640 |
-
}
|
2641 |
-
|
2642 |
-
// Determine tip size
|
2643 |
-
newSize = this.size = this._calculateSize( corner );
|
2644 |
-
tip.css(
|
2645 |
-
{
|
2646 |
-
width: newSize[0],
|
2647 |
-
height: newSize[1],
|
2648 |
-
lineHeight: newSize[1] + 'px'
|
2649 |
-
}
|
2650 |
-
);
|
2651 |
-
|
2652 |
-
// Calculate tip translation
|
2653 |
-
if ( corner.precedance === Y ) {
|
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 |
-
// Canvas drawing implementation
|
2667 |
-
if ( HASCANVAS ) {
|
2668 |
-
// Grab canvas context and clear/save it
|
2669 |
-
context = inner[0].getContext( '2d' );
|
2670 |
-
context.restore();
|
2671 |
-
context.save();
|
2672 |
-
context.clearRect( 0, 0, 6000, 6000 );
|
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 |
-
// VML (IE Proprietary implementation)
|
2695 |
-
else {
|
2696 |
-
// Calculate coordinates
|
2697 |
-
coords = this._calculateTip( mimic );
|
2698 |
-
|
2699 |
-
// Setup coordinates string
|
2700 |
-
coords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] +
|
2701 |
-
',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe';
|
2702 |
-
|
2703 |
-
// Setup VML-specific offset for pixel-perfection
|
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 |
-
// Opera bug #357 - Incorrect tip position
|
2746 |
-
// https://github.com/Craga89/qTip2/issues/367
|
2747 |
-
window.opera && setTimeout(
|
2748 |
-
function() {
|
2749 |
-
elements.tip.css(
|
2750 |
-
{
|
2751 |
-
display: 'inline-block',
|
2752 |
-
visibility: 'visible'
|
2753 |
-
}
|
2754 |
-
);
|
2755 |
-
}, 1
|
2756 |
-
);
|
2757 |
-
|
2758 |
-
// Position if needed
|
2759 |
-
if ( position !== FALSE ) {
|
2760 |
-
this.calculate( corner, newSize );
|
2761 |
-
}
|
2762 |
-
},
|
2763 |
-
|
2764 |
-
calculate: function( corner, size ) {
|
2765 |
-
if ( !this.enabled ) {
|
2766 |
-
return FALSE;
|
2767 |
-
}
|
2768 |
-
|
2769 |
-
var self = this,
|
2770 |
-
elements = this.qtip.elements,
|
2771 |
-
tip = this.element,
|
2772 |
-
userOffset = this.options.offset,
|
2773 |
-
isWidget = elements.tooltip.hasClass( 'ui-widget' ),
|
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 |
-
// Calculate tip position
|
2791 |
-
$.each(
|
2792 |
-
corners, function( i, side ) {
|
2793 |
-
var b, bc, br;
|
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 |
-
// Adjust for tip size
|
2813 |
-
position[corner[precedance]] -= size[precedance === X ? 0 : 1];
|
2814 |
-
|
2815 |
-
// Set and return new position
|
2816 |
-
tip.css( {margin: '', top: '', bottom: '', left: '', right: ''} ).css( position );
|
2817 |
-
return position;
|
2818 |
-
},
|
2819 |
-
|
2820 |
-
reposition: function( event, api, pos, viewport ) {
|
2821 |
-
if ( !this.enabled ) {
|
2822 |
-
return;
|
2823 |
-
}
|
2824 |
-
|
2825 |
-
var cache = api.cache,
|
2826 |
-
newCorner = this.corner.clone(),
|
2827 |
-
adjust = pos.adjusted,
|
2828 |
-
method = api.options.position.adjust.method.split( ' ' ),
|
2829 |
-
horizontal = method[0],
|
2830 |
-
vertical = method[1] || method[0],
|
2831 |
-
shift = {left: FALSE, top: FALSE, x: 0, y: 0},
|
2832 |
-
offset, css = {}, props;
|
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 |
-
function shiftonly( xy, side, opposite ) {
|
2846 |
-
if ( newCorner[xy] === CENTER ) {
|
2847 |
-
css[MARGIN + '-' + side] = shift[xy] = offset[MARGIN + '-' + side] - adjust[side];
|
2848 |
-
}
|
2849 |
-
else {
|
2850 |
-
props = offset[opposite] !== undefined ?
|
2851 |
-
[adjust[side], -offset[side]] : [-adjust[side], offset[side]];
|
2852 |
-
|
2853 |
-
if ( (shift[xy] = Math.max( props[0], props[1] )) > props[0] ) {
|
2854 |
-
pos[side] -= adjust[side];
|
2855 |
-
shift[side] = FALSE;
|
2856 |
-
}
|
2857 |
-
|
2858 |
-
css[offset[opposite] !== undefined ? opposite : side] = shift[xy];
|
2859 |
-
}
|
2860 |
-
}
|
2861 |
-
|
2862 |
-
// If our tip position isn't fixed e.g. doesn't adjust with viewport...
|
2863 |
-
if ( this.corner.fixed !== TRUE ) {
|
2864 |
-
// Perform shift/flip adjustments
|
2865 |
-
shiftflip( horizontal, X, Y, LEFT, RIGHT );
|
2866 |
-
shiftflip( vertical, Y, X, TOP, BOTTOM );
|
2867 |
-
|
2868 |
-
// Update and redraw the tip if needed (check cached details of last drawn tip)
|
2869 |
-
if ( newCorner.string() !== cache.corner.string() && (cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) ) {
|
2870 |
-
this.update( newCorner, FALSE );
|
2871 |
-
}
|
2872 |
-
}
|
2873 |
-
|
2874 |
-
// Setup tip offset properties
|
2875 |
-
offset = this.calculate( newCorner );
|
2876 |
-
|
2877 |
-
// Readjust offset object to make it left/top
|
2878 |
-
if ( offset.right !== undefined ) {
|
2879 |
-
offset.left = -offset.right;
|
2880 |
-
}
|
2881 |
-
if ( offset.bottom !== undefined ) {
|
2882 |
-
offset.top = -offset.bottom;
|
2883 |
-
}
|
2884 |
-
offset.user = this.offset;
|
2885 |
-
|
2886 |
-
// Perform shift adjustments
|
2887 |
-
if ( shift.left = (horizontal === SHIFT && !!adjust.left) ) {
|
2888 |
-
shiftonly( X, LEFT, RIGHT );
|
2889 |
-
}
|
2890 |
-
if ( shift.top = (vertical === SHIFT && !!adjust.top) ) {
|
2891 |
-
shiftonly( Y, TOP, BOTTOM );
|
2892 |
-
}
|
2893 |
-
|
2894 |
-
/*
|
2895 |
-
* If the tip is adjusted in both dimensions, or in a
|
2896 |
-
* direction that would cause it to be anywhere but the
|
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 |
-
// Adjust position to accomodate tip dimensions
|
2904 |
-
pos.left -= offset.left.charAt ? offset.user :
|
2905 |
-
horizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0;
|
2906 |
-
pos.top -= offset.top.charAt ? offset.user :
|
2907 |
-
vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0;
|
2908 |
-
|
2909 |
-
// Cache details
|
2910 |
-
cache.cornerLeft = adjust.left;
|
2911 |
-
cache.cornerTop = adjust.top;
|
2912 |
-
cache.corner = newCorner.clone();
|
2913 |
-
},
|
2914 |
-
|
2915 |
-
destroy: function() {
|
2916 |
-
// Unbind events
|
2917 |
-
this.qtip._unbind( this.qtip.tooltip, this._ns );
|
2918 |
-
|
2919 |
-
// Remove the tip element(s)
|
2920 |
-
if ( this.qtip.elements.tip ) {
|
2921 |
-
this.qtip.elements.tip.find( '*' )
|
2922 |
-
.remove().end().remove();
|
2923 |
-
}
|
2924 |
-
}
|
2925 |
-
}
|
2926 |
-
);
|
2927 |
-
|
2928 |
-
TIP = PLUGINS.tip = function( api ) {
|
2929 |
-
return new Tip( api, api.options.style.tip );
|
2930 |
-
};
|
2931 |
-
|
2932 |
-
// Initialize tip on render
|
2933 |
-
TIP.initialize = 'render';
|
2934 |
-
|
2935 |
-
// Setup plugin sanitization options
|
2936 |
-
TIP.sanitize = function( options ) {
|
2937 |
-
if ( options.style && 'tip' in options.style ) {
|
2938 |
-
var opts = options.style.tip;
|
2939 |
-
if ( typeof opts !== 'object' ) {
|
2940 |
-
opts = options.style.tip = {corner: opts};
|
2941 |
-
}
|
2942 |
-
if ( !(/string|boolean/i).test( typeof opts.corner ) ) {
|
2943 |
-
opts.corner = TRUE;
|
2944 |
-
}
|
2945 |
-
}
|
2946 |
-
};
|
2947 |
-
|
2948 |
-
// Add new option checks for the plugin
|
2949 |
-
CHECKS.tip = {
|
2950 |
-
'^position.my|style.tip.(corner|mimic|border)$': function() {
|
2951 |
-
// Make sure a tip can be drawn
|
2952 |
-
this.create();
|
2953 |
-
|
2954 |
-
// Reposition the tooltip
|
2955 |
-
this.qtip.reposition();
|
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 |
-
// Reposition the tooltip
|
2963 |
-
this.qtip.reposition();
|
2964 |
-
},
|
2965 |
-
'^content.title|style.(classes|widget)$': function() {
|
2966 |
-
this.update();
|
2967 |
-
}
|
2968 |
-
};
|
2969 |
-
|
2970 |
-
// Extend original qTip defaults
|
2971 |
-
$.extend(
|
2972 |
-
TRUE, QTIP.defaults, {
|
2973 |
-
style: {
|
2974 |
-
tip: {
|
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 |
-
var MODAL, OVERLAY,
|
2988 |
-
MODALCLASS = 'qtip-modal',
|
2989 |
-
MODALSELECTOR = '.' + MODALCLASS;
|
2990 |
-
|
2991 |
-
OVERLAY = function() {
|
2992 |
-
var self = this,
|
2993 |
-
focusableElems = {},
|
2994 |
-
current, onLast,
|
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 |
-
var isTabIndexNotNaN = !isNaN( $.attr( element, 'tabindex' ) ),
|
3006 |
-
nodeName = element.nodeName && element.nodeName.toLowerCase(),
|
3007 |
-
map, mapName, img;
|
3008 |
-
|
3009 |
-
if ( 'area' === nodeName ) {
|
3010 |
-
map = element.parentNode;
|
3011 |
-
mapName = map.name;
|
3012 |
-
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== 'map' ) {
|
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 |
-
// Focus inputs using cached focusable elements (see update())
|
3027 |
-
function focusInputs( blurElems ) {
|
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 |
-
// Focus the inputs
|
3034 |
-
else {
|
3035 |
-
focusableElems.first().focus();
|
3036 |
-
}
|
3037 |
-
}
|
3038 |
-
|
3039 |
-
// Steal focus from elements outside tooltip
|
3040 |
-
function stealFocus( event ) {
|
3041 |
-
if ( !elem.is( ':visible' ) ) {
|
3042 |
-
return;
|
3043 |
-
}
|
3044 |
-
|
3045 |
-
var target = $( event.target ),
|
3046 |
-
tooltip = current.tooltip,
|
3047 |
-
container = target.closest( SELECTOR ),
|
3048 |
-
targetOnTop;
|
3049 |
-
|
3050 |
-
// Determine if input container target is above this
|
3051 |
-
targetOnTop = container.length < 1 ? FALSE :
|
3052 |
-
(parseInt( container[0].style.zIndex, 10 ) > parseInt( tooltip[0].style.zIndex, 10 ));
|
3053 |
-
|
3054 |
-
// If we're showing a modal, but focus has landed on an input below
|
3055 |
-
// this modal, divert focus to the first visible input in this modal
|
3056 |
-
// or if we can't find one... the tooltip itself
|
3057 |
-
if ( !targetOnTop && target.closest( SELECTOR )[0] !== tooltip[0] ) {
|
3058 |
-
focusInputs( target );
|
3059 |
-
}
|
3060 |
-
|
3061 |
-
// Detect when we leave the last focusable element...
|
3062 |
-
onLast = event.target === focusableElems[focusableElems.length - 1];
|
3063 |
-
}
|
3064 |
-
|
3065 |
-
$.extend(
|
3066 |
-
self, {
|
3067 |
-
init: function() {
|
3068 |
-
// Create document overlay
|
3069 |
-
elem = self.elem = $(
|
3070 |
-
'<div />', {
|
3071 |
-
id: 'qtip-overlay',
|
3072 |
-
html: '<div></div>',
|
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 |
-
self.init();
|
3204 |
-
};
|
3205 |
-
OVERLAY = new OVERLAY();
|
3206 |
-
|
3207 |
-
function Modal( api, options ) {
|
3208 |
-
this.options = options;
|
3209 |
-
this._ns = '-modal';
|
3210 |
-
|
3211 |
-
this.init( (this.qtip = api) );
|
3212 |
-
}
|
3213 |
-
|
3214 |
-
$.extend(
|
3215 |
-
Modal.prototype, {
|
3216 |
-
init: function( qtip ) {
|
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 |
-
// Apply our show/hide/focus modal events
|
3233 |
-
qtip._bind(
|
3234 |
-
tooltip, ['tooltipshow', 'tooltiphide'], function( event, api, duration ) {
|
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 |
-
// Adjust modal z-index on tooltip focus
|
3253 |
-
qtip._bind(
|
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 |
-
// Focus any other visible modals when this one hides
|
3296 |
-
qtip._bind(
|
3297 |
-
tooltip, 'tooltiphide', function( event ) {
|
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 |
-
toggle: function( event, state, duration ) {
|
3308 |
-
// Make sure default event hasn't been prevented
|
3309 |
-
if ( event && event.isDefaultPrevented() ) {
|
3310 |
-
return this;
|
3311 |
-
}
|
3312 |
-
|
3313 |
-
// Toggle it
|
3314 |
-
OVERLAY.toggle( this.qtip, !!state, duration );
|
3315 |
-
},
|
3316 |
-
|
3317 |
-
destroy: function() {
|
3318 |
-
// Remove modal class
|
3319 |
-
this.qtip.tooltip.removeClass( MODALCLASS );
|
3320 |
-
|
3321 |
-
// Remove bound events
|
3322 |
-
this.qtip._unbind( this.qtip.tooltip, this._ns );
|
3323 |
-
|
3324 |
-
// Delete element reference
|
3325 |
-
OVERLAY.toggle( this.qtip, FALSE );
|
3326 |
-
delete this.qtip.elements.overlay;
|
3327 |
-
}
|
3328 |
-
}
|
3329 |
-
);
|
3330 |
-
|
3331 |
-
|
3332 |
-
MODAL = PLUGINS.modal = function( api ) {
|
3333 |
-
return new Modal( api, api.options.show.modal );
|
3334 |
-
};
|
3335 |
-
|
3336 |
-
// Setup sanitiztion rules
|
3337 |
-
MODAL.sanitize = function( opts ) {
|
3338 |
-
if ( opts.show ) {
|
3339 |
-
if ( typeof opts.show.modal !== 'object' ) {
|
3340 |
-
opts.show.modal = {on: !!opts.show.modal};
|
3341 |
-
}
|
3342 |
-
else if ( typeof opts.show.modal.on === 'undefined' ) {
|
3343 |
-
opts.show.modal.on = TRUE;
|
3344 |
-
}
|
3345 |
-
}
|
3346 |
-
};
|
3347 |
-
|
3348 |
-
// Base z-index for all modal tooltips (use qTip core z-index as a base)
|
3349 |
-
QTIP.modal_zindex = QTIP.zindex - 200;
|
3350 |
-
|
3351 |
-
// Plugin needs to be initialized on render
|
3352 |
-
MODAL.initialize = 'render';
|
3353 |
-
|
3354 |
-
// Setup option set checks
|
3355 |
-
CHECKS.modal = {
|
3356 |
-
'^show.modal.(on|blur)$': function() {
|
3357 |
-
// Initialise
|
3358 |
-
this.destroy();
|
3359 |
-
this.init();
|
3360 |
-
|
3361 |
-
// Show the modal if not visible already and tooltip is visible
|
3362 |
-
this.qtip.elems.overlay.toggle(
|
3363 |
-
this.qtip.tooltip[0].offsetWidth > 0
|
3364 |
-
);
|
3365 |
-
}
|
3366 |
-
};
|
3367 |
-
|
3368 |
-
// Extend original api defaults
|
3369 |
-
$.extend(
|
3370 |
-
TRUE, QTIP.defaults, {
|
3371 |
-
show: {
|
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 |
-
// Cach container details
|
3405 |
-
containerOffset = container.offset() || adjusted;
|
3406 |
-
containerStatic = container.css( 'position' ) === 'static';
|
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 |
-
// flip/flipinvert
|
3452 |
-
else {
|
3453 |
-
// Update adjustment amount depending on if using flipinvert or flip
|
3454 |
-
adjust *= (type === FLIPINVERT ? 2 : 0);
|
3455 |
-
|
3456 |
-
// Check for overflow on the left/top
|
3457 |
-
if ( overflow1 > 0 && (mySide !== side1 || overflow2 > 0) ) {
|
3458 |
-
position[side1] -= offset + adjust;
|
3459 |
-
newMy.invert( side, side1 );
|
3460 |
-
}
|
3461 |
-
|
3462 |
-
// Check for overflow on the bottom/right
|
3463 |
-
else if ( overflow2 > 0 && (mySide !== side2 || overflow1 > 0) ) {
|
3464 |
-
position[side1] -= (mySide === CENTER ? -offset : offset) + adjust;
|
3465 |
-
newMy.invert( side, side2 );
|
3466 |
-
}
|
3467 |
-
|
3468 |
-
// Make sure we haven't made things worse with the adjustment and reset if so
|
3469 |
-
if ( position[side1] < viewportScroll && -position[side1] > overflow2 ) {
|
3470 |
-
position[side1] = initialPos;
|
3471 |
-
newMy = my.clone();
|
3472 |
-
}
|
3473 |
-
}
|
3474 |
-
|
3475 |
-
return position[side1] - initialPos;
|
3476 |
-
}
|
3477 |
-
|
3478 |
-
// Set newMy if using flip or flipinvert methods
|
3479 |
-
if ( methodX !== 'shift' || methodY !== 'shift' ) {
|
3480 |
-
newMy = my.clone();
|
3481 |
-
}
|
3482 |
-
|
3483 |
-
// Adjust position based onviewport and adjustment options
|
3484 |
-
adjusted = {
|
3485 |
-
left: methodX !== 'none' ? calculate(
|
3486 |
-
X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth
|
3487 |
-
) : 0,
|
3488 |
-
top: methodY !== 'none' ? calculate(
|
3489 |
-
Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight
|
3490 |
-
) : 0
|
3491 |
-
};
|
3492 |
-
|
3493 |
-
// Set tooltip position class if it's changed
|
3494 |
-
if ( newMy && cache.lastClass !== (newClass = NAMESPACE + '-pos-' + newMy.abbrev()) ) {
|
3495 |
-
tooltip.removeClass( api.cache.lastClass ).addClass( (api.cache.lastClass = newClass) );
|
3496 |
-
}
|
3497 |
-
|
3498 |
-
return adjusted;
|
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 |
-
coords.push( next );
|
3539 |
-
}
|
3540 |
-
|
3541 |
-
// Calculate height and width from outer edges
|
3542 |
-
newWidth = result.width = Math.abs( result.position.right - result.position.left );
|
3543 |
-
newHeight = result.height = Math.abs( result.position.bottom - result.position.top );
|
3544 |
-
|
3545 |
-
// If it's the center corner...
|
3546 |
-
if ( corner.abbrev() === 'c' ) {
|
3547 |
-
result.position = {
|
3548 |
-
left: result.position.left + (result.width / 2),
|
3549 |
-
top: result.position.top + (result.height / 2)
|
3550 |
-
};
|
3551 |
-
}
|
3552 |
-
else {
|
3553 |
-
// Second pass, use a binary search algorithm to locate most suitable coordinate
|
3554 |
-
while ( newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0 ) {
|
3555 |
-
newWidth = Math.floor( newWidth / 2 );
|
3556 |
-
newHeight = Math.floor( newHeight / 2 );
|
3557 |
-
|
3558 |
-
if ( corner.x === LEFT ) {
|
3559 |
-
compareX = newWidth;
|
3560 |
-
}
|
3561 |
-
else if ( corner.x === RIGHT ) {
|
3562 |
-
compareX = result.width - newWidth;
|
3563 |
-
}
|
3564 |
-
else {
|
3565 |
-
compareX += Math.floor( newWidth / 2 );
|
3566 |
-
}
|
3567 |
-
|
3568 |
-
if ( corner.y === TOP ) {
|
3569 |
-
compareY = newHeight;
|
3570 |
-
}
|
3571 |
-
else if ( corner.y === BOTTOM ) {
|
3572 |
-
compareY = result.height - newHeight;
|
3573 |
-
}
|
3574 |
-
else {
|
3575 |
-
compareY += Math.floor( newHeight / 2 );
|
3576 |
-
}
|
3577 |
-
|
3578 |
-
i = coords.length;
|
3579 |
-
while ( i-- ) {
|
3580 |
-
if ( coords.length < 2 ) {
|
3581 |
-
break;
|
3582 |
-
}
|
3583 |
-
|
3584 |
-
realX = coords[i][0] - result.position.left;
|
3585 |
-
realY = coords[i][1] - result.position.top;
|
3586 |
-
|
3587 |
-
if ( (corner.x === LEFT && realX >= compareX) ||
|
3588 |
-
(corner.x === RIGHT && realX <= compareX) ||
|
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 |
-
return result;
|
3601 |
-
},
|
3602 |
-
|
3603 |
-
rect: function( ax, ay, bx, by ) {
|
3604 |
-
return {
|
3605 |
-
width: Math.abs( bx - ax ),
|
3606 |
-
height: Math.abs( by - ay ),
|
3607 |
-
position: {
|
3608 |
-
left: Math.min( ax, bx ),
|
3609 |
-
top: Math.min( ay, by )
|
3610 |
-
}
|
3611 |
-
};
|
3612 |
-
},
|
3613 |
-
|
3614 |
-
_angles: {
|
3615 |
-
tc: 3 / 2, tr: 7 / 4, tl: 5 / 4,
|
3616 |
-
bc: 1 / 2, br: 1 / 4, bl: 3 / 4,
|
3617 |
-
rc: 2, lc: 1, c: 0
|
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 |
-
// Determine dimensions where possible
|
3659 |
-
rootWidth = root.attr( 'width' ) || root.width() || parseInt( root.css( 'width' ), 10 );
|
3660 |
-
rootHeight = root.attr( 'height' ) || root.height() || parseInt( root.css( 'height' ), 10 );
|
3661 |
-
|
3662 |
-
// Add stroke characteristics to scaling
|
3663 |
-
var strokeWidth2 = (parseInt( svg.css( 'stroke-width' ), 10 ) || 0) / 2;
|
3664 |
-
if ( strokeWidth2 ) {
|
3665 |
-
xScale += strokeWidth2 / rootWidth;
|
3666 |
-
yScale += strokeWidth2 / rootHeight;
|
3667 |
-
}
|
3668 |
-
|
3669 |
-
// Determine which shape calculation to use
|
3670 |
-
switch ( elem.nodeName ) {
|
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 |
-
result = PLUGINS.polys.polygon( result, corner );
|
3697 |
-
break;
|
3698 |
-
|
3699 |
-
// Unknown shape or rectangle? Use bounding box
|
3700 |
-
default:
|
3701 |
-
result = elem.getBoundingClientRect();
|
3702 |
-
result = {
|
3703 |
-
width: result.width, height: result.height,
|
3704 |
-
position: {
|
3705 |
-
left: result.left,
|
3706 |
-
top: result.top
|
3707 |
-
}
|
3708 |
-
};
|
3709 |
-
complex = false;
|
3710 |
-
break;
|
3711 |
-
}
|
3712 |
-
|
3713 |
-
// Shortcut assignments
|
3714 |
-
position = result.position;
|
3715 |
-
root = root[0];
|
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 |
-
// Calculate viewBox characteristics
|
3732 |
-
if ( root.viewBox && (viewBox = root.viewBox.baseVal) && viewBox.width && viewBox.height ) {
|
3733 |
-
xScale *= rootWidth / viewBox.width;
|
3734 |
-
yScale *= rootHeight / viewBox.height;
|
3735 |
-
}
|
3736 |
-
}
|
3737 |
-
|
3738 |
-
// Adjust by scroll offset
|
3739 |
-
position.left += doc.scrollLeft();
|
3740 |
-
position.top += doc.scrollTop();
|
3741 |
-
|
3742 |
-
return result;
|
3743 |
-
};
|
3744 |
-
;
|
3745 |
-
PLUGINS.imagemap = function( api, area, corner, adjustMethod ) {
|
3746 |
-
if ( !area.jquery ) {
|
3747 |
-
area = $( area );
|
3748 |
-
}
|
3749 |
-
|
3750 |
-
var shape = area.attr( 'shape' ).toLowerCase().replace( 'poly', 'polygon' ),
|
3751 |
-
image = $( 'img[usemap="#' + area.parent( 'map' ).attr( 'name' ) + '"]' ),
|
3752 |
-
coordsString = $.trim( area.attr( 'coords' ) ),
|
3753 |
-
coordsArray = coordsString.replace( /,$/, '' ).split( ',' ),
|
3754 |
-
imageOffset, coords, i, next, result, len;
|
3755 |
-
|
3756 |
-
// If we can't find the image using the map...
|
3757 |
-
if ( !image.length ) {
|
3758 |
-
return FALSE;
|
3759 |
-
}
|
3760 |
-
|
3761 |
-
// Pass coordinates string if polygon
|
3762 |
-
if ( shape === 'polygon' ) {
|
3763 |
-
result = PLUGINS.polys.polygon( coordsArray, corner );
|
3764 |
-
}
|
3765 |
-
|
3766 |
-
// Otherwise parse the coordinates and pass them as arguments
|
3767 |
-
else if ( PLUGINS.polys[shape] ) {
|
3768 |
-
for ( i = -1, len = coordsArray.length, coords = []; ++i < len; ) {
|
3769 |
-
coords.push( parseInt( coordsArray[i], 10 ) );
|
3770 |
-
}
|
3771 |
-
|
3772 |
-
result = PLUGINS.polys[shape].apply(
|
3773 |
-
this, coords.concat( corner )
|
3774 |
-
);
|
3775 |
-
}
|
3776 |
-
|
3777 |
-
// If no shapre calculation method was found, return false
|
3778 |
-
else {
|
3779 |
-
return FALSE;
|
3780 |
-
}
|
3781 |
-
|
3782 |
-
// Make sure we account for padding and borders on the image
|
3783 |
-
imageOffset = image.offset();
|
3784 |
-
imageOffset.left += Math.ceil( (image.outerWidth( FALSE ) - image.width()) / 2 );
|
3785 |
-
imageOffset.top += Math.ceil( (image.outerHeight( FALSE ) - image.height()) / 2 );
|
3786 |
-
|
3787 |
-
// Add image position to offset coordinates
|
3788 |
-
result.position.left += imageOffset.left;
|
3789 |
-
result.position.top += imageOffset.top;
|
3790 |
-
|
3791 |
-
return result;
|
3792 |
-
};
|
3793 |
-
;
|
3794 |
-
var IE6,
|
3795 |
-
|
3796 |
-
/*
|
3797 |
-
* BGIFrame adaption (http://plugins.jquery.com/project/bgiframe)
|
3798 |
-
* Special thanks to Brandon Aaron
|
3799 |
-
*/
|
3800 |
-
BGIFRAME = '<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" ' +
|
3801 |
-
' style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); ' +
|
3802 |
-
'-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';
|
3803 |
-
|
3804 |
-
function Ie6( api, qtip ) {
|
3805 |
-
this._ns = 'ie6';
|
3806 |
-
this.init( (this.qtip = api) );
|
3807 |
-
}
|
3808 |
-
|
3809 |
-
$.extend(
|
3810 |
-
Ie6.prototype, {
|
3811 |
-
_scroll: function() {
|
3812 |
-
var overlay = this.qtip.elements.overlay;
|
3813 |
-
overlay && (overlay[0].style.top = $( window ).scrollTop() + 'px');
|
3814 |
-
},
|
3815 |
-
|
3816 |
-
init: function( qtip ) {
|
3817 |
-
var tooltip = qtip.tooltip,
|
3818 |
-
scroll;
|
3819 |
-
|
3820 |
-
// Create the BGIFrame element if needed
|
3821 |
-
if ( $( 'select, object' ).length < 1 ) {
|
3822 |
-
this.bgiframe = qtip.elements.bgiframe = $( BGIFRAME ).appendTo( tooltip );
|
3823 |
-
|
3824 |
-
// Update BGIFrame on tooltip move
|
3825 |
-
qtip._bind( tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this );
|
3826 |
-
}
|
3827 |
-
|
3828 |
-
// redraw() container for width/height calculations
|
3829 |
-
this.redrawContainer = $( '<div/>', {id: NAMESPACE + '-rcontainer'} )
|
3830 |
-
.appendTo( document.body );
|
3831 |
-
|
3832 |
-
// Fixup modal plugin if present too
|
3833 |
-
if ( qtip.elements.overlay && qtip.elements.overlay.addClass( 'qtipmodal-ie6fix' ) ) {
|
3834 |
-
qtip._bind( window, ['scroll', 'resize'], this._scroll, this._ns, this );
|
3835 |
-
qtip._bind( tooltip, ['tooltipshow'], this._scroll, this._ns, this );
|
3836 |
-
}
|
3837 |
-
|
3838 |
-
// Set dimensions
|
3839 |
-
this.redraw();
|
3840 |
-
},
|
3841 |
-
|
3842 |
-
adjustBGIFrame: function() {
|
3843 |
-
var tooltip = this.qtip.tooltip,
|
3844 |
-
dimensions = {
|
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 |
-
// Update bgiframe
|
3863 |
-
this.bgiframe.css( offset ).css( dimensions );
|
3864 |
-
},
|
3865 |
-
|
3866 |
-
// Max/min width simulator function
|
3867 |
-
redraw: function() {
|
3868 |
-
if ( this.qtip.rendered < 1 || this.drawing ) {
|
3869 |
-
return this;
|
3870 |
-
}
|
3871 |
-
|
3872 |
-
var tooltip = this.qtip.tooltip,
|
3873 |
-
style = this.qtip.options.style,
|
3874 |
-
container = this.qtip.options.position.container,
|
3875 |
-
perc, width, max, min;
|
3876 |
-
|
3877 |
-
// Set drawing flag
|
3878 |
-
this.qtip.drawing = 1;
|
3879 |
-
|
3880 |
-
// If tooltip has a set height/width, just set it... like a boss!
|
3881 |
-
if ( style.height ) {
|
3882 |
-
tooltip.css( HEIGHT, style.height );
|
3883 |
-
}
|
3884 |
-
if ( style.width ) {
|
3885 |
-
tooltip.css( WIDTH, style.width );
|
3886 |
-
}
|
3887 |
-
|
3888 |
-
// Simulate max/min width if not set width present...
|
3889 |
-
else {
|
3890 |
-
// Reset width and add fluid class
|
3891 |
-
tooltip.css( WIDTH, '' ).appendTo( this.redrawContainer );
|
3892 |
-
|
3893 |
-
// Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!)
|
3894 |
-
width = tooltip.width();
|
3895 |
-
if ( width % 2 < 1 ) {
|
3896 |
-
width += 1;
|
3897 |
-
}
|
3898 |
-
|
3899 |
-
// Grab our max/min properties
|
3900 |
-
max = tooltip.css( 'maxWidth' ) || '';
|
3901 |
-
min = tooltip.css( 'minWidth' ) || '';
|
3902 |
-
|
3903 |
-
// Parse into proper pixel values
|
3904 |
-
perc = (max + min).indexOf( '%' ) > -1 ? container.width() / 100 : 0;
|
3905 |
-
max = ((max.indexOf( '%' ) > -1 ? perc : 1) * parseInt( max, 10 )) || width;
|
3906 |
-
min = ((min.indexOf( '%' ) > -1 ? perc : 1) * parseInt( min, 10 )) || 0;
|
3907 |
-
|
3908 |
-
// Determine new dimension size based on max/min/current values
|
3909 |
-
width = max + min ? Math.min( Math.max( width, min ), max ) : width;
|
3910 |
-
|
3911 |
-
// Set the newly calculated width and remvoe fluid class
|
3912 |
-
tooltip.css( WIDTH, Math.round( width ) ).appendTo( container );
|
3913 |
-
}
|
3914 |
-
|
3915 |
-
// Set drawing flag
|
3916 |
-
this.drawing = 0;
|
3917 |
-
|
3918 |
-
return this;
|
3919 |
-
},
|
3920 |
-
|
3921 |
-
destroy: function() {
|
3922 |
-
// Remove iframe
|
3923 |
-
this.bgiframe && this.bgiframe.remove();
|
3924 |
-
|
3925 |
-
// Remove bound events
|
3926 |
-
this.qtip._unbind( [window, this.qtip.tooltip], this._ns );
|
3927 |
-
}
|
3928 |
-
}
|
3929 |
-
);
|
3930 |
-
|
3931 |
-
IE6 = PLUGINS.ie6 = function( api ) {
|
3932 |
-
// Proceed only if the browser is IE6
|
3933 |
-
return BROWSER.ie === 6 ? new Ie6( api ) : FALSE;
|
3934 |
-
};
|
3935 |
-
|
3936 |
-
IE6.initialize = 'render';
|
3937 |
-
|
3938 |
-
CHECKS.ie6 = {
|
3939 |
-
'^content|style$': function() {
|
3940 |
-
this.redraw();
|
3941 |
-
}
|
3942 |
-
};
|
3943 |
-
;
|
3944 |
-
}
|
3945 |
-
));
|
3946 |
-
}( window, document ));
|
3947 |
-
}
|
3948 |
-
|
3949 |
-
|
3950 |
-
|
3951 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/js/vendor/qtip/jquery.qtip.min.js
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
/* qTip2 v2.2.0 None | qtip2.com | Licensed MIT, GPL | Sun Dec 15 2013 23:29:05 */
|
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
|
|
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/js/vendor/redux.select2.sortable.min.js
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
!function(a){a.fn.extend({select2SortableOrder:function(){var b=this.filter("[multiple]");return b.each(function(){var b=a(this);if("object"!=typeof b.data("select2"))return!1;var c,d=b.siblings(".select2-container"),e=[];b.find("optgroup").each(function(a,b){e.push(b)}),b.find("option").each(function(){var b=a(this).parent("optgroup").prop("label"),c=this;void 0===b&&(""===this.value||this.selected||e.push(c))}),c=a(d.find('.select2-choices li[class!="select2-search-field"]').map(function(){if(!this)return void 0;if(void 0!=a(this).data("select2Data")){var c=a(this).data("select2Data").id;return b.find('option[value="'+c+'"]')[0]}})),c.push.apply(c,e),b.children().remove(),b.append(c)}),b},select2Sortable:function(){var b=Array.prototype.slice.call(arguments,0);if($this=this.filter("[multiple]"),validMethods=["destroy"],0===b.length||"object"==typeof b[0]){var c={bindOrder:"formSubmit",sortableOptions:{placeholder:"ui-state-highlight",items:"li:not(.select2-search-field)",tolerance:"pointer"}},d=a.extend(c,b[0]);"object"!=typeof $this.data("select2")&&$this.select2(),$this.each(function(){var b=a(this),c=b.siblings(".select2-container").find(".select2-choices");switch(c.sortable(d.sortableOptions),d.bindOrder){case"sortableStop":c.on("sortstop.select2sortable",function(){b.select2SortableOrder()}),b.on("change",function(){a(this).select2SortableOrder()});break;default:b.closest("form").unbind("submit.select2sortable").on("submit.select2sortable",function(){b.select2SortableOrder()})}})}else{if(-1==a.inArray(b[0],validMethods))throw"Unknown method: "+b[0];"destroy"===b[0]&&$this.select2SortableDestroy()}return $this},select2SortableDestroy:function(){var b=this.filter("[multiple]");return b.each(function(){var b=a(this),c=b.parent().find(".select2-choices");b.closest("form").unbind("submit.select2sortable"),c.unbind("sortstop.select2sortable"),c.sortable("destroy")}),b}})}(jQuery);
|
|
inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/README.md
DELETED
@@ -1,114 +0,0 @@
|
|
1 |
-
Select2
|
2 |
-
=======
|
3 |
-
|
4 |
-
Select2 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.
|
5 |
-
|
6 |
-
To get started, checkout examples and documentation at http://ivaynberg.github.com/select2
|
7 |
-
|
8 |
-
Use cases
|
9 |
-
---------
|
10 |
-
|
11 |
-
* Enhancing native selects with search.
|
12 |
-
* Enhancing native selects with a better multi-select interface.
|
13 |
-
* Loading data from JavaScript: easily load items via ajax and have them searchable.
|
14 |
-
* Nesting optgroups: native selects only support one level of nested. Select2 does not have this restriction.
|
15 |
-
* Tagging: ability to add new items on the fly.
|
16 |
-
* Working with large, remote datasets: ability to partially load a dataset based on the search term.
|
17 |
-
* Paging of large datasets: easy support for loading more pages when the results are scrolled to the end.
|
18 |
-
* Templating: support for custom rendering of results and selections.
|
19 |
-
|
20 |
-
Browser compatibility
|
21 |
-
---------------------
|
22 |
-
* IE 8+
|
23 |
-
* Chrome 8+
|
24 |
-
* Firefox 10+
|
25 |
-
* Safari 3+
|
26 |
-
* Opera 10.6+
|
27 |
-
|
28 |
-
Usage
|
29 |
-
-----
|
30 |
-
You can source Select2 directly from a CDN like [JSDliver](http://www.jsdelivr.com/#!select2) or [CDNJS](http://www.cdnjs.com/libraries/select2), [download it from this GitHub repo](https://github.com/ivaynberg/select2/tags), or use one of the integrations below.
|
31 |
-
|
32 |
-
Integrations
|
33 |
-
------------
|
34 |
-
|
35 |
-
* [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / [Apache Wicket](http://wicket.apache.org))
|
36 |
-
* [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails)
|
37 |
-
* [AngularUI](http://angular-ui.github.io/#ui-select) ([AngularJS](https://angularjs.org/))
|
38 |
-
* [Django](https://github.com/applegrew/django-select2)
|
39 |
-
* [Symfony](https://github.com/19Gerhard85/sfSelect2WidgetsPlugin)
|
40 |
-
* [Symfony2](https://github.com/avocode/FormExtensions)
|
41 |
-
* [Bootstrap 2](https://github.com/t0m/select2-bootstrap-css) and [Bootstrap 3](https://github.com/t0m/select2-bootstrap-css/tree/bootstrap3) (CSS skins)
|
42 |
-
* [Meteor](https://github.com/nate-strauser/meteor-select2) (modern reactive JavaScript framework; + [Bootstrap 3 skin](https://github.com/esperadomedia/meteor-select2-bootstrap3-css/))
|
43 |
-
* [Meteor](https://jquery-select2.meteor.com)
|
44 |
-
* [Yii 2.x](http://demos.krajee.com/widgets#select2)
|
45 |
-
* [Yii 1.x](https://github.com/tonybolzan/yii-select2)
|
46 |
-
* [AtmosphereJS](https://atmospherejs.com/package/jquery-select2)
|
47 |
-
|
48 |
-
### Example Integrations
|
49 |
-
|
50 |
-
* [Knockout.js](https://github.com/ivaynberg/select2/wiki/Knockout.js-Integration)
|
51 |
-
* [Socket.IO](https://github.com/ivaynberg/select2/wiki/Socket.IO-Integration)
|
52 |
-
* [PHP](https://github.com/ivaynberg/select2/wiki/PHP-Example)
|
53 |
-
* [.Net MVC] (https://github.com/ivaynberg/select2/wiki/.Net-MVC-Example)
|
54 |
-
|
55 |
-
Internationalization (i18n)
|
56 |
-
---------------------------
|
57 |
-
|
58 |
-
Select2 supports multiple languages by simply including the right language JS
|
59 |
-
file (`select2_locale_it.js`, `select2_locale_nl.js`, etc.) after `select2.js`.
|
60 |
-
|
61 |
-
Missing a language? Just copy `select2_locale_en.js.template`, translate
|
62 |
-
it, and make a pull request back to Select2 here on GitHub.
|
63 |
-
|
64 |
-
Documentation
|
65 |
-
-------------
|
66 |
-
|
67 |
-
The documentation for Select2 is available [through GitHub Pages](https://ivaynberg.github.io/select2/) and is located within this repository in the [`gh-pages` branch](https://github.com/ivaynberg/select2/tree/gh-pages).
|
68 |
-
|
69 |
-
Community
|
70 |
-
---------
|
71 |
-
|
72 |
-
### Bug tracker
|
73 |
-
|
74 |
-
Have a bug? Please create an issue here on GitHub!
|
75 |
-
|
76 |
-
https://github.com/ivaynberg/select2/issues
|
77 |
-
|
78 |
-
### Mailing list
|
79 |
-
|
80 |
-
Have a question? Ask on our mailing list!
|
81 |
-
|
82 |
-
select2@googlegroups.com
|
83 |
-
|
84 |
-
https://groups.google.com/d/forum/select2
|
85 |
-
|
86 |
-
### IRC channel
|
87 |
-
|
88 |
-
Need help implementing Select2 in your project? Ask in our IRC channel!
|
89 |
-
|
90 |
-
**Network:** [Freenode](https://freenode.net/) (`chat.freenode.net`)
|
91 |
-
|
92 |
-
**Channel:** `#select2`
|
93 |
-
|
94 |
-
**Web access:** https://webchat.freenode.net/?channels=select2
|
95 |
-
|
96 |
-
Copyright and license
|
97 |
-
---------------------
|
98 |
-
|
99 |
-
Copyright 2012 Igor Vaynberg
|
100 |
-
|
101 |
-
This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
|
102 |
-
General Public License version 2 (the "GPL License"). You may choose either license to govern your
|
103 |
-
use of this software only upon the condition that you accept all of the terms of either the Apache
|
104 |
-
License or the GPL License.
|
105 |
-
|
106 |
-
You may obtain a copy of the Apache License and the GPL License in the LICENSE file, or at:
|
107 |
-
|
108 |
-
http://www.apache.org/licenses/LICENSE-2.0
|
109 |
-
http://www.gnu.org/licenses/gpl-2.0.html
|
110 |
-
|
111 |
-
Unless required by applicable law or agreed to in writing, software distributed under the Apache License
|
112 |
-
or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
113 |
-
either express or implied. See the Apache License and the GPL License for the specific language governing
|
114 |
-
permissions and limitations under the Apache License and the GPL License.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/release.sh
DELETED
@@ -1,79 +0,0 @@
|
|
1 |
-
#!/bin/bash
|
2 |
-
set -e
|
3 |
-
|
4 |
-
echo -n "Enter the version for this release: "
|
5 |
-
|
6 |
-
read ver
|
7 |
-
|
8 |
-
if [ ! $ver ]; then
|
9 |
-
echo "Invalid version."
|
10 |
-
exit
|
11 |
-
fi
|
12 |
-
|
13 |
-
name="select2"
|
14 |
-
js="$name.js"
|
15 |
-
mini="$name.min.js"
|
16 |
-
css="$name.css"
|
17 |
-
release="$name-$ver"
|
18 |
-
tag="$ver"
|
19 |
-
branch="build-$ver"
|
20 |
-
curbranch=`git branch | grep "*" | sed "s/* //"`
|
21 |
-
timestamp=$(date)
|
22 |
-
tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g"
|
23 |
-
remote="origin"
|
24 |
-
|
25 |
-
echo "Pulling from origin"
|
26 |
-
|
27 |
-
git pull
|
28 |
-
|
29 |
-
echo "Updating Version Identifiers"
|
30 |
-
|
31 |
-
sed -E -e "s/\"version\": \"([0-9\.]+)\",/\"version\": \"$ver\",/g" -i -- bower.json select2.jquery.json component.json composer.json package.json
|
32 |
-
|
33 |
-
git add bower.json
|
34 |
-
git add select2.jquery.json
|
35 |
-
git add component.json
|
36 |
-
git add composer.json
|
37 |
-
git add package.json
|
38 |
-
|
39 |
-
git commit -m "modified version identifiers in descriptors for release $ver"
|
40 |
-
git push
|
41 |
-
|
42 |
-
git branch "$branch"
|
43 |
-
git checkout "$branch"
|
44 |
-
|
45 |
-
echo "Tokenizing..."
|
46 |
-
|
47 |
-
find . -name "$js" | xargs -I{} sed -e "$tokens" -i -- {}
|
48 |
-
find . -name "$css" | xargs -I{} sed -e "$tokens" -i -- {}
|
49 |
-
|
50 |
-
sed -e "s/latest/$ver/g" -i -- bower.json
|
51 |
-
|
52 |
-
git add "$js"
|
53 |
-
git add "$css"
|
54 |
-
|
55 |
-
echo "Minifying..."
|
56 |
-
|
57 |
-
echo "/*" > "$mini"
|
58 |
-
cat LICENSE | sed "$tokens" >> "$mini"
|
59 |
-
echo "*/" >> "$mini"
|
60 |
-
|
61 |
-
curl -s \
|
62 |
-
--data-urlencode "js_code@$js" \
|
63 |
-
http://marijnhaverbeke.nl/uglifyjs \
|
64 |
-
>> "$mini"
|
65 |
-
|
66 |
-
git add "$mini"
|
67 |
-
|
68 |
-
git commit -m "release $ver"
|
69 |
-
|
70 |
-
echo "Tagging..."
|
71 |
-
git tag -a "$tag" -m "tagged version $ver"
|
72 |
-
git push "$remote" --tags
|
73 |
-
|
74 |
-
echo "Cleaning Up..."
|
75 |
-
|
76 |
-
git checkout "$curbranch"
|
77 |
-
git branch -D "$branch"
|
78 |
-
|
79 |
-
echo "Done"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/select2-bootstrap.css
DELETED
@@ -1,87 +0,0 @@
|
|
1 |
-
.form-control .select2-choice {
|
2 |
-
border: 0;
|
3 |
-
border-radius: 2px;
|
4 |
-
}
|
5 |
-
|
6 |
-
.form-control .select2-choice .select2-arrow {
|
7 |
-
border-radius: 0 2px 2px 0;
|
8 |
-
}
|
9 |
-
|
10 |
-
.form-control.select2-container {
|
11 |
-
height: auto !important;
|
12 |
-
padding: 0;
|
13 |
-
}
|
14 |
-
|
15 |
-
.form-control.select2-container.select2-dropdown-open {
|
16 |
-
border-color: #5897FB;
|
17 |
-
border-radius: 3px 3px 0 0;
|
18 |
-
}
|
19 |
-
|
20 |
-
.form-control .select2-container.select2-dropdown-open .select2-choices {
|
21 |
-
border-radius: 3px 3px 0 0;
|
22 |
-
}
|
23 |
-
|
24 |
-
.form-control.select2-container .select2-choices {
|
25 |
-
border: 0 !important;
|
26 |
-
border-radius: 3px;
|
27 |
-
}
|
28 |
-
|
29 |
-
.control-group.warning .select2-container .select2-choice,
|
30 |
-
.control-group.warning .select2-container .select2-choices,
|
31 |
-
.control-group.warning .select2-container-active .select2-choice,
|
32 |
-
.control-group.warning .select2-container-active .select2-choices,
|
33 |
-
.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice,
|
34 |
-
.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices,
|
35 |
-
.control-group.warning .select2-container-multi.select2-container-active .select2-choices {
|
36 |
-
border: 1px solid #C09853 !important;
|
37 |
-
}
|
38 |
-
|
39 |
-
.control-group.warning .select2-container .select2-choice div {
|
40 |
-
border-left: 1px solid #C09853 !important;
|
41 |
-
background: #FCF8E3 !important;
|
42 |
-
}
|
43 |
-
|
44 |
-
.control-group.error .select2-container .select2-choice,
|
45 |
-
.control-group.error .select2-container .select2-choices,
|
46 |
-
.control-group.error .select2-container-active .select2-choice,
|
47 |
-
.control-group.error .select2-container-active .select2-choices,
|
48 |
-
.control-group.error .select2-dropdown-open.select2-drop-above .select2-choice,
|
49 |
-
.control-group.error .select2-dropdown-open.select2-drop-above .select2-choices,
|
50 |
-
.control-group.error .select2-container-multi.select2-container-active .select2-choices {
|
51 |
-
border: 1px solid #B94A48 !important;
|
52 |
-
}
|
53 |
-
|
54 |
-
.control-group.error .select2-container .select2-choice div {
|
55 |
-
border-left: 1px solid #B94A48 !important;
|
56 |
-
background: #F2DEDE !important;
|
57 |
-
}
|
58 |
-
|
59 |
-
.control-group.info .select2-container .select2-choice,
|
60 |
-
.control-group.info .select2-container .select2-choices,
|
61 |
-
.control-group.info .select2-container-active .select2-choice,
|
62 |
-
.control-group.info .select2-container-active .select2-choices,
|
63 |
-
.control-group.info .select2-dropdown-open.select2-drop-above .select2-choice,
|
64 |
-
.control-group.info .select2-dropdown-open.select2-drop-above .select2-choices,
|
65 |
-
.control-group.info .select2-container-multi.select2-container-active .select2-choices {
|
66 |
-
border: 1px solid #3A87AD !important;
|
67 |
-
}
|
68 |
-
|
69 |
-
.control-group.info .select2-container .select2-choice div {
|
70 |
-
border-left: 1px solid #3A87AD !important;
|
71 |
-
background: #D9EDF7 !important;
|
72 |
-
}
|
73 |
-
|
74 |
-
.control-group.success .select2-container .select2-choice,
|
75 |
-
.control-group.success .select2-container .select2-choices,
|
76 |
-
.control-group.success .select2-container-active .select2-choice,
|
77 |
-
.control-group.success .select2-container-active .select2-choices,
|
78 |
-
.control-group.success .select2-dropdown-open.select2-drop-above .select2-choice,
|
79 |
-
.control-group.success .select2-dropdown-open.select2-drop-above .select2-choices,
|
80 |
-
.control-group.success .select2-container-multi.select2-container-active .select2-choices {
|
81 |
-
border: 1px solid #468847 !important;
|
82 |
-
}
|
83 |
-
|
84 |
-
.control-group.success .select2-container .select2-choice div {
|
85 |
-
border-left: 1px solid #468847 !important;
|
86 |
-
background: #DFF0D8 !important;
|
87 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/select2-spinner.gif
DELETED
Binary file
|
inc/redux/redux-framework/ReduxCore/assets/js/vendor/select2/select2.css
DELETED
@@ -1,704 +0,0 @@
|
|
1 |
-
/*
|
2 |
-
Version: 3.5.2 Timestamp: Sat Nov 1 14:43:36 EDT 2014
|
3 |
-
*/
|
4 |
-
.select2-container {
|
5 |
-
margin: 0;
|
6 |
-
position: relative;
|
7 |
-
display: inline-block;
|
8 |
-
/* inline-block for ie7 */
|
9 |
-
zoom: 1;
|
10 |
-
*display: inline;
|
11 |
-
vertical-align: middle;
|
12 |
-
}
|
13 |
-
|
14 |
-
.select2-container,
|
15 |
-
.select2-drop,
|
16 |
-
.select2-search,
|
17 |
-
.select2-search input {
|
18 |
-
/*
|
19 |
-
Force border-box so that % widths fit the parent
|
20 |
-
container without overlap because of margin/padding.
|
21 |
-
More Info : http://www.quirksmode.org/css/box.html
|
22 |
-
*/
|
23 |
-
-webkit-box-sizing: border-box; /* webkit */
|
24 |
-
-moz-box-sizing: border-box; /* firefox */
|
25 |
-
box-sizing: border-box; /* css3 */
|
26 |
-
}
|
27 |
-
|
28 |
-
.select2-container .select2-choice {
|
29 |
-
display: block;
|
30 |
-
height: 26px;
|
31 |
-
padding: 0 0 0 8px;
|
32 |
-
overflow: hidden;
|
33 |
-
position: relative;
|
34 |
-
|
35 |
-
border: 1px solid #aaa;
|
36 |
-
white-space: nowrap;
|
37 |
-
line-height: 26px;
|
38 |
-
color: #444;
|
39 |
-
text-decoration: none;
|
40 |
-
|
41 |
-
border-radius: 4px;
|
42 |
-
|
43 |
-
background-clip: padding-box;
|
44 |
-
|
45 |
-
-webkit-touch-callout: none;
|
46 |
-
-webkit-user-select: none;
|
47 |
-
-moz-user-select: none;
|
48 |
-
-ms-user-select: none;
|
49 |
-
user-select: none;
|
50 |
-
|
51 |
-
background-color: #fff;
|
52 |
-
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
|
53 |
-
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
54 |
-
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
55 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
|
56 |
-
background-image: linear-gradient(to top, #eee 0%, #fff 50%);
|
57 |
-
}
|
58 |
-
|
59 |
-
html[dir="rtl"] .select2-container .select2-choice {
|
60 |
-
padding: 0 8px 0 0;
|
61 |
-
}
|
62 |
-
|
63 |
-
.select2-container.select2-drop-above .select2-choice {
|
64 |
-
border-bottom-color: #aaa;
|
65 |
-
|
66 |
-
border-radius: 0 0 4px 4px;
|
67 |
-
|
68 |
-
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
|
69 |
-
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
70 |
-
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
71 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
|
72 |
-
background-image: linear-gradient(to bottom, #eee 0%, #fff 90%);
|
73 |
-
}
|
74 |
-
|
75 |
-
.select2-container.select2-allowclear .select2-choice .select2-chosen {
|
76 |
-
margin-right: 42px;
|
77 |
-
}
|
78 |
-
|
79 |
-
.select2-container .select2-choice > .select2-chosen {
|
80 |
-
margin-right: 26px;
|
81 |
-
display: block;
|
82 |
-
overflow: hidden;
|
83 |
-
|
84 |
-
white-space: nowrap;
|
85 |
-
|
86 |
-
text-overflow: ellipsis;
|
87 |
-
float: none;
|
88 |
-
width: auto;
|
89 |
-
}
|
90 |
-
|
91 |
-
html[dir="rtl"] .select2-container .select2-choice > .select2-chosen {
|
92 |
-
margin-left: 26px;
|
93 |
-
margin-right: 0;
|
94 |
-
}
|
95 |
-
|
96 |
-
.select2-container .select2-choice abbr {
|
97 |
-
display: none;
|
98 |
-
width: 12px;
|
99 |
-
height: 12px;
|
100 |
-
position: absolute;
|
101 |
-
right: 24px;
|
102 |
-
top: 8px;
|
103 |
-
|
104 |
-
font-size: 1px;
|
105 |
-
text-decoration: none;
|
106 |
-
|
107 |
-
border: 0;
|
108 |
-
background: url('select2.png') right top no-repeat;
|
109 |
-
cursor: pointer;
|
110 |
-
outline: 0;
|
111 |
-
}
|
112 |
-
|
113 |
-
.select2-container.select2-allowclear .select2-choice abbr {
|
114 |
-
display: inline-block;
|
115 |
-
}
|
116 |
-
|
117 |
-
.select2-container .select2-choice abbr:hover {
|
118 |
-
background-position: right -11px;
|
119 |
-
cursor: pointer;
|
120 |
-
}
|
121 |
-
|
122 |
-
.select2-drop-mask {
|
123 |
-
border: 0;
|
124 |
-
margin: 0;
|
125 |
-
padding: 0;
|
126 |
-
position: fixed;
|
127 |
-
left: 0;
|
128 |
-
top: 0;
|
129 |
-
min-height: 100%;
|
130 |
-
min-width: 100%;
|
131 |
-
height: auto;
|
132 |
-
width: auto;
|
133 |
-
opacity: 0;
|
134 |
-
z-index: 9998;
|
135 |
-
/* styles required for IE to work */
|
136 |
-
background-color: #fff;
|
137 |
-
filter: alpha(opacity=0);
|
138 |
-
}
|
139 |
-
|
140 |
-
.select2-drop {
|
141 |
-
width: 100%;
|
142 |
-
margin-top: -1px;
|
143 |
-
position: absolute;
|
144 |
-
z-index: 9999;
|
145 |
-
top: 100%;
|
146 |
-
|
147 |
-
background: #fff;
|
148 |
-
color: #000;
|
149 |
-
border: 1px solid #aaa;
|
150 |
-
border-top: 0;
|
151 |
-
|
152 |
-
border-radius: 0 0 4px 4px;
|
153 |
-
|
154 |
-
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
155 |
-
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
156 |
-
}
|
157 |
-
|
158 |
-
.select2-drop.select2-drop-above {
|
159 |
-
margin-top: 1px;
|
160 |
-
border-top: 1px solid #aaa;
|
161 |
-
border-bottom: 0;
|
162 |
-
|
163 |
-
border-radius: 4px 4px 0 0;
|
164 |
-
|
165 |
-
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
166 |
-
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
167 |
-
}
|
168 |
-
|
169 |
-
.select2-drop-active {
|
170 |
-
border: 1px solid #5897fb;
|
171 |
-
border-top: none;
|
172 |
-
}
|
173 |
-
|
174 |
-
.select2-drop.select2-drop-above.select2-drop-active {
|
175 |
-
border-top: 1px solid #5897fb;
|
176 |
-
}
|
177 |
-
|
178 |
-
.select2-drop-auto-width {
|
179 |
-
border-top: 1px solid #aaa;
|
180 |
-
width: auto;
|
181 |
-
}
|
182 |
-
|
183 |
-
.select2-drop-auto-width .select2-search {
|
184 |
-
padding-top: 4px;
|
185 |
-
}
|
186 |
-
|
187 |
-
.select2-container .select2-choice .select2-arrow {
|
188 |
-
display: inline-block;
|
189 |
-
width: 18px;
|
190 |
-
height: 100%;
|
191 |
-
position: absolute;
|
192 |
-
right: 0;
|
193 |
-
top: 0;
|
194 |
-
|
195 |
-
border-left: 1px solid #aaa;
|
196 |
-
border-radius: 0 4px 4px 0;
|
197 |
-
|
198 |
-
background-clip: padding-box;
|
199 |
-
|
200 |
-
background: #ccc;
|
201 |
-
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
|
202 |
-
background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
203 |
-
background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
204 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
|
205 |
-
background-image: linear-gradient(to top, #ccc 0%, #eee 60%);
|
206 |
-
}
|
207 |
-
|
208 |
-
html[dir="rtl"] .select2-container .select2-choice .select2-arrow {
|
209 |
-
left: 0;
|
210 |
-
right: auto;
|
211 |
-
|
212 |
-
border-left: none;
|
213 |
-
border-right: 1px solid #aaa;
|
214 |
-
border-radius: 4px 0 0 4px;
|
215 |
-
}
|
216 |
-
|
217 |
-
.select2-container .select2-choice .select2-arrow b {
|
218 |
-
display: block;
|
219 |
-
width: 100%;
|
220 |
-
height: 100%;
|
221 |
-
background: url('select2.png') no-repeat 0 1px;
|
222 |
-
}
|
223 |
-
|
224 |
-
html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {
|
225 |
-
background-position: 2px 1px;
|
226 |
-
}
|
227 |
-
|
228 |
-
.select2-search {
|
229 |
-
display: inline-block;
|
230 |
-
width: 100%;
|
231 |
-
min-height: 26px;
|
232 |
-
margin: 0;
|
233 |
-
padding-left: 4px;
|
234 |
-
padding-right: 4px;
|
235 |
-
|
236 |
-
position: relative;
|
237 |
-
z-index: 10000;
|
238 |
-
|
239 |
-
white-space: nowrap;
|
240 |
-
}
|
241 |
-
|
242 |
-
.select2-search input {
|
243 |
-
width: 100%;
|
244 |
-
height: auto !important;
|
245 |
-
min-height: 26px;
|
246 |
-
padding: 4px 20px 4px 5px;
|
247 |
-
margin: 0;
|
248 |
-
|
249 |
-
outline: 0;
|
250 |
-
font-family: sans-serif;
|
251 |
-
font-size: 1em;
|
252 |
-
|
253 |
-
border: 1px solid #aaa;
|
254 |
-
border-radius: 0;
|
255 |
-
|
256 |
-
-webkit-box-shadow: none;
|
257 |
-
box-shadow: none;
|
258 |
-
|
259 |
-
background: #fff url('select2.png') no-repeat 100% -22px;
|
260 |
-
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
261 |
-
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
262 |
-
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
263 |
-
background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
|
264 |
-
}
|
265 |
-
|
266 |
-
html[dir="rtl"] .select2-search input {
|
267 |
-
padding: 4px 5px 4px 20px;
|
268 |
-
|
269 |
-
background: #fff url('select2.png') no-repeat -37px -22px;
|
270 |
-
background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
271 |
-
background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
272 |
-
background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
273 |
-
background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
|
274 |
-
}
|
275 |
-
|
276 |
-
.select2-drop.select2-drop-above .select2-search input {
|
277 |
-
margin-top: 4px;
|
278 |
-
}
|
279 |
-
|
280 |
-
.select2-search input.select2-active {
|
281 |
-
background: #fff url('select2-spinner.gif') no-repeat 100%;
|
282 |
-
background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
283 |
-
background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
284 |
-
background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
285 |
-
background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
|
286 |
-
}
|
287 |
-
|
288 |
-
.select2-container-active .select2-choice,
|
289 |
-
.select2-container-active .select2-choices {
|
290 |
-
border: 1px solid #5897fb;
|
291 |
-
outline: none;
|
292 |
-
|
293 |
-
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
294 |
-
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
295 |
-
}
|
296 |
-
|
297 |
-
.select2-dropdown-open .select2-choice {
|
298 |
-
border-bottom-color: transparent;
|
299 |
-
-webkit-box-shadow: 0 1px 0 #fff inset;
|
300 |
-
box-shadow: 0 1px 0 #fff inset;
|
301 |
-
|
302 |
-
border-bottom-left-radius: 0;
|
303 |
-
border-bottom-right-radius: 0;
|
304 |
-
|
305 |
-
background-color: #eee;
|
306 |
-
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
|
307 |
-
background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
308 |
-
background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
309 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
310 |
-
background-image: linear-gradient(to top, #fff 0%, #eee 50%);
|
311 |
-
}
|
312 |
-
|
313 |
-
.select2-dropdown-open.select2-drop-above .select2-choice,
|
314 |
-
.select2-dropdown-open.select2-drop-above .select2-choices {
|
315 |
-
border: 1px solid #5897fb;
|
316 |
-
border-top-color: transparent;
|
317 |
-
|
318 |
-
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
|
319 |
-
background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
|
320 |
-
background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
|
321 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
322 |
-
background-image: linear-gradient(to bottom, #fff 0%, #eee 50%);
|
323 |
-
}
|
324 |
-
|
325 |
-
.select2-dropdown-open .select2-choice .select2-arrow {
|
326 |
-
background: transparent;
|
327 |
-
border-left: none;
|
328 |
-
filter: none;
|
329 |
-
}
|
330 |
-
html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow {
|
331 |
-
border-right: none;
|
332 |
-
}
|
333 |
-
|
334 |
-
.select2-dropdown-open .select2-choice .select2-arrow b {
|
335 |
-
background-position: -18px 1px;
|
336 |
-
}
|
337 |
-
|
338 |
-
html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b {
|
339 |
-
background-position: -16px 1px;
|
340 |
-
}
|
341 |
-
|
342 |
-
.select2-hidden-accessible {
|
343 |
-
border: 0;
|
344 |
-
clip: rect(0 0 0 0);
|
345 |
-
height: 1px;
|
346 |
-
margin: -1px;
|
347 |
-
overflow: hidden;
|
348 |
-
padding: 0;
|
349 |
-
position: absolute;
|
350 |
-
width: 1px;
|
351 |
-
}
|
352 |
-
|
353 |
-
/* results */
|
354 |
-
.select2-results {
|
355 |
-
max-height: 200px;
|
356 |
-
padding: 0 0 0 4px;
|
357 |
-
margin: 4px 4px 4px 0;
|
358 |
-
position: relative;
|
359 |
-
overflow-x: hidden;
|
360 |
-
overflow-y: auto;
|
361 |
-
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
362 |
-
}
|
363 |
-
|
364 |
-
html[dir="rtl"] .select2-results {
|
365 |
-
padding: 0 4px 0 0;
|
366 |
-
margin: 4px 0 4px 4px;
|
367 |
-
}
|
368 |
-
|
369 |
-
.select2-results ul.select2-result-sub {
|
370 |
-
margin: 0;
|
371 |
-
padding-left: 0;
|
372 |
-
}
|
373 |
-
|
374 |
-
.select2-results li {
|
375 |
-
list-style: none;
|
376 |
-
display: list-item;
|
377 |
-
background-image: none;
|
378 |
-
}
|
379 |
-
|
380 |
-
.select2-results li.select2-result-with-children > .select2-result-label {
|
381 |
-
font-weight: bold;
|
382 |
-
}
|
383 |
-
|
384 |
-
.select2-results .select2-result-label {
|
385 |
-
padding: 3px 7px 4px;
|
386 |
-
margin: 0;
|
387 |
-
cursor: pointer;
|
388 |
-
|
389 |
-
min-height: 1em;
|
390 |
-
|
391 |
-
-webkit-touch-callout: none;
|
392 |
-
-webkit-user-select: none;
|
393 |
-
-moz-user-select: none;
|
394 |
-
-ms-user-select: none;
|
395 |
-
user-select: none;
|
396 |
-
}
|
397 |
-
|
398 |
-
.select2-results-dept-1 .select2-result-label { padding-left: 20px }
|
399 |
-
.select2-results-dept-2 .select2-result-label { padding-left: 40px }
|
400 |
-
.select2-results-dept-3 .select2-result-label { padding-left: 60px }
|
401 |
-
.select2-results-dept-4 .select2-result-label { padding-left: 80px }
|
402 |
-
.select2-results-dept-5 .select2-result-label { padding-left: 100px }
|
403 |
-
.select2-results-dept-6 .select2-result-label { padding-left: 110px }
|
404 |
-
.select2-results-dept-7 .select2-result-label { padding-left: 120px }
|
405 |
-
|
406 |
-
.select2-results .select2-highlighted {
|
407 |
-
background: #3875d7;
|
408 |
-
color: #fff;
|
409 |
-
}
|
410 |
-
|
411 |
-
.select2-results li em {
|
412 |
-
background: #feffde;
|
413 |
-
font-style: normal;
|
414 |
-
}
|
415 |
-
|
416 |
-
.select2-results .select2-highlighted em {
|
417 |
-
background: transparent;
|
418 |
-
}
|
419 |
-
|
420 |
-
.select2-results .select2-highlighted ul {
|
421 |
-
background: #fff;
|
422 |
-
color: #000;
|
423 |
-
}
|
424 |
-
|
425 |
-
.select2-results .select2-no-results,
|
426 |
-
.select2-results .select2-searching,
|
427 |
-
.select2-results .select2-ajax-error,
|
428 |
-
.select2-results .select2-selection-limit {
|
429 |
-
background: #f4f4f4;
|
430 |
-
display: list-item;
|
431 |
-
padding-left: 5px;
|
432 |
-
}
|
433 |
-
|
434 |
-
/*
|
435 |
-
disabled look for disabled choices in the results dropdown
|
436 |
-
*/
|
437 |
-
.select2-results .select2-disabled.select2-highlighted {
|
438 |
-
color: #666;
|
439 |
-
background: #f4f4f4;
|
440 |
-
display: list-item;
|
441 |
-
cursor: default;
|
442 |
-
}
|
443 |
-
.select2-results .select2-disabled {
|
444 |
-
background: #f4f4f4;
|
445 |
-
display: list-item;
|
446 |
-
cursor: default;
|
447 |
-
}
|
448 |
-
|
449 |
-
.select2-results .select2-selected {
|
450 |
-
display: none;
|
451 |
-
}
|
452 |
-
|
453 |
-
.select2-more-results.select2-active {
|
454 |
-
background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
|
455 |
-
}
|
456 |
-
|
457 |
-
.select2-results .select2-ajax-error {
|
458 |
-
background: rgba(255, 50, 50, .2);
|
459 |
-
}
|
460 |
-
|
461 |
-
.select2-more-results {
|
462 |
-
background: #f4f4f4;
|
463 |
-
display: list-item;
|
464 |
-
}
|
465 |
-
|
466 |
-
/* disabled styles */
|
467 |
-
|
468 |
-
.select2-container.select2-container-disabled .select2-choice {
|
469 |
-
background-color: #f4f4f4;
|
470 |
-
background-image: none;
|
471 |
-
border: 1px solid #ddd;
|
472 |
-
cursor: default;
|
473 |
-
}
|
474 |
-
|
475 |
-
.select2-container.select2-container-disabled .select2-choice .select2-arrow {
|
476 |
-
background-color: #f4f4f4;
|
477 |
-
background-image: none;
|
478 |
-
border-left: 0;
|
479 |
-
}
|
480 |
-
|
481 |
-
.select2-container.select2-container-disabled .select2-choice abbr {
|
482 |
-
display: none;
|
483 |
-
}
|
484 |
-
|
485 |
-
|
486 |
-
/* multiselect */
|
487 |
-
|
488 |
-
.select2-container-multi .select2-choices {
|
489 |
-
height: auto !important;
|
490 |
-
height: 1%;
|
491 |
-
margin: 0;
|
492 |
-
padding: 0 5px 0 0;
|
493 |
-
position: relative;
|
494 |
-
|
495 |
-
border: 1px solid #aaa;
|
496 |
-
cursor: text;
|
497 |
-
overflow: hidden;
|
498 |
-
|
499 |
-
background-color: #fff;
|
500 |
-
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
|
501 |
-
background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
|
502 |
-
background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
|
503 |
-
background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);
|
504 |
-
}
|
505 |
-
|
506 |
-
html[dir="rtl"] .select2-container-multi .select2-choices {
|
507 |
-
padding: 0 0 0 5px;
|
508 |
-
}
|
509 |
-
|
510 |
-
.select2-locked {
|
511 |
-
padding: 3px 5px 3px 5px !important;
|
512 |
-
}
|
513 |
-
|
514 |
-
.select2-container-multi .select2-choices {
|
515 |
-
min-height: 26px;
|
516 |
-
}
|
517 |
-
|
518 |
-
.select2-container-multi.select2-container-active .select2-choices {
|
519 |
-
border: 1px solid #5897fb;
|
520 |
-
outline: none;
|
521 |
-
|
522 |
-
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
523 |
-
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
524 |
-
}
|
525 |
-
.select2-container-multi .select2-choices li {
|
526 |
-
float: left;
|
527 |
-
list-style: none;
|
528 |
-
}
|
529 |
-
html[dir="rtl"] .select2-container-multi .select2-choices li
|
530 |
-
{
|
531 |
-
float: right;
|
532 |
-
}
|
533 |
-
.select2-container-multi .select2-choices .select2-search-field {
|
534 |
-
margin: 0;
|
535 |
-
padding: 0;
|
536 |
-
white-space: nowrap;
|
537 |
-
}
|
538 |
-
|
539 |
-
.select2-container-multi .select2-choices .select2-search-field input {
|
540 |
-
padding: 5px;
|
541 |
-
margin: 1px 0;
|
542 |
-
|
543 |
-
font-family: sans-serif;
|
544 |
-
font-size: 100%;
|
545 |
-
color: #666;
|
546 |
-
outline: 0;
|
547 |
-
border: 0;
|
548 |
-
-webkit-box-shadow: none;
|
549 |
-
box-shadow: none;
|
550 |
-
background: transparent !important;
|
551 |
-
}
|
552 |
-
|
553 |
-
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
|
554 |
-
background: #fff url('select2-spinner.gif') no-repeat 100% !important;
|
555 |
-
}
|
556 |
-
|
557 |
-
.select2-default {
|
558 |
-
color: #999 !important;
|
559 |
-
}
|
560 |
-
|
561 |
-
.select2-container-multi .select2-choices .select2-search-choice {
|
562 |
-
padding: 3px 5px 3px 18px;
|
563 |
-
margin: 3px 0 3px 5px;
|
564 |
-
position: relative;
|
565 |
-
|
566 |
-
line-height: 13px;
|
567 |
-
color: #333;
|
568 |
-
cursor: default;
|
569 |
-
border: 1px solid #aaaaaa;
|
570 |
-
|
571 |
-
border-radius: 3px;
|
572 |
-
|
573 |
-
-webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
574 |
-
box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
575 |
-
|
576 |
-
background-clip: padding-box;
|
577 |
-
|
578 |
-
-webkit-touch-callout: none;
|
579 |
-
-webkit-user-select: none;
|
580 |
-
-moz-user-select: none;
|
581 |
-
-ms-user-select: none;
|
582 |
-
user-select: none;
|
583 |
-
|
584 |
-
background-color: #e4e4e4;
|
585 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
|
586 |
-
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
|
587 |
-
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
588 |
-
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
589 |
-
background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
590 |
-
}
|
591 |
-
html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice
|
592 |
-
{
|
593 |
-
margin: 3px 5px 3px 0;
|
594 |
-
padding: 3px 18px 3px 5px;
|
595 |
-
}
|
596 |
-
.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
|
597 |
-
cursor: default;
|
598 |
-
}
|
599 |
-
.select2-container-multi .select2-choices .select2-search-choice-focus {
|
600 |
-
background: #d4d4d4;
|
601 |
-
}
|
602 |
-
|
603 |
-
.select2-search-choice-close {
|
604 |
-
display: block;
|
605 |
-
width: 12px;
|
606 |
-
height: 13px;
|
607 |
-
position: absolute;
|
608 |
-
right: 3px;
|
609 |
-
top: 4px;
|
610 |
-
|
611 |
-
font-size: 1px;
|
612 |
-
outline: none;
|
613 |
-
background: url('select2.png') right top no-repeat;
|
614 |
-
}
|
615 |
-
html[dir="rtl"] .select2-search-choice-close {
|
616 |
-
right: auto;
|
617 |
-
left: 3px;
|
618 |
-
}
|
619 |
-
|
620 |
-
.select2-container-multi .select2-search-choice-close {
|
621 |
-
left: 3px;
|
622 |
-
}
|
623 |
-
|
624 |
-
html[dir="rtl"] .select2-container-multi .select2-search-choic
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|