Redux Framework - Version 3.3.9

Version Description

  • Fixed: #1775 - Call to undefined function is_customize_preview() in pre WP 4.0.
  • Fixed: Issue where in some cases tracking still occuring after opt-out.
  • Modified: Documentation URL.
  • Fixed: #1742 - Sidebar subsections don't always expand.
  • Fixed: #1758 - Thanks @echo1consulting!
  • Added: 'hidden' to menu_type argument to allow for hidden menus until available.
  • Fixed: #1749 - Remove font-wight and font-style from css output when not in use.
  • Modified: Added the "redux/options/{$this->args['opt_name']}/compiler/advanced" hook for more advanced compiling.
  • Added: Suggestions as per #1709. Thanks @echo1consulting.
  • Modified: Removed a cURL instance from the core and fixed the developer ad resizing.
  • Fixed: PHP 5.2 issues. sigh
Download this release

Release Info

Developer dovyp
Plugin Icon 128x128 Redux Framework
Version 3.3.9
Comparing to
See all releases

Code changes from version 3.3.8 to 3.3.9

Files changed (51) hide show
  1. CHANGELOG.md +38 -0
  2. README.txt +25 -1
  3. ReduxCore/assets/js/redux.js +75 -38
  4. ReduxCore/assets/js/redux.min.js +2 -2
  5. ReduxCore/extensions/customizer/extension_customizer.php +38 -35
  6. ReduxCore/framework.php +101 -63
  7. ReduxCore/inc/class.p.php +292 -0
  8. ReduxCore/inc/class.redux_functions.php +244 -244
  9. ReduxCore/inc/class.redux_helpers.php +6 -0
  10. ReduxCore/inc/class.redux_themecheck.php +123 -0
  11. ReduxCore/inc/fields/color_rgba/field_color_rgba.php +2 -2
  12. ReduxCore/inc/fields/raw/field_raw.php +1 -1
  13. ReduxCore/inc/fields/slider/field_slider.php +2 -2
  14. ReduxCore/inc/fields/typography/field_typography.php +10 -0
  15. ReduxCore/inc/p.php +1 -1
  16. ReduxCore/inc/tracking.php +9 -9
  17. ReduxCore/inc/welcome.php +490 -420
  18. ReduxCore/languages/ar.mo +0 -0
  19. ReduxCore/languages/bg_BG.mo +0 -0
  20. ReduxCore/languages/de_DE.mo +0 -0
  21. ReduxCore/languages/el.mo +0 -0
  22. ReduxCore/languages/es_ES.mo +0 -0
  23. ReduxCore/languages/es_MX.mo +0 -0
  24. ReduxCore/languages/fa_IR.mo +0 -0
  25. ReduxCore/languages/fi.mo +0 -0
  26. ReduxCore/languages/fr_FR.mo +0 -0
  27. ReduxCore/languages/he_IL.mo +0 -0
  28. ReduxCore/languages/hi_IN.mo +0 -0
  29. ReduxCore/languages/hr.mo +0 -0
  30. ReduxCore/languages/hu_HU.mo +0 -0
  31. ReduxCore/languages/id_ID.mo +0 -0
  32. ReduxCore/languages/it_IT.mo +0 -0
  33. ReduxCore/languages/km.mo +0 -0
  34. ReduxCore/languages/ne_NP.mo +0 -0
  35. ReduxCore/languages/nl_NL.mo +0 -0
  36. ReduxCore/languages/pl_PL.mo +0 -0
  37. ReduxCore/languages/pt_BR.mo +0 -0
  38. ReduxCore/languages/pt_PT.mo +0 -0
  39. ReduxCore/languages/redux-framework.pot +136 -137
  40. ReduxCore/languages/ro_RO.mo +0 -0
  41. ReduxCore/languages/ru_RU.mo +0 -0
  42. ReduxCore/languages/sk_SK.mo +0 -0
  43. ReduxCore/languages/sl_SI.mo +0 -0
  44. ReduxCore/languages/sv_SE.mo +0 -0
  45. ReduxCore/languages/th.mo +0 -0
  46. ReduxCore/languages/tr_TR.mo +0 -0
  47. ReduxCore/languages/zh_CN.mo +0 -0
  48. ReduxCore/languages/zh_CN.po +1060 -0
  49. redux-framework.php +2 -2
  50. sample/barebones-config.php +218 -193
  51. sample/sample-config.php +4 -3
CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
  # Redux Framework Changelog
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ## 3.3.8
4
  * Modified: Updated potomo, thanks @shivapoudel.
5
  * Added: Grunt checktextdomain and made improvements. Thanks @shivapoudel.
1
  # Redux Framework Changelog
2
 
3
+ ## 3.3.9
4
+ * Fixed: #1775 - Call to undefined function is_customize_preview() in pre WP 4.0.
5
+ * Fixed: Issue where in some cases tracking still occuring after opt-out.
6
+ * Modified: Documentation URL.
7
+
8
+ ## 3.3.8.8
9
+ * Fixed: #1742 - Sidebar subsections don't always expand.
10
+
11
+ ## 3.3.8.7
12
+ * Fixed: #1758 - Thanks @echo1consulting!
13
+ * Added: 'hidden' to menu_type argument to allow for hidden menus until available.
14
+
15
+ ## 3.3.8.6
16
+ * Fixed: #1749 - Remove font-wight and font-style from css output when not in use.
17
+
18
+ ## 3.3.8.5
19
+ * Modified: Added the "redux/options/{$this->args['opt_name']}/compiler/advanced" hook for more advanced compiling.
20
+ * Added: Suggestions as per #1709. Thanks @echo1consulting.
21
+
22
+ ## 3.3.8.4
23
+ * Modified: Removed a cURL instance from the core and fixed the developer ad resizing.
24
+ * Fixed: PHP 5.2 issues. *sigh*
25
+
26
+ ## 3.3.8.3
27
+ * Added: #1593 - Great pull request by @JonasDoebertin. Now you can enqueue dynamic output to the login screen or admin backend.
28
+
29
+ ## 3.3.8.2
30
+ * Fixed: Customizer wasn't saving at all! That's been like 4 months. No one's reported it. Hmm.
31
+ * Fixed: #1702 - Customizer only fields were being erased on panel save.
32
+
33
+ ## 3.3.8.1
34
+ * Fixed: Various Theme-Check errors with languages.
35
+ * Added: Theme-Check class to help devs know what is what.
36
+ * Fixed: The way we include files from include_once to require_once everywhere.
37
+ * Modified: Language files to reflect new strings.
38
+ * Modified: Formatted a bunch of old class files.
39
+ * Added: Notice on the updates for non-devs to use the new dev_mode disabler plugin and notify their developer. ;)
40
+
41
  ## 3.3.8
42
  * Modified: Updated potomo, thanks @shivapoudel.
43
  * Added: Grunt checktextdomain and made improvements. Thanks @shivapoudel.
README.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
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.0
7
- Stable tag: 3.3.8
8
  License: GPLv3 or later
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -125,6 +125,30 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re
125
 
126
  == Changelog ==
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  = 3.3.8 =
129
  * Modified: Updated potomo, thanks @shivapoudel.
130
  * Added: Grunt checktextdomain and made improvements. Thanks @shivapoudel.
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.0
7
+ Stable tag: 3.3.9
8
  License: GPLv3 or later
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
125
 
126
  == Changelog ==
127
 
128
+ = 3.3.9 =
129
+ * Fixed: #1775 - Call to undefined function is_customize_preview() in pre WP 4.0.
130
+ * Fixed: Issue where in some cases tracking still occuring after opt-out.
131
+ * Modified: Documentation URL.
132
+ * Fixed: #1742 - Sidebar subsections don't always expand.
133
+ * Fixed: #1758 - Thanks @echo1consulting!
134
+ * Added: 'hidden' to menu_type argument to allow for hidden menus until available.
135
+ * Fixed: #1749 - Remove font-wight and font-style from css output when not in use.
136
+ * Modified: Added the "redux/options/{$this->args['opt_name']}/compiler/advanced" hook for more advanced compiling.
137
+ * Added: Suggestions as per #1709. Thanks @echo1consulting.
138
+ * Modified: Removed a cURL instance from the core and fixed the developer ad resizing.
139
+ * Fixed: PHP 5.2 issues. *sigh*
140
+
141
+ = 3.3.8.3 =
142
+ * Added: #1593 - Great pull request by @JonasDoebertin. Now you can enqueue dynamic output to the login screen or admin backend.
143
+ * Fixed: Customizer wasn't saving at all! That's been like 4 months. No one's reported it. Hmm.
144
+ * Fixed: #1702 - Customizer only fields were being erased on panel save.
145
+ * Fixed: Various Theme-Check errors with languages.
146
+ * Added: Theme-Check class to help devs know what is what.
147
+ * Fixed: The way we include files from include_once to require_once everywhere.
148
+ * Modified: Language files to reflect new strings.
149
+ * Modified: Formatted a bunch of old class files.
150
+ * Added: Notice on the updates for non-devs to use the new dev_mode disabler plugin and notify their developer. ;)
151
+
152
  = 3.3.8 =
153
  * Modified: Updated potomo, thanks @shivapoudel.
154
  * Added: Grunt checktextdomain and made improvements. Thanks @shivapoudel.
ReduxCore/assets/js/redux.js CHANGED
@@ -51,11 +51,11 @@
51
  $( '#toplevel_page_' + redux.args.slug + ' .wp-submenu a, #wp-admin-bar-' + redux.args.slug + ' a.ab-item' ).click(
52
  function( e ) {
53
 
54
- if ( ( $( '#toplevel_page_' + redux.args.slug ).hasClass( 'wp-menu-open' ) || $( this ).hasClass( 'ab-item' ) ) && !$(this ).parents('ul.ab-submenu:first' ).hasClass('ab-sub-secondary') ) {
55
  e.preventDefault();
56
  var url = $( this ).attr( 'href' ).split( '&tab=' );
57
  $( '#' + url[1] + '_section_group_li_a' ).click();
58
- $( this ).parents( 'ul:first' ).find('.current' ).removeClass( 'current' );
59
  $( this ).addClass( 'current' );
60
  $( this ).parent().addClass( 'current' );
61
  return false;
@@ -301,8 +301,9 @@
301
  }
302
  var el = link.parents( '.redux-container:first' );
303
  var relid = link.data( 'rel' ); // The group ID of interest
304
- var oldid = el.find( '.redux-group-tab-link-li.active .redux-group-tab-link-a' ).data( 'rel' );
305
 
 
306
 
307
  if ( oldid === relid ) {
308
  return;
@@ -356,12 +357,20 @@
356
  el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ).find( 'ul.subsection' ).slideDown();
357
 
358
  if ( el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).length ) {
359
- //console.log('oldid is parent')
 
 
360
  el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).slideUp(
361
  'fast', function() {
362
  el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ).removeClass( 'activeChild' );
363
  }
364
  );
 
 
 
 
 
 
365
  } else if ( el.find( '#' + oldid + '_section_group_li' ).parents( 'ul.subsection' ).length ) {
366
  //console.log('oldid is a child');
367
  if ( !el.find( '#' + oldid + '_section_group_li' ).parents( '#' + relid + '_section_group_li' ).length ) {
@@ -399,7 +408,7 @@
399
  $.redux.initFields();
400
  }
401
  );
402
- $('#toplevel_page_'+redux.args.slug ).find('.current' ).removeClass('current');
403
 
404
  }
405
  );
@@ -912,7 +921,7 @@
912
 
913
  $.redux.expandOptions = function( parent ) {
914
  var trigger = parent.find( '.expand_options' );
915
- var width = parent.find( '.redux-sidebar' ).width()-1;
916
  var id = $( '.redux-group-menu .active a' ).data( 'rel' ) + '_section_group';
917
 
918
  if ( trigger.hasClass( 'expanded' ) ) {
@@ -929,7 +938,7 @@
929
  {
930
  'margin-left': width
931
  }, 500, function() {
932
- parent.find( '.redux-main' ).attr('style', '');
933
  }
934
  );
935
 
@@ -976,11 +985,16 @@
976
  el.attr( 'data-width', width );
977
  }
978
  var height = el.attr( 'data-height' );
979
- if ( !height ) {
980
- height = el.height();
 
981
  el.attr( 'data-height', height );
 
 
 
982
  }
983
 
 
984
  // Check if the current width is larger than the max
985
  if ( width > maxWidth ) {
986
  ratio = maxWidth / width; // get ratio for scaling image
@@ -988,8 +1002,10 @@
988
  el.css( "height", height * ratio ); // Scale height based on ratio
989
  height = height * ratio; // Reset height to match scaled image
990
  width = width * ratio; // Reset width to match scaled image
 
991
  } else {
992
  el.css( "width", 'auto' ); // Set new height
 
993
  }
994
 
995
  // Check if current height is larger than max
@@ -999,8 +1015,18 @@
999
  el.css( "width", width * ratio ); // Scale width based on ratio
1000
  width = width * ratio; // Reset width to match scaled image
1001
  height = height * ratio; // Reset height to match scaled image
 
 
1002
  } else {
1003
  el.css( "height", 'auto' ); // Set new height
 
 
 
 
 
 
 
 
1004
  }
1005
 
1006
  if ( $( '#redux-header .redux_field_search' ) ) {
@@ -1039,42 +1065,53 @@
1039
  $( document ).ready(
1040
  function() {
1041
  if ( redux.rAds ) {
1042
- $( '#redux-header' ).append( '<div class="rAds"></div>' );
1043
- var el = $( '#redux-header' );
1044
- el.css( 'position', 'relative' );
1045
-
1046
- el.find( '.rAds' ).attr(
1047
- 'style', 'position:absolute; top: 6px; right: 6px; display:block !important;overflow:hidden;'
1048
- ).css( 'left', '-99999px' );
1049
- el.find( '.rAds' ).html( redux.rAds.replace( /<br\s?\/?>/, '' ) );
1050
- var rAds = el.find( '.rAds' );
1051
-
1052
- var maxHeight = el.height();
1053
- var maxWidth = el.width() - el.find( '.display_header' ).width() - 30;
1054
-
1055
- $( rAds ).css( 'height', maxHeight ).css( 'max-width', maxWidth ).css( 'width', maxWidth );
1056
-
1057
- rAds.find( 'a' ).css( 'float', 'right' ).css( 'line-height', el.height() + 'px' ).css(
1058
- 'margin-left', '5px'
1059
- );
 
1060
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1061
 
1062
- $( document ).ajaxComplete(
1063
- function() {
1064
- setTimeout(
1065
  function() {
1066
  $.redux.resizeAds();
1067
- }, 1500
1068
  );
1069
- $( document ).unbind( 'ajaxComplete' );
1070
- }
1071
  );
1072
 
1073
- $( window ).resize(
1074
- function() {
1075
- $.redux.resizeAds();
1076
- }
1077
- );
1078
  }
1079
  }
1080
  );
51
  $( '#toplevel_page_' + redux.args.slug + ' .wp-submenu a, #wp-admin-bar-' + redux.args.slug + ' a.ab-item' ).click(
52
  function( e ) {
53
 
54
+ if ( ( $( '#toplevel_page_' + redux.args.slug ).hasClass( 'wp-menu-open' ) || $( this ).hasClass( 'ab-item' ) ) && !$( this ).parents( 'ul.ab-submenu:first' ).hasClass( 'ab-sub-secondary' ) ) {
55
  e.preventDefault();
56
  var url = $( this ).attr( 'href' ).split( '&tab=' );
57
  $( '#' + url[1] + '_section_group_li_a' ).click();
58
+ $( this ).parents( 'ul:first' ).find( '.current' ).removeClass( 'current' );
59
  $( this ).addClass( 'current' );
60
  $( this ).parent().addClass( 'current' );
61
  return false;
301
  }
302
  var el = link.parents( '.redux-container:first' );
303
  var relid = link.data( 'rel' ); // The group ID of interest
304
+ var oldid = el.find( '.redux-group-tab-link-li.active:first .redux-group-tab-link-a' ).data( 'rel' );
305
 
306
+ //console.log('id: '+relid+' oldid: '+oldid);
307
 
308
  if ( oldid === relid ) {
309
  return;
357
  el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ).find( 'ul.subsection' ).slideDown();
358
 
359
  if ( el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).length ) {
360
+ //console.log('oldid is parent');
361
+ //console.log('#' + relid + '_section_group_li');
362
+
363
  el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).slideUp(
364
  'fast', function() {
365
  el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ).removeClass( 'activeChild' );
366
  }
367
  );
368
+ var newParent = el.find( '#' + relid + '_section_group_li' ).parents( '.hasSubSections:first' );
369
+ if ( newParent.length > 0 ) {
370
+ el.find( '#' + relid + '_section_group_li' ).removeClass( 'active' );
371
+ relid = newParent.find( '.redux-group-tab-link-a:first' ).data( 'rel' );
372
+ el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ).find( 'ul.subsection' ).slideDown();
373
+ }
374
  } else if ( el.find( '#' + oldid + '_section_group_li' ).parents( 'ul.subsection' ).length ) {
375
  //console.log('oldid is a child');
376
  if ( !el.find( '#' + oldid + '_section_group_li' ).parents( '#' + relid + '_section_group_li' ).length ) {
408
  $.redux.initFields();
409
  }
410
  );
411
+ $( '#toplevel_page_' + redux.args.slug ).find( '.current' ).removeClass( 'current' );
412
 
413
  }
414
  );
921
 
922
  $.redux.expandOptions = function( parent ) {
923
  var trigger = parent.find( '.expand_options' );
924
+ var width = parent.find( '.redux-sidebar' ).width() - 1;
925
  var id = $( '.redux-group-menu .active a' ).data( 'rel' ) + '_section_group';
926
 
927
  if ( trigger.hasClass( 'expanded' ) ) {
938
  {
939
  'margin-left': width
940
  }, 500, function() {
941
+ parent.find( '.redux-main' ).attr( 'style', '' );
942
  }
943
  );
944
 
985
  el.attr( 'data-width', width );
986
  }
987
  var height = el.attr( 'data-height' );
988
+ var eHeight = el.height();
989
+ if ( !height || eHeight > height ) {
990
+ height = eHeight;
991
  el.attr( 'data-height', height );
992
+ el.css( "width", 'auto' );
993
+ el.attr( 'data-width', el.width() );
994
+ width = el.width();
995
  }
996
 
997
+
998
  // Check if the current width is larger than the max
999
  if ( width > maxWidth ) {
1000
  ratio = maxWidth / width; // get ratio for scaling image
1002
  el.css( "height", height * ratio ); // Scale height based on ratio
1003
  height = height * ratio; // Reset height to match scaled image
1004
  width = width * ratio; // Reset width to match scaled image
1005
+
1006
  } else {
1007
  el.css( "width", 'auto' ); // Set new height
1008
+
1009
  }
1010
 
1011
  // Check if current height is larger than max
1015
  el.css( "width", width * ratio ); // Scale width based on ratio
1016
  width = width * ratio; // Reset width to match scaled image
1017
  height = height * ratio; // Reset height to match scaled image
1018
+
1019
+
1020
  } else {
1021
  el.css( "height", 'auto' ); // Set new height
1022
+
1023
+ }
1024
+
1025
+ var test = ($( document.getElementById( 'redux-header' ) ).height() - el.height()) / 2;
1026
+ if ( test > 0 ) {
1027
+ el.css( "margin-top", test );
1028
+ } else {
1029
+ el.css( "margin-top", 0 );
1030
  }
1031
 
1032
  if ( $( '#redux-header .redux_field_search' ) ) {
1065
  $( document ).ready(
1066
  function() {
1067
  if ( redux.rAds ) {
1068
+ setTimeout(
1069
+ function() {
1070
+ $( '#redux-header' ).append( '<div class="rAds"></div>' );
1071
+ var el = $( '#redux-header' );
1072
+ el.css( 'position', 'relative' );
1073
+
1074
+ el.find( '.rAds' ).attr(
1075
+ 'style',
1076
+ 'position:absolute; top: 6px; right: 6px; display:block !important;overflow:hidden;'
1077
+ ).css( 'left', '-99999px' );
1078
+ el.find( '.rAds' ).html( redux.rAds.replace( /<br\s?\/?>/, '' ) );
1079
+ var rAds = el.find( '.rAds' );
1080
+
1081
+ var maxHeight = el.height();
1082
+ var maxWidth = el.width() - el.find( '.display_header' ).width() - 30;
1083
+
1084
+ rAds.find( 'a' ).css( 'float', 'right' ).css( 'line-height', el.height() + 'px' ).css(
1085
+ 'margin-left', '5px'
1086
+ );
1087
 
1088
+ $( document ).ajaxComplete(
1089
+ function() {
1090
+ rAds.find( 'a' ).hide();
1091
+ setTimeout(
1092
+ function() {
1093
+ $.redux.resizeAds();
1094
+ rAds.find( 'a' ).fadeIn();
1095
+ }, 1400
1096
+ );
1097
+ setTimeout(
1098
+ function() {
1099
+ $.redux.resizeAds();
1100
+
1101
+ }, 1500
1102
+ );
1103
+ $( document ).unbind( 'ajaxComplete' );
1104
+ }
1105
+ );
1106
 
1107
+ $( window ).resize(
 
 
1108
  function() {
1109
  $.redux.resizeAds();
1110
+ }
1111
  );
1112
+ }, 400
 
1113
  );
1114
 
 
 
 
 
 
1115
  }
1116
  }
1117
  );
ReduxCore/assets/js/redux.min.js CHANGED
@@ -1,3 +1,3 @@
1
  function redux_change(a){jQuery("body").trigger("check_dependencies",a),a.hasClass("compiler")&&jQuery("#redux-compiler-hook").val(1),window.onbeforeunload=confirmOnPageExit;var b=jQuery(a).parents(".redux-container: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 c=jQuery(a).closest(".redux-group-tab").attr("id"),d=parseInt(b.find(".redux-field-errors span").text())-1,e=parseInt(b.find(".redux-field-warnings span").text())-1;if(0>=d)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 f=c.split("_");f=f[0];var g=b.find('.redux-group-tab-link-a[data-key="'+f+'"]').parents(".redux-group-tab-link-li:first"),h=parseInt(g.find(".redux-menu-error:first").text())-1;0>=h?g.find(".redux-menu-error:first").fadeOut().remove():g.find(".redux-menu-error:first").text(h);var i=parseInt(g.find(".redux-menu-warning:first").text())-1;0>=i?g.find(".redux-menu-warning:first").fadeOut().remove():g.find(".redux-menu-warning:first").text(i),b.find(".redux-field-errors span").text(d),b.find(".redux-field-warning span").text(e)}var j=jQuery("#"+c+"_li").parents(".hasSubSections:first");0!==j.length&&0===j.find(".redux-menu-error").length&&j.find(".hasError").removeClass("hasError")}redux.args.disable_save_warn||b.find(".redux-save-warn").slideDown()}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:"&times;"})),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}};
2
- 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){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(),left:b.scrollLeft()};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.checkRequired(),a.redux.initEvents(),a.redux.initQtip(),a.redux.tabCheck(),a.redux.notices(),a.redux.tabControl(),a.redux.devFunctions()}),a.redux.initEvents=function(){a(".redux-action_bar, .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")){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('input[name="'+redux.args.opt_name+'[defaults]"]').click(function(){return confirm(redux.args.reset_confirm)?void(window.onbeforeunload=null):!1}),a('input[name="'+redux.args.opt_name+'[defaults-section]"]').click(function(){return confirm(redux.args.reset_section_confirm)?void(window.onbeforeunload=null):!1}),a(".expand_options").click(function(b){return b.preventDefault(),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}),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-save").click(function(){window.onbeforeunload=null})},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-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 .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]}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=");
3
- (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")):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")):(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")}):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-field-init:visible").each(function(){var b=a(this).attr("data-type");redux.field_objects[b]&&redux.field_objects[b].init()})},a.redux.notices=function(){void 0!==redux.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-container").each(function(){var b=a(this),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")}}));var d=b.find(".redux-field-warning").length;d>0&&(b.find(".redux-field-warnings span").text(d),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">'+total+"</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]),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(e)?-1!=a.inArray(b,e)&&(d=!0):b==e?d=!0:a.isArray(b)&&-1!=a.inArray(e,b)&&(d=!0);break;case"!=":case"not":a.isArray(e)?-1==a.inArray(b,e)&&(d=!0):b!=e?d=!0:a.isArray(b)&&-1==a.inArray(e,b)&&(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":-1!=b.toString().indexOf(e)&&(d=!0);break;case"doesnt_contain":case"not_contain":-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("#info_bar").width()-4;a("#info_bar").isOnScreen()||a("#redux-footer-sticky").isOnScreen()?(a("#redux-sticky").removeClass("sticky-save-warn"),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-sticky").addClass("sticky-save-warn"),a("#redux-footer").css({position:"fixed",bottom:"0",width:b}),a("#redux-footer").addClass("sticky-footer-fixed"),a(".redux-save-warn").css("left",a("#redux-sticky").offset().left),a("#redux-sticky-padder").show())},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");g||(g=b.height(),b.attr("data-height",g)),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"),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(){if(redux.rAds){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"),d=b.height(),e=b.width()-b.find(".display_header").width()-30;a(c).css("height",d).css("max-width",e).css("width",e),c.find("a").css("float","right").css("line-height",b.height()+"px").css("margin-left","5px"),a(document).ajaxComplete(function(){setTimeout(function(){a.redux.resizeAds()},1500),a(document).unbind("ajaxComplete")}),a(window).resize(function(){a.redux.resizeAds()})}})}(jQuery),jQuery.noConflict();var confirmOnPageExit=function(a){a=a||window.event;var b=redux.args.save_pending;return a&&(a.returnValue=b),window.onbeforeunload=null,b};
1
  function redux_change(a){jQuery("body").trigger("check_dependencies",a),a.hasClass("compiler")&&jQuery("#redux-compiler-hook").val(1),window.onbeforeunload=confirmOnPageExit;var b=jQuery(a).parents(".redux-container: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 c=jQuery(a).closest(".redux-group-tab").attr("id"),d=parseInt(b.find(".redux-field-errors span").text())-1,e=parseInt(b.find(".redux-field-warnings span").text())-1;if(0>=d)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 f=c.split("_");f=f[0];var g=b.find('.redux-group-tab-link-a[data-key="'+f+'"]').parents(".redux-group-tab-link-li:first"),h=parseInt(g.find(".redux-menu-error:first").text())-1;0>=h?g.find(".redux-menu-error:first").fadeOut().remove():g.find(".redux-menu-error:first").text(h);var i=parseInt(g.find(".redux-menu-warning:first").text())-1;0>=i?g.find(".redux-menu-warning:first").fadeOut().remove():g.find(".redux-menu-warning:first").text(i),b.find(".redux-field-errors span").text(d),b.find(".redux-field-warning span").text(e)}var j=jQuery("#"+c+"_li").parents(".hasSubSections:first");0!==j.length&&0===j.find(".redux-menu-error").length&&j.find(".hasError").removeClass("hasError")}redux.args.disable_save_warn||b.find(".redux-save-warn").slideDown()}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:"&times;"})),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}};
2
+ 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){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(),left:b.scrollLeft()};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.checkRequired(),a.redux.initEvents(),a.redux.initQtip(),a.redux.tabCheck(),a.redux.notices(),a.redux.tabControl(),a.redux.devFunctions()}),a.redux.initEvents=function(){a(".redux-action_bar, .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")){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('input[name="'+redux.args.opt_name+'[defaults]"]').click(function(){return confirm(redux.args.reset_confirm)?void(window.onbeforeunload=null):!1}),a('input[name="'+redux.args.opt_name+'[defaults-section]"]').click(function(){return confirm(redux.args.reset_section_confirm)?void(window.onbeforeunload=null):!1}),a(".expand_options").click(function(b){return b.preventDefault(),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}),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-save").click(function(){window.onbeforeunload=null})},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-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=");
3
+ (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"),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-field-init:visible").each(function(){var b=a(this).attr("data-type");redux.field_objects[b]&&redux.field_objects[b].init()})},a.redux.notices=function(){void 0!==redux.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-container").each(function(){var b=a(this),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")}}));var d=b.find(".redux-field-warning").length;d>0&&(b.find(".redux-field-warnings span").text(d),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">'+total+"</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]),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(e)?-1!=a.inArray(b,e)&&(d=!0):b==e?d=!0:a.isArray(b)&&-1!=a.inArray(e,b)&&(d=!0);break;case"!=":case"not":a.isArray(e)?-1==a.inArray(b,e)&&(d=!0):b!=e?d=!0:a.isArray(b)&&-1==a.inArray(e,b)&&(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":-1!=b.toString().indexOf(e)&&(d=!0);break;case"doesnt_contain":case"not_contain":-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("#info_bar").width()-4;a("#info_bar").isOnScreen()||a("#redux-footer-sticky").isOnScreen()?(a("#redux-sticky").removeClass("sticky-save-warn"),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-sticky").addClass("sticky-save-warn"),a("#redux-footer").css({position:"fixed",bottom:"0",width:b}),a("#redux-footer").addClass("sticky-footer-fixed"),a(".redux-save-warn").css("left",a("#redux-sticky").offset().left),a("#redux-sticky-padder").show())},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};
ReduxCore/extensions/customizer/extension_customizer.php CHANGED
@@ -76,17 +76,23 @@
76
  customize_controls_print_footer_scripts
77
  */
78
 
79
- if ( ! isset( $_POST['customized'] ) || $pagenow == "admin-ajax.php" ) {
80
- if ( current_user_can ( $this->parent->args['page_permissions'])) {
81
- add_action( 'customize_register', array($this, '_register_customizer_controls' ) ); // Create controls
 
 
 
82
  }
83
  }
84
 
85
- if ( isset( $_POST['customized'] ) ) {
86
- if ( $pagenow == "admin-ajax.php" && $_POST['action'] == 'customize_save' ) {
87
  //$this->parent->
88
  }
89
- add_action( "redux/options/{$this->parent->args['opt_name']}/options", array( $this, '_override_values' ), 100 );
 
 
 
90
  add_action( 'customize_save', array( $this, 'customizer_save_before' ) ); // Before save
91
  add_action( 'customize_save_after', array( &$this, 'customizer_save_after' ) ); // After save
92
  add_action( 'wp_head', array( $this, 'customize_preview_init' ) );
@@ -104,10 +110,10 @@
104
  }
105
 
106
  public function _override_values( $data ) {
107
- if ( isset( $_POST['customized'] ) ) {
108
  $this->orig_options = $this->parent->options;
109
  $options = json_decode( stripslashes_deep( $_POST['customized'] ), true );
110
- if( !empty( $options ) && is_array( $options ) ){
111
  foreach ( $options as $key => $value ) {
112
  if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
113
  $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) );
@@ -115,9 +121,9 @@
115
  $GLOBALS[ $this->parent->args['global_variable'] ][ $key ] = $value;
116
  $this->parent->options[ $key ] = $value;
117
  }
118
- }
119
  }
120
-
121
  }
122
 
123
  return $data;
@@ -185,7 +191,7 @@
185
  continue;
186
  }
187
  }
188
-
189
  // No errors please
190
  if ( ! isset( $section['desc'] ) ) {
191
  $section['desc'] = "";
@@ -200,12 +206,12 @@
200
  if ( empty( $section['id'] ) ) {
201
  $section['id'] = strtolower( str_replace( " ", "", $section['title'] ) );
202
  }
203
-
204
  // No title is present, let's show what section is missing a title
205
  if ( ! isset( $section['title'] ) ) {
206
  print_r( $section );
207
  }
208
-
209
  // Let's set a default priority
210
  if ( empty( $section['priority'] ) ) {
211
  $section['priority'] = $order['heading'];
@@ -220,14 +226,14 @@
220
 
221
 
222
  foreach ( $section['fields'] as $skey => $option ) {
223
-
224
  // Evaluate section permissions
225
  if ( isset( $option['permissions'] ) ) {
226
  if ( ! current_user_can( $option['permissions'] ) ) {
227
  continue;
228
  }
229
  }
230
-
231
  if ( isset( $option['customizer'] ) && $option['customizer'] === false ) {
232
  continue;
233
  }
@@ -261,12 +267,12 @@
261
  }
262
 
263
  $customSetting = array(
264
- 'default' => $option['default'],
265
- 'type' => 'option',
266
- 'capabilities' => 'edit_theme_options',
267
  //'capabilities' => $this->parent->args['page_permissions'],
268
- 'transport' => 'refresh',
269
- 'theme_supports' => '',
270
  'sanitize_callback' => '__return_false',
271
  //'sanitize_callback' => array( $this, '_field_validation' ),
272
  //'sanitize_js_callback' =>array( &$parent, '_field_input' ),
@@ -420,14 +426,15 @@
420
  //if( isset( $_POST['customized'] ) ) {
421
  $options = json_decode( stripslashes_deep( $_POST['customized'] ), true );
422
  $compiler = false;
423
- $changed = array();
424
 
425
  foreach ( $options as $key => $value ) {
426
  if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
427
  $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) );
428
 
429
  if ( ! isset( $this->orig_options[ $key ] ) || $this->orig_options[ $key ] != $value || ( isset( $this->orig_options[ $key ] ) && ! empty( $this->orig_options[ $key ] ) && empty( $value ) ) ) {
430
- $changed[ $key ] = $value;
 
431
  if ( isset( $this->parent->compiler_fields[ $key ] ) ) {
432
  $compiler = true;
433
  }
@@ -435,21 +442,17 @@
435
  }
436
  }
437
 
438
- if ( ! empty( $changed ) ) {
439
- setcookie( "redux-saved-{$this->parent->args['opt_name']}", 1, time() + 1000, "/" );
440
- }
441
-
442
- if ( $compiler ) {
443
- // Have to set this to stop the output of the CSS and typography stuff.
444
- $this->parent->no_output = true;
445
- $this->parent->_enqueue_output();
446
- do_action( "redux/options/{$this->parent->args['opt_name']}/compiler", $this->parent->options, $this->parent->compilerCSS );
447
  }
448
 
449
- //}
450
- // print_r($wp_customize);
451
- //exit();
452
- //return $wp_customize;
453
  }
454
 
455
  /**
76
  customize_controls_print_footer_scripts
77
  */
78
 
79
+ if ( ! Redux_Helpers::is_customize_preview() || $pagenow == "admin-ajax.php" ) {
80
+ if ( current_user_can( $this->parent->args['page_permissions'] ) ) {
81
+ add_action( 'customize_register', array(
82
+ $this,
83
+ '_register_customizer_controls'
84
+ ) ); // Create controls
85
  }
86
  }
87
 
88
+ if ( Redux_Helpers::is_customize_preview() ) {
89
+ if ( $pagenow == "admin-ajax.php" && isset( $_POST['action'] ) && $_POST['action'] == 'customize_save' ) {
90
  //$this->parent->
91
  }
92
+ add_action( "redux/options/{$this->parent->args['opt_name']}/options", array(
93
+ $this,
94
+ '_override_values'
95
+ ), 100 );
96
  add_action( 'customize_save', array( $this, 'customizer_save_before' ) ); // Before save
97
  add_action( 'customize_save_after', array( &$this, 'customizer_save_after' ) ); // After save
98
  add_action( 'wp_head', array( $this, 'customize_preview_init' ) );
110
  }
111
 
112
  public function _override_values( $data ) {
113
+ if ( Redux_Helpers::is_customize_preview() && isset( $_POST['customized'] ) ) {
114
  $this->orig_options = $this->parent->options;
115
  $options = json_decode( stripslashes_deep( $_POST['customized'] ), true );
116
+ if ( ! empty( $options ) && is_array( $options ) ) {
117
  foreach ( $options as $key => $value ) {
118
  if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
119
  $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) );
121
  $GLOBALS[ $this->parent->args['global_variable'] ][ $key ] = $value;
122
  $this->parent->options[ $key ] = $value;
123
  }
124
+ }
125
  }
126
+
127
  }
128
 
129
  return $data;
191
  continue;
192
  }
193
  }
194
+
195
  // No errors please
196
  if ( ! isset( $section['desc'] ) ) {
197
  $section['desc'] = "";
206
  if ( empty( $section['id'] ) ) {
207
  $section['id'] = strtolower( str_replace( " ", "", $section['title'] ) );
208
  }
209
+
210
  // No title is present, let's show what section is missing a title
211
  if ( ! isset( $section['title'] ) ) {
212
  print_r( $section );
213
  }
214
+
215
  // Let's set a default priority
216
  if ( empty( $section['priority'] ) ) {
217
  $section['priority'] = $order['heading'];
226
 
227
 
228
  foreach ( $section['fields'] as $skey => $option ) {
229
+
230
  // Evaluate section permissions
231
  if ( isset( $option['permissions'] ) ) {
232
  if ( ! current_user_can( $option['permissions'] ) ) {
233
  continue;
234
  }
235
  }
236
+
237
  if ( isset( $option['customizer'] ) && $option['customizer'] === false ) {
238
  continue;
239
  }
267
  }
268
 
269
  $customSetting = array(
270
+ 'default' => $option['default'],
271
+ 'type' => 'option',
272
+ 'capabilities' => 'edit_theme_options',
273
  //'capabilities' => $this->parent->args['page_permissions'],
274
+ 'transport' => 'refresh',
275
+ 'theme_supports' => '',
276
  'sanitize_callback' => '__return_false',
277
  //'sanitize_callback' => array( $this, '_field_validation' ),
278
  //'sanitize_js_callback' =>array( &$parent, '_field_input' ),
426
  //if( isset( $_POST['customized'] ) ) {
427
  $options = json_decode( stripslashes_deep( $_POST['customized'] ), true );
428
  $compiler = false;
429
+ $changed = false;
430
 
431
  foreach ( $options as $key => $value ) {
432
  if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
433
  $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) );
434
 
435
  if ( ! isset( $this->orig_options[ $key ] ) || $this->orig_options[ $key ] != $value || ( isset( $this->orig_options[ $key ] ) && ! empty( $this->orig_options[ $key ] ) && empty( $value ) ) ) {
436
+ $this->parent->options[ $key ] = $value;
437
+ $changed = true;
438
  if ( isset( $this->parent->compiler_fields[ $key ] ) ) {
439
  $compiler = true;
440
  }
442
  }
443
  }
444
 
445
+ if ( $changed ) {
446
+ $this->parent->set_options( $this->parent->options );
447
+ if ( $compiler ) {
448
+ // Have to set this to stop the output of the CSS and typography stuff.
449
+ $this->parent->no_output = true;
450
+ $this->parent->_enqueue_output();
451
+ do_action( "redux/options/{$this->parent->args['opt_name']}/compiler", $this->parent->options, $this->parent->compilerCSS );
452
+ do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this->parent );
453
+ }
454
  }
455
 
 
 
 
 
456
  }
457
 
458
  /**
ReduxCore/framework.php CHANGED
@@ -34,8 +34,8 @@
34
 
35
  if ( ! class_exists( 'ReduxFrameworkInstances' ) ) {
36
  // Instance Container
37
- include_once( dirname( __FILE__ ) . '/inc/class.redux_instances.php' );
38
- include_once( dirname( __FILE__ ) . '/inc/lib.redux_instances.php' );
39
 
40
  }
41
 
@@ -47,12 +47,16 @@
47
  if ( ! class_exists( 'ReduxFramework' ) ) {
48
 
49
  // General helper functions
50
- include_once( dirname( __FILE__ ) . '/inc/class.redux_helpers.php' );
51
 
52
  // General functions
53
- include_once( dirname( __FILE__ ) . '/inc/class.redux_functions.php' );
 
54
 
55
- include_once( dirname( __FILE__ ) . '/inc/class.redux_filesystem.php' );
 
 
 
56
 
57
  /**
58
  * Main ReduxFramework class
@@ -64,7 +68,7 @@
64
  // ATTENTION DEVS
65
  // Please update the build number with each push, no matter how small.
66
  // This will make for easier support when we ask users what version they are using.
67
- public static $_version = '3.3.8';
68
  public static $_dir;
69
  public static $_url;
70
  public static $_upload_dir;
@@ -76,11 +80,11 @@
76
 
77
  public static function init() {
78
  $dir = Redux_Helpers::cleanFilePath( dirname( __FILE__ ) );
79
-
80
  // Windows-proof constants: replace backward by forward slashes. Thanks to: @peterbouwmeester
81
  self::$_dir = trailingslashit( $dir );
82
  self::$wp_content_url = trailingslashit( Redux_Helpers::cleanFilePath( ( is_ssl() ? str_replace( 'http://', 'https://', WP_CONTENT_URL ) : WP_CONTENT_URL ) ) );
83
-
84
  // See if Redux is a plugin or not
85
  if ( strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_stylesheet_directory() ) ) !== false || strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_template_directory_uri() ) ) !== false || strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( WP_CONTENT_DIR . '/themes/' ) ) !== false ) {
86
  self::$_is_plugin = false;
@@ -90,7 +94,7 @@
90
  if ( ! function_exists( 'get_plugins' ) ) {
91
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
92
  }
93
-
94
  $is_plugin = false;
95
  foreach ( get_plugins() as $key => $value ) {
96
  if ( strpos( $key, 'redux-framework.php' ) !== false ) {
@@ -103,7 +107,7 @@
103
  }
104
  }
105
  }
106
-
107
  if ( self::$_is_plugin == true || self::$_as_plugin == true ) {
108
  self::$_url = plugin_dir_url( __FILE__ );
109
  } else {
@@ -120,6 +124,11 @@
120
  self::$_url = trailingslashit( self::$wp_content_url . $relative_url );
121
  }
122
  }
 
 
 
 
 
123
  }
124
 
125
  // ::init()
@@ -156,6 +165,7 @@
156
  public $typography = null; //values to generate google font CSS
157
  public $import_export = null;
158
  public $debug = null;
 
159
  private $show_hints = false;
160
  private $hidden_perm_fields = array(); // Hidden fields specified by 'permissions' arg.
161
  private $hidden_perm_sections = array(); // Hidden sections specified by 'permissions' arg.
@@ -316,7 +326,7 @@
316
  //
317
  // if ( isset($_GET['page']) && ($_GET['page'] == 'redux-about' || $_GET['page'] == 'redux-getting-started' || $_GET['page'] == 'redux-credits' || $_GET['page'] == 'redux-changelog' )) {
318
  // //logconsole('inc');
319
- // include_once( dirname( __FILE__ ) . '/inc/welcome.php' );
320
  // } else {
321
  // //logconsole('compare');
322
  // if (isset($_GET['page']) && $_GET['page'] == $this->args['page_slug']) {
@@ -354,7 +364,7 @@
354
 
355
  // Display admin notices in dev_mode
356
  if ( true == $this->args['dev_mode'] ) {
357
- include_once( self::$_dir . 'inc/debug.php' );
358
  $this->debug = new ReduxDebugObject( $this );
359
 
360
  if ( true == $this->args['update_notice'] ) {
@@ -374,25 +384,23 @@
374
  }
375
 
376
  // Output dynamic CSS
377
- add_action( 'wp_head', array( &$this, '_output_css' ), 150 );
378
  // Frontend: Maybe enqueue dynamic CSS and Google fonts
379
- // if( in_array( 'frontend', $this->args['output_location'] ) ) {
380
- // add_action( 'wp_head', array( &$this, '_output_css' ), 150 );
381
- // add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 );
382
- // }
383
 
384
  // Login page: Maybe enqueue dynamic CSS and Google fonts
385
- // if( in_array( 'login', $this->args['output_location'] ) ) {
386
- // add_action( 'login_head', array( &$this, '_output_css' ), 150 );
387
- // add_action( 'login_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 );
388
- // }
389
 
390
- // Enqueue dynamic CSS and Google fonts
391
- add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 );
392
- // if( in_array( 'admin', $this->args['output_location'] ) ) {
393
- // add_action( 'admin_head', array( &$this, '_output_css' ), 150 );
394
- // add_action( 'admin_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 );
395
- //}
396
 
397
 
398
  add_action( 'wp_print_scripts', array( $this, 'vc_fixes' ), 100 );
@@ -486,6 +494,8 @@
486
  // Initiate the compiler hook
487
  'output_tag' => true,
488
  // Print Output Tag
 
 
489
  'transient_time' => '',
490
  'default_show' => false,
491
  // If true, it shows the default value
@@ -629,7 +639,7 @@
629
  } // get_instance()
630
 
631
  private function _tracking() {
632
- include_once( dirname( __FILE__ ) . '/inc/tracking.php' );
633
  $tracking = Redux_Tracking::get_instance();
634
  $tracking->load( $this );
635
  } // _tracking()
@@ -734,7 +744,7 @@
734
  *
735
  * @param mixed $value the value of the option being added
736
  */
737
- private function set_options( $value = '' ) {
738
 
739
  $this->transients['last_save'] = time();
740
 
@@ -1160,9 +1170,9 @@
1160
  }
1161
  }
1162
 
1163
- if ( $field['type'] == "sortable" ) {
1164
  $this->options_defaults[ $field['id'] ] = array();
1165
- } elseif ($field['type'] == "image_select") {
1166
  $this->options_defaults[ $field['id'] ] = '';
1167
  } else {
1168
  $this->options_defaults[ $field['id'] ] = $field['options'];
@@ -1289,7 +1299,11 @@
1289
  public function _options_page() {
1290
  $this->import_export->in_field();
1291
 
1292
- if ( $this->args['menu_type'] == 'submenu' ) {
 
 
 
 
1293
  $this->add_submenu(
1294
  $this->args['page_parent'],
1295
  $this->args['page_title'],
@@ -1379,7 +1393,7 @@
1379
  $ct = wp_get_theme();
1380
  $theme_data = $ct;
1381
 
1382
- if ( ! is_super_admin() || ! is_admin_bar_showing() || ! $this->args['admin_bar'] ) {
1383
  return;
1384
  }
1385
 
@@ -1918,7 +1932,7 @@
1918
 
1919
  if ( isset( $this->args['dev_mode'] ) && $this->args['dev_mode'] == true ) {
1920
 
1921
- $base = ReduxFramework::$_url . 'inc/p.php?url=';
1922
  $url = $base . urlencode( 'http://ads.reduxframework.com/api/index.php?js&g&1&v=2' ) . '&proxy=' . urlencode( $base );
1923
  $this->localize_data['rAds'] = '<span data-id="1" class="mgv1_1"><script type="text/javascript">(function(){if (mysa_mgv1_1) return; var ma = document.createElement("script"); ma.type = "text/javascript"; ma.async = true; ma.src = "' . $url . '"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ma, s) })();var mysa_mgv1_1=true;</script></span>';
1924
  }
@@ -2089,30 +2103,30 @@
2089
 
2090
  // Default url values for enabling hints.
2091
  $dismiss = 'true';
2092
- $s = 'Enable';
2093
 
2094
  // Values for disabling hints.
2095
  if ( 'true' == $hint_status ) {
2096
  $dismiss = 'false';
2097
- $s = 'Disable';
2098
  }
2099
 
2100
  // Make URL
2101
  $url = '<a class="redux_hint_status" href="?dismiss=' . $dismiss . '&amp;id=hints&amp;page=' . $curPage . '&amp;tab=' . $curTab . '">' . $s . ' hints</a>';
2102
 
2103
- $event = 'moving the mouse over';
2104
  if ( 'click' == $this->args['hints']['tip_effect']['show']['event'] ) {
2105
- $event = 'clicking';
2106
  }
2107
 
2108
  // Construct message
2109
- $msg = 'Hints are tooltips that popup when ' . $event . ' the hint icon, offering addition information about the field in which they appear. They can be ' . strtolower( $s ) . 'd by using the link below.<br/><br/>' . $url;
2110
 
2111
  // Construct hint tab
2112
  $tab = array(
2113
  'id' => 'redux-hint-tab',
2114
  'title' => __( 'Hints', 'redux-framework' ),
2115
- 'content' => __( '<p>' . $msg . '</p>', 'redux-framework' )
2116
  );
2117
 
2118
  $screen->add_help_tab( $tab );
@@ -2355,9 +2369,6 @@
2355
  }
2356
  }
2357
 
2358
- if ( ! $display ) {
2359
- continue;
2360
- }
2361
 
2362
  // DOVY! Replace $k with $section['id'] when ready
2363
  /**
@@ -2402,10 +2413,14 @@
2402
  }
2403
  }
2404
 
2405
- add_settings_section( $this->args['opt_name'] . $k . '_section', $heading, array(
2406
- &$this,
2407
- '_section_desc'
2408
- ), $this->args['opt_name'] . $k . '_section_group' );
 
 
 
 
2409
 
2410
  $sectionIndent = false;
2411
  if ( isset( $section['fields'] ) ) {
@@ -2414,10 +2429,6 @@
2414
  continue; // You need a type!
2415
  }
2416
 
2417
- if ( isset( $field['customizer_only'] ) && $field['customizer_only'] == true ) {
2418
- continue; // ok
2419
- }
2420
-
2421
  /**
2422
  * filter 'redux/options/{opt_name}/field/{field.id}'
2423
  *
@@ -2426,16 +2437,17 @@
2426
  $field = apply_filters( "redux/options/{$this->args['opt_name']}/field/{$field['id']}/register", $field );
2427
 
2428
  $display = true;
 
2429
  if ( isset( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) {
2430
  if ( isset( $field['panel'] ) && $field['panel'] == false ) {
2431
  $display = false;
2432
  }
2433
  }
2434
-
2435
- if ( ! $display ) {
2436
- continue;
2437
  }
2438
 
 
2439
  // TODO AFTER GROUP WORKS - Remove IF statement
2440
  // if ( $field['type'] == "group" && isset( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) {
2441
  // if ( $this->args['dev_mode'] ) {
@@ -2625,14 +2637,18 @@
2625
 
2626
  $this->check_dependencies( $field );
2627
 
2628
- add_settings_field(
2629
- "{$fieldk}_field",
2630
- $th,
2631
- array( &$this, '_field_input' ),
2632
- "{$this->args['opt_name']}{$k}_section_group",
2633
- "{$this->args['opt_name']}{$k}_section",
2634
- $field
2635
- ); // checkbox
 
 
 
 
2636
  }
2637
  }
2638
  }
@@ -2677,6 +2693,14 @@
2677
  * @param string CSS that get sent to the compiler hook
2678
  */
2679
  do_action( "redux/options/{$this->args['opt_name']}/compiler", $this->options, $this->compilerCSS, $this->transients['changed_values'] );
 
 
 
 
 
 
 
 
2680
 
2681
  unset( $this->transients['run_compiler'] );
2682
  $this->set_transients();
@@ -2779,6 +2803,15 @@
2779
  */
2780
  public function _validate_options( $plugin_options ) {
2781
 
 
 
 
 
 
 
 
 
 
2782
  if ( ! empty( $this->hidden_perm_fields ) && is_array( $this->hidden_perm_fields ) ) {
2783
  foreach ( $this->hidden_perm_fields as $id => $data ) {
2784
  $plugin_options[ $id ] = $data;
@@ -2924,6 +2957,7 @@
2924
 
2925
  $this->transients['last_save_mode'] = "normal"; // Last save mode
2926
 
 
2927
  // Validate fields (if needed)
2928
  $plugin_options = $this->_validate_values( $plugin_options, $this->options, $this->sections );
2929
 
@@ -3141,7 +3175,7 @@
3141
  }
3142
  if ( isset( $field['validate_callback'] ) && ( is_callable( $field['validate_callback'] ) || ( is_string( $field['validate_callback'] ) && function_exists( $field['validate_callback'] ) ) ) ) {
3143
  $callback = $field['validate_callback'];
3144
- unset($field['validate_callback']);
3145
 
3146
  $callbackvalues = call_user_func( $callback, $field, $plugin_options[ $field['id'] ], $options[ $field['id'] ] );
3147
  $plugin_options[ $field['id'] ] = $callbackvalues['value'];
@@ -3321,6 +3355,10 @@
3321
  echo '<form method="post" action="' . $url . '" enctype="multipart/form-data" id="redux-form-wrapper">';
3322
  echo '<input type="hidden" id="redux-compiler-hook" name="' . $this->args['opt_name'] . '[compiler]" value="" />';
3323
  echo '<input type="hidden" id="currentSection" name="' . $this->args['opt_name'] . '[redux-section]" value="" />';
 
 
 
 
3324
 
3325
  settings_fields( "{$this->args['opt_name']}_group" );
3326
 
34
 
35
  if ( ! class_exists( 'ReduxFrameworkInstances' ) ) {
36
  // Instance Container
37
+ require_once( dirname( __FILE__ ) . '/inc/class.redux_instances.php' );
38
+ require_once( dirname( __FILE__ ) . '/inc/lib.redux_instances.php' );
39
 
40
  }
41
 
47
  if ( ! class_exists( 'ReduxFramework' ) ) {
48
 
49
  // General helper functions
50
+ require_once( dirname( __FILE__ ) . '/inc/class.redux_helpers.php' );
51
 
52
  // General functions
53
+ require_once( dirname( __FILE__ ) . '/inc/class.redux_functions.php' );
54
+ require_once( dirname( __FILE__ ) . '/inc/class.p.php' );
55
 
56
+ require_once( dirname( __FILE__ ) . '/inc/class.redux_filesystem.php' );
57
+
58
+ // ThemeCheck checks
59
+ require_once( dirname( __FILE__ ) . '/inc/class.redux_themecheck.php' );
60
 
61
  /**
62
  * Main ReduxFramework class
68
  // ATTENTION DEVS
69
  // Please update the build number with each push, no matter how small.
70
  // This will make for easier support when we ask users what version they are using.
71
+ public static $_version = '3.3.9';
72
  public static $_dir;
73
  public static $_url;
74
  public static $_upload_dir;
80
 
81
  public static function init() {
82
  $dir = Redux_Helpers::cleanFilePath( dirname( __FILE__ ) );
83
+
84
  // Windows-proof constants: replace backward by forward slashes. Thanks to: @peterbouwmeester
85
  self::$_dir = trailingslashit( $dir );
86
  self::$wp_content_url = trailingslashit( Redux_Helpers::cleanFilePath( ( is_ssl() ? str_replace( 'http://', 'https://', WP_CONTENT_URL ) : WP_CONTENT_URL ) ) );
87
+
88
  // See if Redux is a plugin or not
89
  if ( strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_stylesheet_directory() ) ) !== false || strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_template_directory_uri() ) ) !== false || strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( WP_CONTENT_DIR . '/themes/' ) ) !== false ) {
90
  self::$_is_plugin = false;
94
  if ( ! function_exists( 'get_plugins' ) ) {
95
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
96
  }
97
+
98
  $is_plugin = false;
99
  foreach ( get_plugins() as $key => $value ) {
100
  if ( strpos( $key, 'redux-framework.php' ) !== false ) {
107
  }
108
  }
109
  }
110
+
111
  if ( self::$_is_plugin == true || self::$_as_plugin == true ) {
112
  self::$_url = plugin_dir_url( __FILE__ );
113
  } else {
124
  self::$_url = trailingslashit( self::$wp_content_url . $relative_url );
125
  }
126
  }
127
+
128
+ self::$_url = apply_filters( "redux/_url", self::$_url );
129
+ self::$_dir = apply_filters( "redux/_dir", self::$_dir );
130
+ self::$_is_plugin = apply_filters( "redux/_is_plugin", self::$_is_plugin );
131
+
132
  }
133
 
134
  // ::init()
165
  public $typography = null; //values to generate google font CSS
166
  public $import_export = null;
167
  public $debug = null;
168
+ public $no_panel = array(); // Fields that are not visible in the panel
169
  private $show_hints = false;
170
  private $hidden_perm_fields = array(); // Hidden fields specified by 'permissions' arg.
171
  private $hidden_perm_sections = array(); // Hidden sections specified by 'permissions' arg.
326
  //
327
  // if ( isset($_GET['page']) && ($_GET['page'] == 'redux-about' || $_GET['page'] == 'redux-getting-started' || $_GET['page'] == 'redux-credits' || $_GET['page'] == 'redux-changelog' )) {
328
  // //logconsole('inc');
329
+ // require_once( dirname( __FILE__ ) . '/inc/welcome.php' );
330
  // } else {
331
  // //logconsole('compare');
332
  // if (isset($_GET['page']) && $_GET['page'] == $this->args['page_slug']) {
364
 
365
  // Display admin notices in dev_mode
366
  if ( true == $this->args['dev_mode'] ) {
367
+ require_once( self::$_dir . 'inc/debug.php' );
368
  $this->debug = new ReduxDebugObject( $this );
369
 
370
  if ( true == $this->args['update_notice'] ) {
384
  }
385
 
386
  // Output dynamic CSS
 
387
  // Frontend: Maybe enqueue dynamic CSS and Google fonts
388
+ if( empty( $this->args['output_location'] ) || in_array( 'frontend', $this->args['output_location'] ) ) {
389
+ add_action( 'wp_head', array( &$this, '_output_css' ), 150 );
390
+ add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 );
391
+ }
392
 
393
  // Login page: Maybe enqueue dynamic CSS and Google fonts
394
+ if( in_array( 'login', $this->args['output_location'] ) ) {
395
+ add_action( 'login_head', array( &$this, '_output_css' ), 150 );
396
+ add_action( 'login_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 );
397
+ }
398
 
399
+ // Admin area: Maybe enqueue dynamic CSS and Google fonts
400
+ if( in_array( 'admin', $this->args['output_location'] ) ) {
401
+ add_action( 'admin_head', array( &$this, '_output_css' ), 150 );
402
+ add_action( 'admin_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 );
403
+ }
 
404
 
405
 
406
  add_action( 'wp_print_scripts', array( $this, 'vc_fixes' ), 100 );
494
  // Initiate the compiler hook
495
  'output_tag' => true,
496
  // Print Output Tag
497
+ 'output_location' => array( 'frontend' ),
498
+ // Where the dynamic CSS will be added. Can be any combination from: 'frontend', 'login', 'admin'
499
  'transient_time' => '',
500
  'default_show' => false,
501
  // If true, it shows the default value
639
  } // get_instance()
640
 
641
  private function _tracking() {
642
+ require_once( dirname( __FILE__ ) . '/inc/tracking.php' );
643
  $tracking = Redux_Tracking::get_instance();
644
  $tracking->load( $this );
645
  } // _tracking()
744
  *
745
  * @param mixed $value the value of the option being added
746
  */
747
+ public function set_options( $value = '' ) {
748
 
749
  $this->transients['last_save'] = time();
750
 
1170
  }
1171
  }
1172
 
1173
+ if ( $field['type'] == "sortable" ) {
1174
  $this->options_defaults[ $field['id'] ] = array();
1175
+ } elseif ( $field['type'] == "image_select" ) {
1176
  $this->options_defaults[ $field['id'] ] = '';
1177
  } else {
1178
  $this->options_defaults[ $field['id'] ] = $field['options'];
1299
  public function _options_page() {
1300
  $this->import_export->in_field();
1301
 
1302
+ if ( $this->args['menu_type'] == 'hidden' ) {
1303
+
1304
+ // No menu to add!
1305
+
1306
+ } else if ( $this->args['menu_type'] == 'submenu' ) {
1307
  $this->add_submenu(
1308
  $this->args['page_parent'],
1309
  $this->args['page_title'],
1393
  $ct = wp_get_theme();
1394
  $theme_data = $ct;
1395
 
1396
+ if ( ! is_super_admin() || ! is_admin_bar_showing() || ! $this->args['admin_bar'] || $this->args['menu_type'] == 'hidden' ) {
1397
  return;
1398
  }
1399
 
1932
 
1933
  if ( isset( $this->args['dev_mode'] ) && $this->args['dev_mode'] == true ) {
1934
 
1935
+ $base = admin_url('admin-ajax.php') . '?action=redux_p&url=';
1936
  $url = $base . urlencode( 'http://ads.reduxframework.com/api/index.php?js&g&1&v=2' ) . '&proxy=' . urlencode( $base );
1937
  $this->localize_data['rAds'] = '<span data-id="1" class="mgv1_1"><script type="text/javascript">(function(){if (mysa_mgv1_1) return; var ma = document.createElement("script"); ma.type = "text/javascript"; ma.async = true; ma.src = "' . $url . '"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ma, s) })();var mysa_mgv1_1=true;</script></span>';
1938
  }
2103
 
2104
  // Default url values for enabling hints.
2105
  $dismiss = 'true';
2106
+ $s = __( 'Enable', 'redux-framework' );
2107
 
2108
  // Values for disabling hints.
2109
  if ( 'true' == $hint_status ) {
2110
  $dismiss = 'false';
2111
+ $s = __( 'Disable', 'redux-framework' );
2112
  }
2113
 
2114
  // Make URL
2115
  $url = '<a class="redux_hint_status" href="?dismiss=' . $dismiss . '&amp;id=hints&amp;page=' . $curPage . '&amp;tab=' . $curTab . '">' . $s . ' hints</a>';
2116
 
2117
+ $event = __( 'moving the mouse over', 'redux-framework' );
2118
  if ( 'click' == $this->args['hints']['tip_effect']['show']['event'] ) {
2119
+ $event = __( 'clicking', 'redux-framework' );
2120
  }
2121
 
2122
  // Construct message
2123
+ $msg = sprintf( __( 'Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.', 'redux-framework' ), $event, strtolower( $s ) ) . '<br/><br/>' . $url;
2124
 
2125
  // Construct hint tab
2126
  $tab = array(
2127
  'id' => 'redux-hint-tab',
2128
  'title' => __( 'Hints', 'redux-framework' ),
2129
+ 'content' => '<p>' . $msg . '</p>'
2130
  );
2131
 
2132
  $screen->add_help_tab( $tab );
2369
  }
2370
  }
2371
 
 
 
 
2372
 
2373
  // DOVY! Replace $k with $section['id'] when ready
2374
  /**
2413
  }
2414
  }
2415
 
2416
+ if ( ! $display ) {
2417
+ $this->no_panel_section[ $k ] = $section;
2418
+ } else {
2419
+ add_settings_section( $this->args['opt_name'] . $k . '_section', $heading, array(
2420
+ &$this,
2421
+ '_section_desc'
2422
+ ), $this->args['opt_name'] . $k . '_section_group' );
2423
+ }
2424
 
2425
  $sectionIndent = false;
2426
  if ( isset( $section['fields'] ) ) {
2429
  continue; // You need a type!
2430
  }
2431
 
 
 
 
 
2432
  /**
2433
  * filter 'redux/options/{opt_name}/field/{field.id}'
2434
  *
2437
  $field = apply_filters( "redux/options/{$this->args['opt_name']}/field/{$field['id']}/register", $field );
2438
 
2439
  $display = true;
2440
+
2441
  if ( isset( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) {
2442
  if ( isset( $field['panel'] ) && $field['panel'] == false ) {
2443
  $display = false;
2444
  }
2445
  }
2446
+ if ( isset( $field['customizer_only'] ) && $field['customizer_only'] == true ) {
2447
+ //$display = false;
 
2448
  }
2449
 
2450
+
2451
  // TODO AFTER GROUP WORKS - Remove IF statement
2452
  // if ( $field['type'] == "group" && isset( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) {
2453
  // if ( $this->args['dev_mode'] ) {
2637
 
2638
  $this->check_dependencies( $field );
2639
 
2640
+ if ( ! $display || isset( $this->no_panel_section[ $k ] ) ) {
2641
+ $this->no_panel[] = $field['id'];
2642
+ } else {
2643
+ add_settings_field(
2644
+ "{$fieldk}_field",
2645
+ $th,
2646
+ array( &$this, '_field_input' ),
2647
+ "{$this->args['opt_name']}{$k}_section_group",
2648
+ "{$this->args['opt_name']}{$k}_section",
2649
+ $field
2650
+ ); // checkbox
2651
+ }
2652
  }
2653
  }
2654
  }
2693
  * @param string CSS that get sent to the compiler hook
2694
  */
2695
  do_action( "redux/options/{$this->args['opt_name']}/compiler", $this->options, $this->compilerCSS, $this->transients['changed_values'] );
2696
+
2697
+ /**
2698
+ * action 'redux/options/{opt_name}/compiler/advanced'
2699
+ *
2700
+ * @param array options
2701
+ * @param string CSS that get sent to the compiler hook, which sends the full Redux object
2702
+ */
2703
+ do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this );
2704
 
2705
  unset( $this->transients['run_compiler'] );
2706
  $this->set_transients();
2803
  */
2804
  public function _validate_options( $plugin_options ) {
2805
 
2806
+ // Save the values not in the panel
2807
+ if ( isset( $plugin_options['redux-no_panel'] ) ) {
2808
+ $keys = explode( '|', $plugin_options['redux-no_panel'] );
2809
+ foreach ( $keys as $key ) {
2810
+ $plugin_options[ $key ] = $this->options[ $key ];
2811
+ }
2812
+ unset( $plugin_options['redux-no_panel'] );
2813
+ }
2814
+
2815
  if ( ! empty( $this->hidden_perm_fields ) && is_array( $this->hidden_perm_fields ) ) {
2816
  foreach ( $this->hidden_perm_fields as $id => $data ) {
2817
  $plugin_options[ $id ] = $data;
2957
 
2958
  $this->transients['last_save_mode'] = "normal"; // Last save mode
2959
 
2960
+
2961
  // Validate fields (if needed)
2962
  $plugin_options = $this->_validate_values( $plugin_options, $this->options, $this->sections );
2963
 
3175
  }
3176
  if ( isset( $field['validate_callback'] ) && ( is_callable( $field['validate_callback'] ) || ( is_string( $field['validate_callback'] ) && function_exists( $field['validate_callback'] ) ) ) ) {
3177
  $callback = $field['validate_callback'];
3178
+ unset( $field['validate_callback'] );
3179
 
3180
  $callbackvalues = call_user_func( $callback, $field, $plugin_options[ $field['id'] ], $options[ $field['id'] ] );
3181
  $plugin_options[ $field['id'] ] = $callbackvalues['value'];
3355
  echo '<form method="post" action="' . $url . '" enctype="multipart/form-data" id="redux-form-wrapper">';
3356
  echo '<input type="hidden" id="redux-compiler-hook" name="' . $this->args['opt_name'] . '[compiler]" value="" />';
3357
  echo '<input type="hidden" id="currentSection" name="' . $this->args['opt_name'] . '[redux-section]" value="" />';
3358
+ if ( ! empty( $this->no_panel ) ) {
3359
+ echo '<input type="hidden" name="' . $this->args['opt_name'] . '[redux-no_panel]" value="' . implode( '|', $this->no_panel ) . '" />';
3360
+ }
3361
+
3362
 
3363
  settings_fields( "{$this->args['opt_name']}_group" );
3364
 
ReduxCore/inc/class.p.php ADDED
@@ -0,0 +1,292 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Redux_P {
4
+
5
+ public function __construct() {
6
+
7
+ add_action( "wp_ajax_nopriv_redux_p", array( $this, 'proxy' ) );
8
+ add_action( "wp_ajax_redux_p", array( $this, 'proxy' ) );
9
+ }
10
+
11
+ public function proxy() {
12
+
13
+ // Script: Simple PHP Proxy: Get external HTML, JSON and more!
14
+ //
15
+ // *Version: 1.6, Last updated: 1/24/2009*
16
+ //
17
+ // Project Home - http://benalman.com/projects/php-simple-proxy/
18
+ // GitHub - http://github.com/cowboy/php-simple-proxy/
19
+ // Source - http://github.com/cowboy/php-simple-proxy/raw/master/ba-simple-proxy.php
20
+ //
21
+ // About: License
22
+ //
23
+ // Copyright (c) 2010 "Cowboy" Ben Alman,
24
+ // Dual licensed under the MIT and GPL licenses.
25
+ // http://benalman.com/about/license/
26
+ //
27
+ // About: Examples
28
+ //
29
+ // This working example, complete with fully commented code, illustrates one way
30
+ // in which this PHP script can be used.
31
+ //
32
+ // Simple - http://benalman.com/code/projects/php-simple-proxy/examples/simple/
33
+ //
34
+ // About: Release History
35
+ //
36
+ // 1.6 - (1/24/2009) Now defaults to JSON mode, which can now be changed to
37
+ // native mode by specifying ?mode=native. Native and JSONP modes are
38
+ // disabled by default because of possible XSS vulnerability issues, but
39
+ // are configurable in the PHP script along with a url validation regex.
40
+ // 1.5 - (12/27/2009) Initial release
41
+ //
42
+ // Topic: GET Parameters
43
+ //
44
+ // Certain GET (query string) parameters may be passed into ba-simple-proxy.php
45
+ // to control its behavior, this is a list of these parameters.
46
+ //
47
+ // url - The remote URL resource to fetch. Any GET parameters to be passed
48
+ // through to the remote URL resource must be urlencoded in this parameter.
49
+ // mode - If mode=native, the response will be sent using the same content
50
+ // type and headers that the remote URL resource returned. If omitted, the
51
+ // response will be JSON (or JSONP). <Native requests> and <JSONP requests>
52
+ // are disabled by default, see <Configuration Options> for more information.
53
+ // callback - If specified, the response JSON will be wrapped in this named
54
+ // function call. This parameter and <JSONP requests> are disabled by
55
+ // default, see <Configuration Options> for more information.
56
+ // user_agent - This value will be sent to the remote URL request as the
57
+ // `User-Agent:` HTTP request header. If omitted, the browser user agent
58
+ // will be passed through.
59
+ // send_cookies - If send_cookies=1, all cookies will be forwarded through to
60
+ // the remote URL request.
61
+ // send_session - If send_session=1 and send_cookies=1, the SID cookie will be
62
+ // forwarded through to the remote URL request.
63
+ // full_headers - If a JSON request and full_headers=1, the JSON response will
64
+ // contain detailed header information.
65
+ // full_status - If a JSON request and full_status=1, the JSON response will
66
+ // contain detailed cURL status information, otherwise it will just contain
67
+ // the `http_code` property.
68
+ //
69
+ // Topic: POST Parameters
70
+ //
71
+ // All POST parameters are automatically passed through to the remote URL
72
+ // request.
73
+ //
74
+ // Topic: JSON requests
75
+ //
76
+ // This request will return the contents of the specified url in JSON format.
77
+ //
78
+ // Request:
79
+ //
80
+ // > ba-simple-proxy.php?url=http://example.com/
81
+ //
82
+ // Response:
83
+ //
84
+ // > { "contents": "<html>...</html>", "headers": {...}, "status": {...} }
85
+ //
86
+ // JSON object properties:
87
+ //
88
+ // contents - (String) The contents of the remote URL resource.
89
+ // headers - (Object) A hash of HTTP headers returned by the remote URL
90
+ // resource.
91
+ // status - (Object) A hash of status codes returned by cURL.
92
+ //
93
+ // Topic: JSONP requests
94
+ //
95
+ // This request will return the contents of the specified url in JSONP format
96
+ // (but only if $enable_jsonp is enabled in the PHP script).
97
+ //
98
+ // Request:
99
+ //
100
+ // > ba-simple-proxy.php?url=http://example.com/&callback=foo
101
+ //
102
+ // Response:
103
+ //
104
+ // > foo({ "contents": "<html>...</html>", "headers": {...}, "status": {...} })
105
+ //
106
+ // JSON object properties:
107
+ //
108
+ // contents - (String) The contents of the remote URL resource.
109
+ // headers - (Object) A hash of HTTP headers returned by the remote URL
110
+ // resource.
111
+ // status - (Object) A hash of status codes returned by cURL.
112
+ //
113
+ // Topic: Native requests
114
+ //
115
+ // This request will return the contents of the specified url in the format it
116
+ // was received in, including the same content-type and other headers (but only
117
+ // if $enable_native is enabled in the PHP script).
118
+ //
119
+ // Request:
120
+ //
121
+ // > ba-simple-proxy.php?url=http://example.com/&mode=native
122
+ //
123
+ // Response:
124
+ //
125
+ // > <html>...</html>
126
+ //
127
+ // Topic: Notes
128
+ //
129
+ // * Assumes magic_quotes_gpc = Off in php.ini
130
+ //
131
+ // Topic: Configuration Options
132
+ //
133
+ // These variables can be manually edited in the PHP file if necessary.
134
+ //
135
+ // $enable_jsonp - Only enable <JSONP requests> if you really need to. If you
136
+ // install this script on the same server as the page you're calling it
137
+ // from, plain JSON will work. Defaults to false.
138
+ // $enable_native - You can enable <Native requests>, but you should only do
139
+ // this if you also whitelist specific URLs using $valid_url_regex, to avoid
140
+ // possible XSS vulnerabilities. Defaults to false.
141
+ // $valid_url_regex - This regex is matched against the url parameter to
142
+ // ensure that it is valid. This setting only needs to be used if either
143
+ // $enable_jsonp or $enable_native are enabled. Defaults to '/.*/' which
144
+ // validates all URLs.
145
+ //
146
+ // ############################################################################
147
+
148
+
149
+ $_GET['mode'] = "native";
150
+ $_GET['full_headers'] = 1;
151
+ $_GET['full_status'] = 1;
152
+ $_GET['send_cookies'] = 1;
153
+
154
+
155
+ // Change these configuration options if needed, see above descriptions for info.
156
+ $enable_jsonp = false;
157
+ $enable_native = true;
158
+ $valid_url_regex = '/.*/';
159
+
160
+ // ############################################################################
161
+ $url = $_GET['url'];
162
+
163
+ if ( ! $url ) {
164
+
165
+ // Passed url not specified.
166
+ $contents = 'ERROR: url not specified';
167
+ $status = array( 'http_code' => 'ERROR' );
168
+
169
+ } else if ( ! preg_match( $valid_url_regex, $url ) ) {
170
+
171
+ // Passed url doesn't match $valid_url_regex.
172
+ $contents = 'ERROR: invalid url';
173
+ $status = array( 'http_code' => 'ERROR' );
174
+
175
+ } else {
176
+ $url = urldecode( $url );
177
+ if ( isset( $_GET['proxy'] ) ) {
178
+ $url .= '&proxy=' . $_GET['proxy'];
179
+ }
180
+
181
+ // Ad URL rewrite
182
+ if ( strpos( $url, 'http' ) === false ) {
183
+ $url = 'http:' . $url;
184
+ }
185
+
186
+ if ( isset( $_GET['callback'] ) ) {
187
+ foreach ( $_GET as $key => $value ) {
188
+ if ( in_array( $key, array( 'url', 'mode', 'full_headers', 'full_status', 'send_cookies' ) ) ) {
189
+ continue;
190
+ }
191
+ $url .= "&" . $key . '=' . $value;
192
+ }
193
+ }
194
+
195
+
196
+ $args = array(
197
+ 'user-agent' => isset( $_GET['user_agent'] ) ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'],
198
+ 'method' => 'GET',
199
+ );
200
+
201
+ if ( isset( $_GET['send_cookies'] ) && $_GET['send_cookies'] ) {
202
+ $cookie = array();
203
+ foreach ( $_COOKIE as $key => $value ) {
204
+ $cookie[] = $key . '=' . $value;
205
+ }
206
+ if ( isset( $_GET['send_session'] ) && $_GET['send_session'] ) {
207
+ $cookie[] = SID;
208
+ }
209
+ $args['cookies'] = $cookie;
210
+
211
+ }
212
+ if ( strtolower( $_SERVER['REQUEST_METHOD'] ) == 'post' ) {
213
+ $args['body'] = $_POST;
214
+ $args['method'] = 'POST';
215
+
216
+ }
217
+
218
+
219
+ $response = wp_remote_request(
220
+ $url,
221
+ $args
222
+ );
223
+
224
+ if ( ! is_wp_error( $response ) ) {
225
+ $status = $response['response']['code'];
226
+ $contents = $response['body'];
227
+ }
228
+
229
+ }
230
+
231
+
232
+ if ( isset( $_GET['mode'] ) && $_GET['mode'] == 'native' ) {
233
+ if ( ! $enable_native ) {
234
+ $contents = 'ERROR: invalid mode';
235
+ $status = array( 'http_code' => 'ERROR' );
236
+ }
237
+
238
+ if ( isset( $response['headers']['content-type'] ) ) {
239
+ header('Content-Type: '.$response['headers']['content-type']);
240
+ }
241
+ if ( isset( $response['headers']['content-language'] ) ) {
242
+ header('Content-Language: '.$response['headers']['content-language']);
243
+ }
244
+ if ( isset( $response['headers']['set-cookie'] ) ) {
245
+ header('Set-Cookie: '.$response['headers']['set-cookie']);
246
+ }
247
+
248
+ print str_replace( 'ads.reduxframework.com', 'look.reduxframework.com', $contents );
249
+
250
+ } else {
251
+
252
+ // $data will be serialized into JSON data.
253
+ $data = array();
254
+
255
+ // Propagate all HTTP headers into the JSON data object.
256
+ if ( isset( $_GET['full_headers'] ) && $_GET['full_headers'] ) {
257
+ $data['headers'] = array();
258
+
259
+ }
260
+
261
+ // Propagate all cURL request / response info to the JSON data object.
262
+ if ( isset( $_GET['full_status'] ) && $_GET['full_status'] ) {
263
+ $data['status'] = $status;
264
+ } else {
265
+ $data['status'] = array();
266
+ $data['status']['http_code'] = $status['http_code'];
267
+ }
268
+
269
+ // Set the JSON data object contents, decoding it from JSON if possible.
270
+ $decoded_json = json_decode( $contents );
271
+ $data['contents'] = str_replace('e(window).width()', 'window.innerWidth||e(window).width()', $decoded_json ? $decoded_json : $contents);
272
+
273
+ // Generate appropriate content-type header.
274
+
275
+ $is_xhr = isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ? strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) : 'xmlhttprequest';
276
+ header( 'Content-type: application/' . ( $is_xhr ? 'json' : 'x-javascript' ) );
277
+
278
+ // Get JSONP callback.
279
+ $jsonp_callback = $enable_jsonp && isset( $_GET['callback'] ) ? $_GET['callback'] : null;
280
+
281
+ // Generate JSON/JSONP string
282
+ $json = json_encode( $data );
283
+
284
+ print $jsonp_callback ? "$jsonp_callback($json)" : $json;
285
+
286
+ }
287
+
288
+ }
289
+ }
290
+
291
+ new Redux_P();
292
+
ReduxCore/inc/class.redux_functions.php CHANGED
@@ -1,294 +1,294 @@
1
  <?php
2
 
3
- /**
4
- * Redux Framework Private Functions Container Class
5
- *
6
- * @package Redux_Framework
7
- * @subpackage Core
8
- */
9
 
10
  // Exit if accessed directly
11
- if ( ! defined( 'ABSPATH' ) ) {
12
- exit;
13
- }
14
 
15
  // Don't duplicate me!
16
- if ( ! class_exists( 'Redux_Functions' ) ) {
17
 
18
- /**
19
- * Redux Functions Class
20
- * Class of useful functions that can/should be shared among all Redux files.
21
- *
22
- * @since 1.0.0
23
- */
24
- class Redux_Functions {
25
 
26
- static public $_parent;
27
 
28
- public static function isMin() {
29
- $min = '';
30
 
31
- if ( false == self::$_parent->args['dev_mode'] ) {
32
- $min = '.min';
33
- }
34
 
35
- return $min;
36
- }
37
 
38
- /**
39
- * Parse CSS from output/compiler array
40
- *
41
- * @since 3.2.8
42
- * @access private
43
- * @return $css CSS string
44
- */
45
- public static function parseCSS( $cssArray = array(), $style = '', $value = '' ) {
46
 
47
- // Something wrong happened
48
- if ( count( $cssArray ) == 0 ) {
49
- return;
50
- } else { //if ( count( $cssArray ) >= 1 ) {
51
- $css = '';
52
 
53
- foreach ( $cssArray as $element => $selector ) {
54
 
55
- // The old way
56
- if ( $element === 0 ) {
57
- $css = self::theOldWay( $cssArray, $style );
58
 
59
- return $css;
60
- }
61
 
62
- // New way continued
63
- $cssStyle = $element . ':' . $value . ';';
64
 
65
- $css .= $selector . '{' . $cssStyle . '}';
 
66
  }
67
- }
68
-
69
- return $css;
70
- }
71
 
72
- private static function theOldWay( $cssArray, $style ) {
73
- $keys = implode( ",", $cssArray );
74
- $css = $keys . "{" . $style . '}';
75
 
76
- return $css;
77
- }
 
78
 
79
- /**
80
- * initWpFilesystem - Initialized the Wordpress filesystem, if it already isn't.
81
- *
82
- * @since 3.2.3
83
- * @access public
84
- * @return void
85
- */
86
- public static function initWpFilesystem() {
87
- global $wp_filesystem;
88
 
89
- // Initialize the Wordpress filesystem, no more using file_put_contents function
90
- if ( empty( $wp_filesystem ) ) {
91
- require_once( ABSPATH . '/wp-admin/includes/file.php' );
92
- WP_Filesystem();
 
 
 
 
 
 
 
 
 
 
 
93
  }
94
- }
95
 
96
- /**
97
- * modRewriteCheck - Check for the installation of apache mod_rewrite
98
- *
99
- * @since 3.2.3
100
- * @access public
101
- * @return void
102
- */
103
- public static function modRewriteCheck() {
104
- if ( function_exists( 'apache_get_modules' ) ) {
105
- if ( ! in_array( 'mod_rewrite', apache_get_modules() ) ) {
106
- self::$_parent->admin_notices[] = array(
107
- 'type' => 'error',
108
- 'msg' => '<strong><center>The Apache mod_rewrite module is not enabled on your server.</center></strong>
109
  <br/>
110
  Both Wordpress and Redux require the enabling of the Apache mod_rewrite module to function properly. Please contact whomever provides support for your server and ask them to enable the mod_rewrite module',
111
- 'id' => 'mod_rewrite_notice_',
112
- 'dismiss' => false
113
- );
 
114
  }
115
  }
116
- }
117
-
118
- /**
119
- * verFromGit - Retrives latest Redux version from GIT
120
- *
121
- * @since 3.2.0
122
- * @access private
123
- * @return string $ver
124
- */
125
- private static function verFromGit() {
126
- // Get the raw framework.php from github
127
- $gitpage = wp_remote_get(
128
- 'https://raw.github.com/ReduxFramework/redux-framework/master/ReduxCore/framework.php', array(
129
- 'headers' => array(
130
- 'Accept-Encoding' => ''
131
- ),
132
- 'sslverify' => true,
133
- 'timeout' => 300
134
- ) );
135
-
136
- // Is the response code the corect one?
137
- if ( ! is_wp_error( $gitpage ) ) {
138
- if ( isset( $gitpage['body'] ) ) {
139
- // Get the page text.
140
- $body = $gitpage['body'];
141
-
142
- // Find version line in framework.php
143
- $needle = 'public static $_version =';
144
- $pos = strpos( $body, $needle );
145
-
146
- // If it's there, continue. We don't want errors if $pos = 0.
147
- if ( $pos > 0 ) {
148
 
149
- // Look for the semi-colon at the end of the version line
150
- $semi = strpos( $body, ";", $pos );
151
-
152
- // Error avoidance. If the semi-colon is there, continue.
153
- if ( $semi > 0 ) {
154
-
155
- // Extract the version line
156
- $text = substr( $body, $pos, ( $semi - $pos ) );
157
-
158
- // Find the first quote around the veersion number.
159
- $quote = strpos( $body, "'", $pos );
160
-
161
- // Extract the version number
162
- $ver = substr( $body, $quote, ( $semi - $quote ) );
163
-
164
- // Strip off quotes.
165
- $ver = str_replace( "'", '', $ver );
166
-
167
- return $ver;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  }
169
  }
170
  }
171
  }
172
- }
173
 
174
- /**
175
- * updateCheck - Checks for updates to Redux Framework
176
- *
177
- * @since 3.2.0
178
- * @access public
179
- *
180
- * @param string $curVer Current version of Redux Framework
181
- *
182
- * @return void - Admin notice is diaplyed if new version is found
183
- */
184
- public static function updateCheck( $curVer ) {
185
-
186
- // If no cookie, check for new ver
187
- if ( ! isset( $_COOKIE['redux_update_check'] ) ) { // || 1 == strcmp($_COOKIE['redux_update_check'], self::$_version)) {
188
- // actual ver number from git repo
189
- $ver = self::verFromGit();
190
-
191
- // hour long cookie.
192
- setcookie( "redux_update_check", $ver, time() + 3600, '/' );
193
- } else {
194
-
195
- // saved value from cookie. If it's different from current ver
196
- // we can still show the update notice.
197
- $ver = $_COOKIE['redux_update_check'];
198
- }
199
 
200
- // Set up admin notice on new version
201
- //if ( 1 == strcmp( $ver, $curVer ) ) {
202
- if (version_compare($ver, $curVer, '>')) {
203
- self::$_parent->admin_notices[] = array(
204
- 'type' => 'updated',
205
- 'msg' => '<strong>A new build of Redux is now available!</strong><br/><br/>Your version: <strong>' . $curVer . '</strong><br/>New version: <strong><span style="color: red;">' . $ver . '</span></strong><br/><br/><a href="https://github.com/ReduxFramework/redux-framework">Get it now</a>&nbsp;&nbsp;|',
206
- 'id' => 'dev_notice_' . $ver,
207
- 'dismiss' => true,
208
- );
 
209
  }
210
- }
211
 
212
- /**
213
- * adminNotices - Evaluates user dismiss option for displaying admin notices
214
- *
215
- * @since 3.2.0
216
- * @access public
217
- * @return void
218
- */
219
- public static function adminNotices() {
220
- global $current_user, $pagenow;
221
-
222
- // Check for an active admin notice array
223
- if ( ! empty( self::$_parent->admin_notices ) ) {
224
-
225
- // Enum admin notices
226
- foreach ( self::$_parent->admin_notices as $notice ) {
227
- if ( true == $notice['dismiss'] ) {
228
-
229
- // Get user ID
230
- $userid = $current_user->ID;
231
-
232
- if ( ! get_user_meta( $userid, 'ignore_' . $notice['id'] ) ) {
233
-
234
- // Check if we are on admin.php. If we are, we have
235
- // to get the current page slug and tab, so we can
236
- // feed it back to Wordpress. Why> admin.php cannot
237
- // be accessed without the page parameter. We add the
238
- // tab to return the user to the last panel they were
239
- // on.
240
- $pageName = '';
241
- $curTab = '';
242
- if ( $pagenow == 'admin.php' || $pagenow == 'themes.php' ) {
243
-
244
- // Get the current page. To avoid errors, we'll set
245
- // the redux page slug if the GET is empty.
246
- $pageName = empty( $_GET['page'] ) ? '&amp;page=' . self::$_parent->args['page_slug'] : '&amp;page=' . $_GET['page'];
247
-
248
- // Ditto for the current tab.
249
- $curTab = empty( $_GET['tab'] ) ? '&amp;tab=0' : '&amp;tab=' . $_GET['tab'];
 
 
 
 
250
  }
 
251
 
252
- // Print the notice with the dismiss link
253
- echo '<div class="' . $notice['type'] . '"><p>' . $notice['msg'] . '&nbsp;&nbsp;<a href="?dismiss=true&amp;id=' . $notice['id'] . $pageName . $curTab . '">' . __( 'Dismiss', 'redux-framework' ) . '</a>.</p></div>';
254
  }
255
- } else {
256
-
257
- // Standard notice
258
- echo '<div class="' . $notice['type'] . '"><p>' . $notice['msg'] . '</a>.</p></div>';
259
  }
260
- }
261
 
262
- // Clear the admin notice array
263
- self::$_parent->admin_notices = array();
 
264
  }
265
- }
266
 
267
- /**
268
- * dismissAdminNotice - Updates user meta to store dismiss notice preference
269
- *
270
- * @since 3.2.0
271
- * @access public
272
- * @return void
273
- */
274
- public static function dismissAdminNotice() {
275
- global $current_user;
276
-
277
- // Verify the dismiss and id parameters are present.
278
- if ( isset( $_GET['dismiss'] ) && isset( $_GET['id'] ) ) {
279
- if ( 'true' == $_GET['dismiss'] || 'false' == $_GET['dismiss'] ) {
280
-
281
- // Get the user id
282
- $userid = $current_user->ID;
283
 
284
- // Get the notice id
285
- $id = $_GET['id'];
286
- $val = $_GET['dismiss'];
287
 
288
- // Add the dismiss request to the user meta.
289
- update_user_meta( $userid, 'ignore_' . $id, $val );
 
290
  }
291
  }
292
  }
293
- }
294
- }
1
  <?php
2
 
3
+ /**
4
+ * Redux Framework Private Functions Container Class
5
+ *
6
+ * @package Redux_Framework
7
+ * @subpackage Core
8
+ */
9
 
10
  // Exit if accessed directly
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ exit;
13
+ }
14
 
15
  // Don't duplicate me!
16
+ if ( ! class_exists( 'Redux_Functions' ) ) {
17
 
18
+ /**
19
+ * Redux Functions Class
20
+ * Class of useful functions that can/should be shared among all Redux files.
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ class Redux_Functions {
25
 
26
+ static public $_parent;
27
 
28
+ public static function isMin() {
29
+ $min = '';
30
 
31
+ if ( false == self::$_parent->args['dev_mode'] ) {
32
+ $min = '.min';
33
+ }
34
 
35
+ return $min;
36
+ }
37
 
38
+ /**
39
+ * Parse CSS from output/compiler array
40
+ *
41
+ * @since 3.2.8
42
+ * @access private
43
+ * @return $css CSS string
44
+ */
45
+ public static function parseCSS( $cssArray = array(), $style = '', $value = '' ) {
46
 
47
+ // Something wrong happened
48
+ if ( count( $cssArray ) == 0 ) {
49
+ return;
50
+ } else { //if ( count( $cssArray ) >= 1 ) {
51
+ $css = '';
52
 
53
+ foreach ( $cssArray as $element => $selector ) {
54
 
55
+ // The old way
56
+ if ( $element === 0 ) {
57
+ $css = self::theOldWay( $cssArray, $style );
58
 
59
+ return $css;
60
+ }
61
 
62
+ // New way continued
63
+ $cssStyle = $element . ':' . $value . ';';
64
 
65
+ $css .= $selector . '{' . $cssStyle . '}';
66
+ }
67
  }
 
 
 
 
68
 
69
+ return $css;
70
+ }
 
71
 
72
+ private static function theOldWay( $cssArray, $style ) {
73
+ $keys = implode( ",", $cssArray );
74
+ $css = $keys . "{" . $style . '}';
75
 
76
+ return $css;
77
+ }
 
 
 
 
 
 
 
78
 
79
+ /**
80
+ * initWpFilesystem - Initialized the Wordpress filesystem, if it already isn't.
81
+ *
82
+ * @since 3.2.3
83
+ * @access public
84
+ * @return void
85
+ */
86
+ public static function initWpFilesystem() {
87
+ global $wp_filesystem;
88
+
89
+ // Initialize the Wordpress filesystem, no more using file_put_contents function
90
+ if ( empty( $wp_filesystem ) ) {
91
+ require_once( ABSPATH . '/wp-admin/includes/file.php' );
92
+ WP_Filesystem();
93
+ }
94
  }
 
95
 
96
+ /**
97
+ * modRewriteCheck - Check for the installation of apache mod_rewrite
98
+ *
99
+ * @since 3.2.3
100
+ * @access public
101
+ * @return void
102
+ */
103
+ public static function modRewriteCheck() {
104
+ if ( function_exists( 'apache_get_modules' ) ) {
105
+ if ( ! in_array( 'mod_rewrite', apache_get_modules() ) ) {
106
+ self::$_parent->admin_notices[] = array(
107
+ 'type' => 'error',
108
+ 'msg' => '<strong><center>The Apache mod_rewrite module is not enabled on your server.</center></strong>
109
  <br/>
110
  Both Wordpress and Redux require the enabling of the Apache mod_rewrite module to function properly. Please contact whomever provides support for your server and ask them to enable the mod_rewrite module',
111
+ 'id' => 'mod_rewrite_notice_',
112
+ 'dismiss' => false
113
+ );
114
+ }
115
  }
116
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
 
118
+ /**
119
+ * verFromGit - Retrives latest Redux version from GIT
120
+ *
121
+ * @since 3.2.0
122
+ * @access private
123
+ * @return string $ver
124
+ */
125
+ private static function verFromGit() {
126
+ // Get the raw framework.php from github
127
+ $gitpage = wp_remote_get(
128
+ 'https://raw.github.com/ReduxFramework/redux-framework/master/ReduxCore/framework.php', array(
129
+ 'headers' => array(
130
+ 'Accept-Encoding' => ''
131
+ ),
132
+ 'sslverify' => true,
133
+ 'timeout' => 300
134
+ ) );
135
+
136
+ // Is the response code the corect one?
137
+ if ( ! is_wp_error( $gitpage ) ) {
138
+ if ( isset( $gitpage['body'] ) ) {
139
+ // Get the page text.
140
+ $body = $gitpage['body'];
141
+
142
+ // Find version line in framework.php
143
+ $needle = 'public static $_version =';
144
+ $pos = strpos( $body, $needle );
145
+
146
+ // If it's there, continue. We don't want errors if $pos = 0.
147
+ if ( $pos > 0 ) {
148
+
149
+ // Look for the semi-colon at the end of the version line
150
+ $semi = strpos( $body, ";", $pos );
151
+
152
+ // Error avoidance. If the semi-colon is there, continue.
153
+ if ( $semi > 0 ) {
154
+
155
+ // Extract the version line
156
+ $text = substr( $body, $pos, ( $semi - $pos ) );
157
+
158
+ // Find the first quote around the veersion number.
159
+ $quote = strpos( $body, "'", $pos );
160
+
161
+ // Extract the version number
162
+ $ver = substr( $body, $quote, ( $semi - $quote ) );
163
+
164
+ // Strip off quotes.
165
+ $ver = str_replace( "'", '', $ver );
166
+
167
+ return $ver;
168
+ }
169
  }
170
  }
171
  }
172
  }
 
173
 
174
+ /**
175
+ * updateCheck - Checks for updates to Redux Framework
176
+ *
177
+ * @since 3.2.0
178
+ * @access public
179
+ *
180
+ * @param string $curVer Current version of Redux Framework
181
+ *
182
+ * @return void - Admin notice is diaplyed if new version is found
183
+ */
184
+ public static function updateCheck( $curVer ) {
185
+
186
+ // If no cookie, check for new ver
187
+ if ( ! isset( $_COOKIE['redux_update_check'] ) ) { // || 1 == strcmp($_COOKIE['redux_update_check'], self::$_version)) {
188
+ // actual ver number from git repo
189
+ $ver = self::verFromGit();
190
+
191
+ // hour long cookie.
192
+ setcookie( "redux_update_check", $ver, time() + 3600, '/' );
193
+ } else {
194
+
195
+ // saved value from cookie. If it's different from current ver
196
+ // we can still show the update notice.
197
+ $ver = $_COOKIE['redux_update_check'];
198
+ }
199
 
200
+ // Set up admin notice on new version
201
+ //if ( 1 == strcmp( $ver, $curVer ) ) {
202
+ if ( version_compare( $ver, $curVer, '>' ) ) {
203
+ self::$_parent->admin_notices[] = array(
204
+ 'type' => 'updated',
205
+ 'msg' => '<strong>A new build of Redux is now available!</strong><br/><br/>Your version: <strong>' . $curVer . '</strong><br/>New version: <strong><span style="color: red;">' . $ver . '</span></strong><br/><br/><em>If you are not a developer, your theme/plugin author shipped with <code>dev_mode</code> on. Contact them to fix it, but in the meantime you can use our <a href="' . 'https://' . 'wordpress.org/plugins/redux-developer-mode-disabler/" target="_blank">dev_mode disabler</a>.</em><br /><br /><a href="' . 'https://' . 'github.com/ReduxFramework/redux-framework">Get it now</a>&nbsp;&nbsp;|',
206
+ 'id' => 'dev_notice_' . $ver,
207
+ 'dismiss' => true,
208
+ );
209
+ }
210
  }
 
211
 
212
+ /**
213
+ * adminNotices - Evaluates user dismiss option for displaying admin notices
214
+ *
215
+ * @since 3.2.0
216
+ * @access public
217
+ * @return void
218
+ */
219
+ public static function adminNotices() {
220
+ global $current_user, $pagenow;
221
+
222
+ // Check for an active admin notice array
223
+ if ( ! empty( self::$_parent->admin_notices ) ) {
224
+
225
+ // Enum admin notices
226
+ foreach ( self::$_parent->admin_notices as $notice ) {
227
+ if ( true == $notice['dismiss'] ) {
228
+
229
+ // Get user ID
230
+ $userid = $current_user->ID;
231
+
232
+ if ( ! get_user_meta( $userid, 'ignore_' . $notice['id'] ) ) {
233
+
234
+ // Check if we are on admin.php. If we are, we have
235
+ // to get the current page slug and tab, so we can
236
+ // feed it back to Wordpress. Why> admin.php cannot
237
+ // be accessed without the page parameter. We add the
238
+ // tab to return the user to the last panel they were
239
+ // on.
240
+ $pageName = '';
241
+ $curTab = '';
242
+ if ( $pagenow == 'admin.php' || $pagenow == 'themes.php' ) {
243
+
244
+ // Get the current page. To avoid errors, we'll set
245
+ // the redux page slug if the GET is empty.
246
+ $pageName = empty( $_GET['page'] ) ? '&amp;page=' . self::$_parent->args['page_slug'] : '&amp;page=' . $_GET['page'];
247
+
248
+ // Ditto for the current tab.
249
+ $curTab = empty( $_GET['tab'] ) ? '&amp;tab=0' : '&amp;tab=' . $_GET['tab'];
250
+ }
251
+
252
+ // Print the notice with the dismiss link
253
+ echo '<div class="' . $notice['type'] . '"><p>' . $notice['msg'] . '&nbsp;&nbsp;<a href="?dismiss=true&amp;id=' . $notice['id'] . $pageName . $curTab . '">' . __( 'Dismiss', 'redux-framework' ) . '</a>.</p></div>';
254
  }
255
+ } else {
256
 
257
+ // Standard notice
258
+ echo '<div class="' . $notice['type'] . '"><p>' . $notice['msg'] . '</a>.</p></div>';
259
  }
 
 
 
 
260
  }
 
261
 
262
+ // Clear the admin notice array
263
+ self::$_parent->admin_notices = array();
264
+ }
265
  }
 
266
 
267
+ /**
268
+ * dismissAdminNotice - Updates user meta to store dismiss notice preference
269
+ *
270
+ * @since 3.2.0
271
+ * @access public
272
+ * @return void
273
+ */
274
+ public static function dismissAdminNotice() {
275
+ global $current_user;
276
+
277
+ // Verify the dismiss and id parameters are present.
278
+ if ( isset( $_GET['dismiss'] ) && isset( $_GET['id'] ) ) {
279
+ if ( 'true' == $_GET['dismiss'] || 'false' == $_GET['dismiss'] ) {
280
+
281
+ // Get the user id
282
+ $userid = $current_user->ID;
283
 
284
+ // Get the notice id
285
+ $id = $_GET['id'];
286
+ $val = $_GET['dismiss'];
287
 
288
+ // Add the dismiss request to the user meta.
289
+ update_user_meta( $userid, 'ignore_' . $id, $val );
290
+ }
291
  }
292
  }
293
  }
294
+ }
 
ReduxCore/inc/class.redux_helpers.php CHANGED
@@ -16,6 +16,12 @@ if ( ! class_exists( 'Redux_Helpers' ) ) {
16
  */
17
  class Redux_Helpers {
18
 
 
 
 
 
 
 
19
  public static function tabFromField( $parent, $field ) {
20
  foreach ( $parent->sections as $k => $section ) {
21
  if ( ! isset( $section['title'] ) ) {
16
  */
17
  class Redux_Helpers {
18
 
19
+ public static function is_customize_preview() {
20
+ global $wp_customize;
21
+
22
+ return is_a( $wp_customize, 'WP_Customize_Manager' ) && $wp_customize->is_preview();
23
+ }
24
+
25
  public static function tabFromField( $parent, $field ) {
26
  foreach ( $parent->sections as $k => $section ) {
27
  if ( ! isset( $section['title'] ) ) {
ReduxCore/inc/class.redux_themecheck.php ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
+
8
+ /**
9
+ * I got tired of answering ThemeCheck issues. This will resolve them all.
10
+ *
11
+ * @package Redux_Framework
12
+ * @subpackage Redux_ThemeCheck
13
+ * @author Dovy Paukstys
14
+ */
15
+
16
+ // Don't duplicate me!
17
+ if ( ! class_exists( 'Redux_ThemeCheck' ) ) {
18
+
19
+ /**
20
+ * Redux Helpers Class
21
+ * Class of useful functions that can/should be shared among all Redux files.
22
+ *
23
+ * @since 1.0.0
24
+ */
25
+ class Redux_ThemeCheck {
26
+
27
+ public $dir;
28
+
29
+ public function __construct() {
30
+
31
+ if ( isset( $_GET['page'] ) && $_GET['page'] == "themecheck" ) {
32
+ add_action( 'admin_notices', array( $this, 'themeCheckExits' ) );
33
+ }
34
+
35
+
36
+ }
37
+
38
+ public function themeCheckExits() {
39
+ if ( function_exists( 'themecheck_add_page' ) ) {
40
+ $this->load();
41
+ }
42
+ }
43
+
44
+ public function load() {
45
+
46
+ $redux = new ReduxFramework();
47
+ $redux->init();
48
+
49
+
50
+
51
+ //if ( ! empty( $redux ) ) {
52
+
53
+
54
+ $dir = ReduxFramework::$_dir . '../';
55
+
56
+ if ( isset( $_POST['themename'] ) && ! empty( $_POST['themename'] ) ) {
57
+ if ( strpos( $dir, $_POST['themename'] ) !== false ) {
58
+ ?>
59
+ <div class="updated">
60
+ <p><?php
61
+ echo sprintf( __( 'The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.', 'redux-framework' ), '<a href="http://reduxframework.com" target="_blank">Redux Framework</a>', '<a href="http://docs.reduxframework.com/core/theme-check/">', '</a>' );
62
+ ?>
63
+ </div><?php
64
+ }
65
+ }
66
+
67
+ if ( ! ReduxFramework::$_is_plugin ) {
68
+ $errors = array();
69
+
70
+ if ( file_exists( $dir . '.tx' ) ) {
71
+ $errors[] = ".tx/";
72
+ }
73
+ if ( file_exists( $dir . 'bin' ) ) {
74
+ $errors[] = "bin/";
75
+ }
76
+ if ( file_exists( $dir . 'tests' ) ) {
77
+ $errors[] = "tests/";
78
+ }
79
+ if ( file_exists( $dir . '.gitignore' ) ) {
80
+ $errors[] = ".gitignore";
81
+ }
82
+
83
+ if ( file_exists( $dir . '.git' ) ) {
84
+ $errors[] = ".git/";
85
+ }
86
+ if ( file_exists( $dir . 'node_modules' ) ) {
87
+ $errors[] = "node_modules/";
88
+ }
89
+ if ( file_exists( $dir . '.travis.yml' ) ) {
90
+ $errors[] = ".travis.yml";
91
+ }
92
+ if ( file_exists( $dir . 'bootstrap_tests.php' ) ) {
93
+ $errors[] = "bootstrap_tests.php";
94
+ }
95
+ if ( file_exists( $dir . 'phpunit.xml' ) ) {
96
+ $errors[] = "phpunit.xml";
97
+ }
98
+ if ( file_exists( $dir . '.ds_store' ) ) {
99
+ $errors[] = ".ds_store";
100
+ }
101
+ if ( file_exists( $dir . 'codestyles' ) ) {
102
+ $errors[] = "codestyles/";
103
+ }
104
+
105
+ if ( ! empty( $errors ) ) {
106
+ ?>
107
+ <div class="error">
108
+ <p><?php
109
+ _e( 'The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.', 'redux-framework' );
110
+ echo '<br /><ul style="margin-left:15px;">';
111
+ foreach ( $errors as $error ) {
112
+ echo '<li><strong>~/' . $error . '</strong></li>';
113
+ }
114
+ ?>
115
+ </ul></div><?php
116
+ }
117
+ }
118
+
119
+ }
120
+ }
121
+
122
+ new Redux_ThemeCheck();
123
+ }
ReduxCore/inc/fields/color_rgba/field_color_rgba.php CHANGED
@@ -64,7 +64,7 @@
64
 
65
  $this->value = wp_parse_args( $this->value, $defaults );
66
 
67
- echo '<input data-id="' . $this->field['id'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[color]' . '" id="' . $this->field['id'] . '-color" class="redux-color_rgba redux-color_rgba-init ' . $this->field['class'] . '" type="text" value="' . $this->value['color'] . '" data-default-color="' . $this->field['default']['color'] . '" data-defaultvalue="' . $this->field['default']['color'] . '" data-opacity="' . $this->value['alpha'] . '" />';
68
  echo '<input data-id="' . $this->field['id'] . '-alpha" name="' . $this->field['name'] . $this->field['name_suffix'] . '[alpha]' . '" id="' . $this->field['id'] . '-alpha" type="hidden" value="' . $this->value['alpha'] . '" />';
69
 
70
  if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) {
@@ -142,4 +142,4 @@
142
  );
143
  }
144
  }
145
- }
64
 
65
  $this->value = wp_parse_args( $this->value, $defaults );
66
 
67
+ echo '<input data-id="' . $this->field['id'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[color]' . '" id="' . $this->field['id'] . '-color" class="redux-color_rgba redux-color_rgba-init ' . $this->field['class'] . '" type="text" value="' . $this->value['color'] . '" data-default-color="' . ( isset( $this->field['default']['color'] ) ? $this->field['default']['color'] : "" ) . '" data-defaultvalue="' . ( isset( $this->field['default']['color'] ) ? $this->field['default']['color'] : "" ) . '" data-opacity="' . $this->value['alpha'] . '" />';
68
  echo '<input data-id="' . $this->field['id'] . '-alpha" name="' . $this->field['name'] . $this->field['name_suffix'] . '[alpha]' . '" id="' . $this->field['id'] . '-alpha" type="hidden" value="' . $this->value['alpha'] . '" />';
69
 
70
  if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) {
142
  );
143
  }
144
  }
145
+ }
ReduxCore/inc/fields/raw/field_raw.php CHANGED
@@ -49,7 +49,7 @@
49
  echo '<fieldset id="' . $this->parent->args['opt_name'] . '-' . $this->field['id'] . '" class="redux-field redux-container-' . $this->field['type'] . ' ' . $this->field['class'] . '" data-id="' . $this->field['id'] . '">';
50
 
51
  if ( ! empty( $this->field['include'] ) && file_exists( $this->field['include'] ) ) {
52
- include( $this->field['include'] );
53
  }
54
 
55
  if ( ! empty( $this->field['content'] ) && isset( $this->field['content'] ) ) {
49
  echo '<fieldset id="' . $this->parent->args['opt_name'] . '-' . $this->field['id'] . '" class="redux-field redux-container-' . $this->field['type'] . ' ' . $this->field['class'] . '" data-id="' . $this->field['id'] . '">';
50
 
51
  if ( ! empty( $this->field['include'] ) && file_exists( $this->field['include'] ) ) {
52
+ require_once( $this->field['include'] );
53
  }
54
 
55
  if ( ! empty( $this->field['content'] ) && isset( $this->field['content'] ) ) {
ReduxCore/inc/fields/slider/field_slider.php CHANGED
@@ -310,7 +310,7 @@
310
  value="' . $valOne . '"
311
  class="redux-slider-input redux-slider-input-one-' . $fieldID . ' ' . $this->field['class'] . '"/>';
312
 
313
- // LABEL output
314
  } elseif ( $this->display_label == $this->field['display_value'] ) {
315
  $showLabel = true;
316
 
@@ -321,7 +321,7 @@
321
  name="' . $nameOne . '">
322
  </div>';
323
 
324
- // SELECT output
325
  } elseif ( $this->display_select == $this->field['display_value'] ) {
326
  $showSelect = true;
327
 
310
  value="' . $valOne . '"
311
  class="redux-slider-input redux-slider-input-one-' . $fieldID . ' ' . $this->field['class'] . '"/>';
312
 
313
+ // LABEL output
314
  } elseif ( $this->display_label == $this->field['display_value'] ) {
315
  $showLabel = true;
316
 
321
  name="' . $nameOne . '">
322
  </div>';
323
 
324
+ // SELECT output
325
  } elseif ( $this->display_select == $this->field['display_value'] ) {
326
  $showSelect = true;
327
 
ReduxCore/inc/fields/typography/field_typography.php CHANGED
@@ -687,6 +687,15 @@
687
  $value = "normal";
688
  }
689
 
 
 
 
 
 
 
 
 
 
690
  if ( $key == "google" || $key == "subsets" || $key == "font-backup" || empty( $value ) ) {
691
  continue;
692
  }
@@ -728,6 +737,7 @@
728
  }
729
  }
730
  }
 
731
  // Google only stuff!
732
  if ( ! empty( $font['font-family'] ) && ! empty( $this->field['google'] ) && filter_var( $this->field['google'], FILTER_VALIDATE_BOOLEAN ) ) {
733
 
687
  $value = "normal";
688
  }
689
 
690
+ if ($key == 'font-weight' && $this->field['font-weight'] == false) {
691
+ continue;
692
+ }
693
+
694
+ if ($key == 'font-style' && $this->field['font-style'] == false) {
695
+ continue;
696
+ }
697
+
698
+
699
  if ( $key == "google" || $key == "subsets" || $key == "font-backup" || empty( $value ) ) {
700
  continue;
701
  }
737
  }
738
  }
739
  }
740
+
741
  // Google only stuff!
742
  if ( ! empty( $font['font-family'] ) && ! empty( $this->field['google'] ) && filter_var( $this->field['google'], FILTER_VALIDATE_BOOLEAN ) ) {
743
 
ReduxCore/inc/p.php CHANGED
@@ -208,7 +208,7 @@
208
 
209
  curl_setopt( $ch, CURLOPT_USERAGENT, isset($_GET['user_agent']) ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'] );
210
 
211
- list( $header, $contents ) = preg_split( '/([\r\n][\r\n])\\1/', curl_exec( $ch ), 2 );
212
 
213
  $status = curl_getinfo( $ch );
214
 
208
 
209
  curl_setopt( $ch, CURLOPT_USERAGENT, isset($_GET['user_agent']) ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'] );
210
 
211
+ list( $header, $contents ) = array_merge( array( '', '' ), preg_split( '/([\r\n][\r\n])\1/', curl_exec( $ch ), 2 ) );
212
 
213
  $status = curl_getinfo( $ch );
214
 
ReduxCore/inc/tracking.php CHANGED
@@ -67,12 +67,12 @@
67
  }
68
 
69
  if ( isset( $_GET['redux_framework_disable_tracking'] ) && ! empty( $_GET['redux_framework_disable_tracking'] ) ) {
70
- $this->options['allow_tracking'] = false;
71
  update_option( 'redux-framework-tracking', $this->options );
72
  }
73
 
74
  if ( isset( $_GET['redux_framework_enable_tracking'] ) && ! empty( $_GET['redux_framework_enable_tracking'] ) ) {
75
- $this->options['allow_tracking'] = true;
76
  update_option( 'redux-framework-tracking', $this->options );
77
  }
78
 
@@ -92,7 +92,7 @@
92
  add_action( 'wp_ajax_nopriv_' . $hash, array( $this, 'support_args' ) );
93
  add_action( 'wp_ajax_' . $hash, array( $this, 'support_args' ) );
94
 
95
- if ( isset( $this->options['allow_tracking'] ) && $this->options['allow_tracking'] == true ) {
96
  // The tracking checks daily, but only sends new data every 7 days.
97
  if ( ! wp_next_scheduled( 'redux_tracking' ) ) {
98
  wp_schedule_event( time(), 'daily', 'redux_tracking' );
@@ -149,12 +149,12 @@
149
 
150
 
151
  $content = '<h3>' . __( 'Welcome to the Redux Demo Panel', 'redux-framework' ) . '</h3>';
152
- $content .= '<p><strong>' . __( 'Getting Started', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.', 'redux-framework' ), '<a href="http://docs.reduxframework.com/redux-framework/getting-started/" target="_blank">' . __( 'our documentation', 'redux-framework' ) . '</a>' );
153
- $content .= '<p><strong>' . __( 'Redux Generator', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.', 'redux-framework' ), '<a href="http://generate.reduxframework.com/" target="_blank">' . __( 'Redux Generator', 'redux-framework' ) . '</a>' );
154
- $content .= '<p><strong>' . __( 'Redux Extensions', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!', 'redux-framework' ), '<a href="http://reduxframework.com/extensions/" target="_blank">' . __( 'extensions directory', 'redux-framework' ) . '</a>' );
155
- $content .= '<p><strong>' . __( 'Like Redux?', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.', 'redux-framework' ), '<a target="_blank" href="http://wordpress.org/support/view/plugin-reviews/redux-framework">' . __( 'leave us a favorable review on WordPress.org', 'redux-framework' ) . '</a>', '<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=N5AD7TSH8YA5U" target="_blank">' . __( 'donation', 'redux-framework' ) . '</a>' );
156
  $content .= '<p><strong>' . __( 'Newsletter', 'redux-framework' ) . '</strong><br>' . __( 'If you\'d like to keep up to with all things Redux, please subscribe to our newsletter', 'redux-framework' ) . ':</p>';
157
- $content .= '<form action="http://reduxframework.us7.list-manage2.com/subscribe/post?u=564f5178f6cc288064f332efd&amp;id=ace5bbc1f9&SOURCE=panel" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate><p style="text-align: center;"><label for="mce-EMAIL">' . __( 'Email address', 'redux-framework' ) . ' </label><input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL"><input type="hidden" value="panel" name="SOURCE">&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="' . __( 'Subscribe', 'redux-framework' ) . '" name="subscribe" id="mc-embedded-subscribe" class="button button-primary"></p></form>';
158
  $opt_arr = array(
159
  'content' => $content,
160
  'position' => array( 'edge' => 'top', 'align' => 'center' ),
@@ -405,7 +405,7 @@
405
  header( 'Cache-Control: post-check=0, pre-check=0', false );
406
  header( 'Pragma: no-cache' );
407
  $instances = ReduxFrameworkInstances::get_all_instances();
408
-
409
  if ( isset( $_REQUEST['i'] ) && ! empty( $_REQUEST['i'] ) ) {
410
  if ( is_array( $instances ) && ! empty( $instances ) ) {
411
  foreach ( $instances as $opt_name => $data ) {
67
  }
68
 
69
  if ( isset( $_GET['redux_framework_disable_tracking'] ) && ! empty( $_GET['redux_framework_disable_tracking'] ) ) {
70
+ $this->options['allow_tracking'] = 'no';
71
  update_option( 'redux-framework-tracking', $this->options );
72
  }
73
 
74
  if ( isset( $_GET['redux_framework_enable_tracking'] ) && ! empty( $_GET['redux_framework_enable_tracking'] ) ) {
75
+ $this->options['allow_tracking'] = 'yes';
76
  update_option( 'redux-framework-tracking', $this->options );
77
  }
78
 
92
  add_action( 'wp_ajax_nopriv_' . $hash, array( $this, 'support_args' ) );
93
  add_action( 'wp_ajax_' . $hash, array( $this, 'support_args' ) );
94
 
95
+ if ( isset( $this->options['allow_tracking'] ) && $this->options['allow_tracking'] == 'yes' ) {
96
  // The tracking checks daily, but only sends new data every 7 days.
97
  if ( ! wp_next_scheduled( 'redux_tracking' ) ) {
98
  wp_schedule_event( time(), 'daily', 'redux_tracking' );
149
 
150
 
151
  $content = '<h3>' . __( 'Welcome to the Redux Demo Panel', 'redux-framework' ) . '</h3>';
152
+ $content .= '<p><strong>' . __( 'Getting Started', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.', 'redux-framework' ), '<a href="' . 'http://' . 'docs.reduxframework.com/redux-framework/getting-started/" target="_blank">' . __( 'our documentation', 'redux-framework' ) . '</a>' );
153
+ $content .= '<p><strong>' . __( 'Redux Generator', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.', 'redux-framework' ), '<a href="' . 'http://' . 'generate.reduxframework.com/" target="_blank">' . __( 'Redux Generator', 'redux-framework' ) . '</a>' );
154
+ $content .= '<p><strong>' . __( 'Redux Extensions', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!', 'redux-framework' ), '<a href="' . 'http://' . 'reduxframework.com/extensions/" target="_blank">' . __( 'extensions directory', 'redux-framework' ) . '</a>' );
155
+ $content .= '<p><strong>' . __( 'Like Redux?', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.', 'redux-framework' ), '<a target="_blank" href="' . 'http://' . 'wordpress.org/support/view/plugin-reviews/redux-framework">' . __( 'leave us a favorable review on WordPress.org', 'redux-framework' ) . '</a>', '<a href="' . 'https://' . 'www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=N5AD7TSH8YA5U" target="_blank">' . __( 'donation', 'redux-framework' ) . '</a>' );
156
  $content .= '<p><strong>' . __( 'Newsletter', 'redux-framework' ) . '</strong><br>' . __( 'If you\'d like to keep up to with all things Redux, please subscribe to our newsletter', 'redux-framework' ) . ':</p>';
157
+ $content .= '<form action="' . 'http://' . 'reduxframework.us7.list-manage2.com/subscribe/post?u=564f5178f6cc288064f332efd&amp;id=ace5bbc1f9&SOURCE=panel" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate><p style="text-align: center;"><label for="mce-EMAIL">' . __( 'Email address', 'redux-framework' ) . ' </label><input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL"><input type="hidden" value="panel" name="SOURCE">&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="' . __( 'Subscribe', 'redux-framework' ) . '" name="subscribe" id="mc-embedded-subscribe" class="button button-primary"></p></form>';
158
  $opt_arr = array(
159
  'content' => $content,
160
  'position' => array( 'edge' => 'top', 'align' => 'center' ),
405
  header( 'Cache-Control: post-check=0, pre-check=0', false );
406
  header( 'Pragma: no-cache' );
407
  $instances = ReduxFrameworkInstances::get_all_instances();
408
+
409
  if ( isset( $_REQUEST['i'] ) && ! empty( $_REQUEST['i'] ) ) {
410
  if ( is_array( $instances ) && ! empty( $instances ) ) {
411
  foreach ( $instances as $opt_name => $data ) {
ReduxCore/inc/welcome.php CHANGED
@@ -1,542 +1,612 @@
1
  <?php
2
- if ( !defined ( 'ABSPATH' ) ) {
3
- exit;
4
- }
5
-
6
- class Redux_Welcome {
7
-
8
- /**
9
- * @var string The capability users should have to view the page
10
- */
11
- public $minimum_capability = 'manage_options';
12
-
13
- /**
14
- * Get things started
15
- *
16
- * @since 1.4
17
- */
18
- public function __construct () {
19
- add_action ( 'admin_menu', array( $this, 'admin_menus' ) );
20
- add_action ( 'admin_head', array( $this, 'admin_head' ) );
21
- add_action ( 'admin_init', array( $this, 'welcome' ) );
22
-
23
- update_option( 'redux_version_upgraded_from', ReduxFramework::$_version );
24
- set_transient( '_redux_activation_redirect', true, 30 );
25
-
26
  }
27
 
28
- /**
29
- * Register the Dashboard Pages which are later hidden but these pages
30
- * are used to render the Welcome and Credits pages.
31
- *
32
- * @access public
33
- * @since 1.4
34
- * @return void
35
- */
36
- public function admin_menus () {
37
-
38
- // About Page
39
- add_dashboard_page (
40
- __ ( 'Welcome to Redux Framework', 'redux-framework' ), __ ( 'Welcome to Redux Framework', 'redux-framework' ), $this->minimum_capability, 'redux-about', array( $this, 'about_screen' )
41
- );
42
-
43
- // Changelog Page
44
- add_dashboard_page (
45
- __ ( 'Redux Framework Changelog', 'redux-framework' ), __ ( 'Redux Framework Changelog', 'redux-framework' ), $this->minimum_capability, 'redux-changelog', array( $this, 'changelog_screen' )
46
- );
47
-
48
- // Getting Started Page
49
- add_dashboard_page (
50
- __ ( 'Getting started with Redux Framework', 'redux-framework' ), __ ( 'Getting started with Redux Framework', 'redux-framework' ), $this->minimum_capability, 'redux-getting-started', array( $this, 'getting_started_screen' )
51
- );
52
-
53
- // Credits Page
54
- add_dashboard_page (
55
- __ ( 'The people that develop Redux Framework', 'redux-framework' ), __ ( 'The people that develop Redux Framework', 'redux-framework' ), $this->minimum_capability, 'redux-credits', array( $this, 'credits_screen' )
56
- );
57
- }
58
 
59
- /**
60
- * Hide Individual Dashboard Pages
61
- *
62
- * @access public
63
- * @since 1.4
64
- * @return void
65
- */
66
- public function admin_head () {
67
- remove_submenu_page ( 'index.php', 'redux-about' );
68
- remove_submenu_page ( 'index.php', 'redux-changelog' );
69
- remove_submenu_page ( 'index.php', 'redux-getting-started' );
70
- remove_submenu_page ( 'index.php', 'redux-credits' );
71
-
72
- // Badge for welcome page
73
- $badge_url = ReduxFramework::$_url . 'assets/images/redux-badge.png';
74
- ?>
75
- <style type="text/css" media="screen">
76
- /*<![CDATA[*/
77
- .redux-badge {
78
- padding-top: 150px;
79
- height: 52px;
80
- width: 185px;
81
- color: #666;
82
- font-weight: bold;
83
- font-size: 14px;
84
- text-align: center;
85
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
86
- margin: 0 -5px;
87
- background: url('<?php echo $badge_url; ?>') no-repeat;
88
- }
89
 
90
- .about-wrap .redux-badge {
91
- position: absolute;
92
- top: 0;
93
- right: 0;
94
- }
 
 
 
 
95
 
96
- .redux-welcome-screenshots {
97
- float: right;
98
- margin-left: 10px!important;
99
- }
100
 
101
- .about-wrap .feature-section {
102
- margin-top: 20px;
103
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
 
105
- /*]]>*/
106
- </style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  <?php
108
- }
109
 
110
- /**
111
- * Navigation tabs
112
- *
113
- * @access public
114
- * @since 1.9
115
- * @return void
116
- */
117
- public function tabs () {
118
- $selected = isset ( $_GET[ 'page' ] ) ? $_GET[ 'page' ] : 'redux-about';
119
- ?>
120
- <h2 class="nav-tab-wrapper">
121
- <a class="nav-tab <?php echo $selected == 'redux-about' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url ( admin_url ( add_query_arg ( array( 'page' => 'redux-about' ), 'index.php' ) ) ); ?>">
122
- <?php _e ( "What's New", 'redux-framework' ); ?>
123
- </a>
124
- <a class="nav-tab <?php echo $selected == 'redux-getting-started' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url ( admin_url ( add_query_arg ( array( 'page' => 'redux-getting-started' ), 'index.php' ) ) ); ?>">
125
- <?php _e ( 'Getting Started', 'redux-framework' ); ?>
126
- </a>
127
- <a class="nav-tab <?php echo $selected == 'redux-changelog' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url ( admin_url ( add_query_arg ( array( 'page' => 'redux-changelog' ), 'index.php' ) ) ); ?>">
128
- <?php _e ( 'Changelog', 'redux-framework' ); ?>
129
- </a>
130
- <a class="nav-tab <?php echo $selected == 'redux-credits' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url ( admin_url ( add_query_arg ( array( 'page' => 'redux-credits' ), 'index.php' ) ) ); ?>">
131
- <?php _e ( 'Credits', 'redux-framework' ); ?>
132
- </a>
133
- </h2>
 
 
 
 
134
  <?php
135
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
136
 
137
- /**
138
- * Render About Screen
139
- *
140
- * @access public
141
- * @since 1.4
142
- * @return void
143
- */
144
- public function about_screen () {
145
- list( $display_version ) = explode ( '-', ReduxFramework::$_version );
146
- ?>
147
- <div class="wrap about-wrap">
148
- <h1><?php printf ( __ ( 'Welcome to Redux Framework %s', 'redux-framework' ), $display_version ); ?></h1>
149
- <div class="about-text"><?php printf ( __ ( 'Thank you for updating to the latest version! Redux Framework %s is ready to <add description>', 'redux-framework' ), $display_version ); ?></div>
150
- <div class="redux-badge"><?php printf ( __ ( 'Version %s', 'redux-framework' ), $display_version ); ?></div>
151
 
152
- <?php $this->tabs (); ?>
153
 
154
- <div class="changelog">
155
- <h3><?php _e ( 'Some Feature', 'redux-framework' ); ?></h3>
156
 
157
- <div class="feature-section">
158
 
159
- <h4><?php _e ( 'Feature', 'redux-framework' ); ?></h4>
160
- <p></p>
161
 
162
- <h4><?php _e ( 'Feature', 'redux-framework' ); ?></h4>
163
- <p></p>
164
 
 
 
 
 
 
165
  </div>
166
- </div>
167
 
168
- <div class="changelog">
169
- <h3><?php _e ( 'Some feature', 'redux-framework' ); ?></h3>
 
 
 
170
 
171
- <div class="feature-section">
172
 
 
173
 
174
- <h4><?php _e ( 'Feature', 'redux-framework' ); ?></h4>
175
- <p></p>
176
 
177
- <h4><?php _e ( 'Feature', 'redux-framework' ); ?></h4>
178
- <p></p>
179
 
180
- <h4><?php _e ( 'Feature', 'redux-framework' ); ?></h4>
181
- <p></p>
182
 
 
183
 
184
 
185
- <h4><?php _e ( 'Feature', 'redux-framework' ); ?></h4>
186
- <p></p>
187
- <p></p>
 
 
 
188
  </div>
189
- </div>
190
 
191
- <div class="changelog">
192
- <h3><?php _e ( 'More Features', 'redux-framework' ); ?></h3>
193
 
194
- <div class="feature-section">
195
 
196
- <h4><?php _e ( 'Feature', 'redux-framework' ); ?></h4>
197
- <p><?php _e ( 'description', 'redux-framework' ); ?></p>
198
 
199
- <h4><?php _e ( 'Feature', 'redux-framework' ); ?></h4>
200
- <p><?php _e ( 'description', 'redux-framework' ); ?></p>
201
 
 
202
 
 
203
 
204
- <h4><?php _e ( 'Feature', 'redux-framework' ); ?></h4>
205
- <p><?php _e ( 'description', 'redux-framework' ); ?></p>
206
 
 
 
 
 
 
207
  </div>
208
- </div>
209
 
210
- <div class="changelog">
211
- <h3><?php _e ( 'Additional Updates', 'redux-framework' ); ?></h3>
212
 
213
- <div class="feature-section col three-col">
214
- <div>
215
- <h4><?php _e ( 'Cool thing', 'redux-framework' ); ?></h4>
216
- <p><?php _e ( 'cool thing description.', 'redux-framework' ); ?></p>
217
 
218
- <h4><?php _e ( 'Cool thing', 'redux-framework' ); ?></h4>
219
- <p><?php _e ( 'cool thing description.', 'redux-framework' ); ?></p>
220
- </div>
221
 
222
- <div>
223
- <h4><?php _e ( 'Cool thing', 'redux-framework' ); ?></h4>
224
- <p><?php _e ( 'cool thing description.', 'redux-framework' ); ?></p>
225
 
226
- <h4><?php _e ( 'Cool thing', 'redux-framework' ); ?></h4>
227
- <p><?php _e ( 'cool thing description.', 'redux-framework' ); ?></p>
228
- </div>
 
 
 
 
 
 
229
 
230
- <div class="last-feature">
231
- <h4><?php _e ( 'Cool thing', 'redux-framework' ); ?></h4>
232
- <p><?php _e ( 'cool thing description.', 'redux-framework' ); ?></p>
233
 
234
- <h4><?php _e ( 'Cool thing', 'redux-framework' ); ?></h4>
235
- <p><?php _e ( 'cool thing description.', 'redux-framework' ); ?></p>
 
 
 
 
 
 
 
236
  </div>
237
  </div>
238
- </div>
239
 
240
- <div class="return-to-dashboard">
241
- <a href="<?php echo esc_url ( admin_url ( add_query_arg ( array( 'post_type' => 'download', 'page' => 'redux-settings' ), 'edit.php' ) ) ); ?>"><?php _e ( 'Go to Redux Framework', 'redux-framework' ); ?></a> &middot;
242
- <a href="<?php echo esc_url ( admin_url ( add_query_arg ( array( 'page' => 'redux-changelog' ), 'index.php' ) ) ); ?>"><?php _e ( 'View the Full Changelog', 'redux-framework' ); ?></a>
 
 
 
 
243
  </div>
244
- </div>
245
  <?php
246
- }
247
 
248
- /**
249
- * Render Changelog Screen
250
- *
251
- * @access public
252
- * @since 2.0.3
253
- * @return void
254
- */
255
- public function changelog_screen () {
256
- list( $display_version ) = explode ( '-', ReduxFramework::$_version );
257
- ?>
258
- <div class="wrap about-wrap">
259
- <h1><?php _e ( 'Redux Framework Changelog', 'redux-framework' ); ?></h1>
260
- <div class="about-text"><?php printf ( __ ( 'Thank you for updating to the latest version! Redux Framework %s is ready to make your <description>', 'redux-framework' ), $display_version ); ?></div>
261
- <div class="redux-badge"><?php printf ( __ ( 'Version %s', 'redux-framework' ), $display_version ); ?></div>
262
-
263
- <?php $this->tabs (); ?>
264
-
265
- <div class="changelog">
266
- <h3><?php _e ( 'Full Changelog', 'redux-framework' ); ?></h3>
267
-
268
- <div class="feature-section">
269
- <?php echo $this->parse_readme (); ?>
 
 
 
 
270
  </div>
271
- </div>
272
 
273
- <div class="return-to-dashboard">
274
- <a href="<?php echo esc_url ( admin_url ( add_query_arg ( array( 'post_type' => 'download', 'page' => 'redux-settings' ), 'edit.php' ) ) ); ?>"><?php _e ( 'Go to Redux Framework', 'redux-framework' ); ?></a>
 
 
 
 
275
  </div>
276
- </div>
277
  <?php
278
- }
279
 
280
- /**
281
- * Render Getting Started Screen
282
- *
283
- * @access public
284
- * @since 1.9
285
- * @return void
286
- */
287
- public function getting_started_screen () {
288
- list( $display_version ) = explode ( '-', ReduxFramework::$_version );
289
- ?>
290
- <div class="wrap about-wrap">
291
- <h1><?php printf ( __ ( 'Welcome to Redux Framework %s', 'redux-framework' ), $display_version ); ?></h1>
292
- <div class="about-text"><?php printf ( __ ( 'Thank you for updating to the latest version! Redux Framework %s is ready to make your <description>', 'redux-framework' ), $display_version ); ?></div>
293
- <div class="redux-badge"><?php printf ( __ ( 'Version %s', 'redux-framework' ), $display_version ); ?></div>
294
 
295
- <?php $this->tabs (); ?>
 
 
 
296
 
297
- <p class="about-description"><?php _e ( 'Use the tips below to get started using Redux Framework. You\'ll be up and running in no time!', 'redux-framework' ); ?></p>
298
 
299
- <div class="changelog">
300
- <h3><?php _e ( 'Creating Your First Panel', 'redux-framework' ); ?></h3>
301
 
302
- <div class="feature-section">
 
303
 
 
304
 
305
 
306
- <h4><?php printf ( __ ( '<a href="%s">%s &rarr; Add New</a>', 'redux-framework' ), admin_url ( 'post-new.php?post_type=download' ), redux_get_label_plural () ); ?></h4>
307
- <p><?php printf ( __ ( 'The %s menu is your access point for all aspects of your Easy Digital Downloads product creation and setup. To create your first product, simply click Add New and then fill out the product details.', 'redux-framework' ), redux_get_label_plural () ); ?></p>
308
 
309
- <h4><?php _e ( 'Product Price', 'redux-framework' ); ?></h4>
310
- <p><?php _e ( 'Products can have simple prices or variable prices if you wish to have more than one price point for a product. For a single price, simply enter the price. For multiple price points, click <em>Enable variable pricing</em> and enter the options.', 'redux-framework' ); ?></p>
311
 
312
- <h4><?php _e ( 'Download Files', 'redux-framework' ); ?></h4>
313
- <p><?php _e ( 'Uploading the downloadable files is simple. Click <em>Upload File</em> in the Download Files section and choose your download file. To add more than one file, simply click the <em>Add New</em> button.', 'redux-framework' ); ?></p>
314
 
 
 
 
 
 
 
 
315
  </div>
316
- </div>
317
 
318
- <div class="changelog">
319
- <h3><?php _e ( 'Display a Product Grid', 'redux-framework' ); ?></h3>
 
 
 
 
 
320
 
321
- <div class="feature-section">
322
 
323
- <img src="<?php echo Redux_PLUGIN_URL . 'assets/images/screenshots/grid.png'; ?>" class="redux-welcome-screenshots"/>
324
 
325
- <h4><?php _e ( 'Flexible Product Grids', 'redux-framework' ); ?></h4>
326
- <p><?php _e ( 'The [downloads] shortcode will display a product grid that works with any theme, no matter the size. It is even responsive!', 'redux-framework' ); ?></p>
327
 
328
- <h4><?php _e ( 'Change the Number of Columns', 'redux-framework' ); ?></h4>
329
- <p><?php _e ( 'You can easily change the number of columns by adding the columns="x" parameter:', 'redux-framework' ); ?></p>
330
- <p><pre>[downloads columns="4"]</pre></p>
331
 
332
- <h4><?php _e ( 'Additional Display Options', 'redux-framework' ); ?></h4>
333
- <p><?php printf ( __ ( 'The product grids can be customized in any way you wish and there is <a href="%s">extensive documentation</a> to assist you.', 'redux-framework' ), 'http://easydigitaldownloads.com/documentation' ); ?></p>
 
 
 
 
 
 
334
  </div>
335
- </div>
336
 
337
- <div class="changelog">
338
- <h3><?php _e ( 'Purchase Buttons Anywhere', 'redux-framework' ); ?></h3>
 
 
339
 
340
- <div class="feature-section">
341
 
 
342
 
 
343
 
344
- <h4><?php _e ( 'The <em>[purchase_link]</em> Shortcode', 'redux-framework' ); ?></h4>
345
- <p><?php _e ( 'With easily accessible shortcodes to display purchase buttons, you can add a Buy Now or Add to Cart button for any product anywhere on your site in seconds.', 'redux-framework' ); ?></p>
346
 
347
- <h4><?php _e ( 'Buy Now Buttons', 'redux-framework' ); ?></h4>
348
- <p><?php _e ( 'Purchase buttons can behave as either Add to Cart or Buy Now buttons. With Buy Now buttons customers are taken straight to PayPal, giving them the most frictionless purchasing experience possible.', 'redux-framework' ); ?></p>
349
 
 
350
  </div>
351
- </div>
352
 
353
- <div class="changelog">
354
- <h3><?php _e ( 'Need Help?', 'redux-framework' ); ?></h3>
 
 
355
 
356
- <div class="feature-section">
357
 
358
- <h4><?php _e ( 'Phenomenal Support', 'redux-framework' ); ?></h4>
359
- <p><?php _e ( 'We do our best to provide the best support we can. If you encounter a problem or have a question, post a question in the <a href="https://easydigitaldownloads.com/support">support forums</a>.', 'redux-framework' ); ?></p>
360
 
361
- <h4><?php _e ( 'Need Even Faster Support?', 'redux-framework' ); ?></h4>
362
- <p><?php _e ( 'Our <a href="https://easydigitaldownloads.com/support/pricing/">Priority Support forums</a> are there for customers that need faster and/or more in-depth assistance.', 'redux-framework' ); ?></p>
363
 
 
 
 
364
  </div>
365
- </div>
366
 
367
- <div class="changelog">
368
- <h3><?php _e ( 'Stay Up to Date', 'redux-framework' ); ?></h3>
 
 
 
 
369
 
370
- <div class="feature-section">
371
 
372
- <h4><?php _e ( 'Get Notified of Extension Releases', 'redux-framework' ); ?></h4>
373
- <p><?php _e ( 'New extensions that make Easy Digital Downloads even more powerful are released nearly every single week. Subscribe to the newsletter to stay up to date with our latest releases. <a href="http://eepurl.com/kaerz" target="_blank">Signup now</a> to ensure you do not miss a release!', 'redux-framework' ); ?></p>
374
 
375
- <h4><?php _e ( 'Get Alerted About New Tutorials', 'redux-framework' ); ?></h4>
376
- <p><?php _e ( '<a href="http://eepurl.com/kaerz" target="_blank">Signup now</a> to hear about the latest tutorial releases that explain how to take Easy Digital Downloads further.', 'redux-framework' ); ?></p>
377
 
 
378
  </div>
379
- </div>
380
 
381
- <div class="changelog">
382
- <h3><?php _e ( 'Extensions for Everything', 'redux-framework' ); ?></h3>
 
 
383
 
384
- <div class="feature-section">
385
 
386
- <h4><?php _e ( 'Over 250 Extensions', 'redux-framework' ); ?></h4>
387
- <p><?php _e ( 'Add-on plugins are available that greatly extend the default functionality of Easy Digital Downloads. There are extensions for payment processors, such as Stripe and PayPal, extensions for newsletter integrations, and many, many more.', 'redux-framework' ); ?></p>
388
 
389
- <h4><?php _e ( 'Visit the Extension Store', 'redux-framework' ); ?></h4>
390
- <p><?php _e ( '<a href="https://easydigitaldownloads.com/extensions" target="_blank">The Extensions store</a> has a list of all available extensions, including convenient category filters so you can find exactly what you are looking for.', 'redux-framework' ); ?></p>
391
 
 
 
 
392
  </div>
393
- </div>
394
 
395
- </div>
396
  <?php
397
- }
398
 
399
- /**
400
- * Render Credits Screen
401
- *
402
- * @access public
403
- * @since 1.4
404
- * @return void
405
- */
406
- public function credits_screen () {
407
- list( $display_version ) = explode ( '-', ReduxFramework::$_version );
408
- ?>
409
- <div class="wrap about-wrap">
410
- <h1><?php printf ( __ ( 'Welcome to Redux Framework %s', 'redux-framework' ), $display_version ); ?></h1>
411
- <div class="about-text"><?php printf ( __ ( 'Thank you for updating to the latest version! Redux Framework %s is ready to make your <description>', 'redux-framework' ), $display_version ); ?></div>
412
- <div class="redux-badge"><?php printf ( __ ( 'Version %s', 'redux-framework' ), $display_version ); ?></div>
413
-
414
- <?php $this->tabs (); ?>
415
-
416
- <p class="about-description"><?php _e ( 'Redux Framework is created by a worldwide team of developers who <something witty here>', 'redux-framework' ); ?></p>
417
-
418
- <?php echo $this->contributors (); ?>
419
- </div>
 
 
 
420
  <?php
421
- }
422
-
423
- /**
424
- * Parse the Redux readme.txt file
425
- *
426
- * @since 2.0.3
427
- * @return string $readme HTML formatted readme file
428
- */
429
- public function parse_readme () {
430
- $url = ReduxFramework::$_dir;
431
- $url = str_replace('ReduxCore', '', $url);
432
-
433
- $file = file_exists ( $url . 'README.txt' ) ? $url . 'README.txt' : null;
434
-
435
- if ( !$file ) {
436
- $readme = '<p>' . __ ( 'No valid changlog was found.', 'redux-framework' ) . '</p>';
437
- } else {
438
- $readme = file_get_contents ( $file );
439
- $readme = nl2br ( esc_html ( $readme ) );
440
-
441
- $readme = explode ( '== Changelog ==', $readme );
442
- $readme = end ( $readme );
443
-
444
- $remove = explode( '== Attribution ==', $readme );
445
- $readme = str_replace( '== Attribution ==' . end( $remove ), '', $readme );
446
-
447
- $readme = preg_replace ( '/`(.*?)`/', '<code>\\1</code>', $readme );
448
- $readme = preg_replace ( '/[\040]\*\*(.*?)\*\*/', ' <strong>\\1</strong>', $readme );
449
- $readme = preg_replace ( '/[\040]\*(.*?)\*/', ' <em>\\1</em>', $readme );
450
- $readme = preg_replace ( '/= (.*?) =/', '<h4>\\1</h4>', $readme );
451
- $readme = preg_replace ( '/\[(.*?)\]\((.*?)\)/', '<a href="\\2">\\1</a>', $readme );
452
  }
453
 
454
- return $readme;
455
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
456
 
457
- /**
458
- * Render Contributors List
459
- *
460
- * @since 1.4
461
- * @uses Redux_Welcome::get_contributors()
462
- * @return string $contributor_list HTML formatted list of all the contributors for Redux
463
- */
464
- public function contributors () {
465
- $contributors = $this->get_contributors ();
 
 
 
 
466
 
467
- if ( empty ( $contributors ) )
468
- return '';
 
 
 
 
 
 
 
 
 
 
469
 
470
- $contributor_list = '<ul class="wp-people-group">';
471
 
472
- foreach ( $contributors as $contributor ) {
473
- $contributor_list .= '<li class="wp-person">';
474
- $contributor_list .= sprintf ( '<a href="%s" title="%s">', esc_url ( 'https://github.com/' . $contributor->login ), esc_html ( sprintf ( __ ( 'View %s', 'redux-framework' ), $contributor->login ) )
475
- );
476
- $contributor_list .= sprintf ( '<img src="%s" width="64" height="64" class="gravatar" alt="%s" />', esc_url ( $contributor->avatar_url ), esc_html ( $contributor->login ) );
477
- $contributor_list .= '</a>';
478
- $contributor_list .= sprintf ( '<a class="web" href="%s">%s</a>', esc_url ( 'https://github.com/' . $contributor->login ), esc_html ( $contributor->login ) );
479
- $contributor_list .= '</a>';
480
- $contributor_list .= '</li>';
481
  }
482
 
483
- $contributor_list .= '</ul>';
 
 
 
 
 
 
 
 
 
 
 
 
484
 
485
- return $contributor_list;
486
- }
487
 
488
- /**
489
- * Retreive list of contributors from GitHub.
490
- *
491
- * @access public
492
- * @since 1.4
493
- * @return array $contributors List of contributors
494
- */
495
- public function get_contributors () {
496
- $contributors = get_transient ( 'redux_contributors' );
497
-
498
- if ( false !== $contributors )
499
- return $contributors;
500
 
501
- $response = wp_remote_get ( 'https://api.github.com/repos/ReduxFramework/redux-framework/contributors', array( 'sslverify' => false ) );
 
 
502
 
503
- if ( is_wp_error ( $response ) || 200 != wp_remote_retrieve_response_code ( $response ) )
504
- return array();
505
 
506
- $contributors = json_decode ( wp_remote_retrieve_body ( $response ) );
 
507
 
508
- if ( !is_array ( $contributors ) )
509
- return array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
510
 
511
- set_transient ( 'redux_contributors', $contributors, 3600 );
 
512
 
513
- return $contributors;
514
- }
 
 
515
 
516
- /**
517
- * Sends user to the Welcome page on first activation of Redux as well as each
518
- * time Redux is upgraded to a new version
519
- *
520
- * @access public
521
- * @since 1.4
522
- * @global $redux_options Array of all the Redux Options
523
- * @return void
524
- */
525
- public function welcome () {
526
- logconsole('welcome.php');
527
- //return;
528
- // Bail if no activation redirect
529
- if ( !get_transient ( '_redux_activation_redirect' ) )
530
- return;
531
-
532
- // Delete the redirect transient
533
- delete_transient ( '_redux_activation_redirect' );
534
-
535
- // Bail if activating from network, or bulk
536
- if ( is_network_admin () || isset ( $_GET[ 'activate-multi' ] ) )
537
- return;
538
-
539
- $upgrade = get_option ( 'redux_version_upgraded_from' );
540
  //
541
  // if ( !$upgrade ) { // First time install
542
  // wp_safe_redirect ( admin_url ( 'index.php?page=redux-getting-started' ) );
@@ -545,7 +615,7 @@ class Redux_Welcome {
545
  // wp_safe_redirect ( admin_url ( 'index.php?page=redux-about' ) );
546
  // exit;
547
  // }
 
548
  }
549
- }
550
 
551
- new Redux_Welcome();
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) {
3
+ exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  }
5
 
6
+ class Redux_Welcome {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ /**
9
+ * @var string The capability users should have to view the page
10
+ */
11
+ public $minimum_capability = 'manage_options';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
+ /**
14
+ * Get things started
15
+ *
16
+ * @since 1.4
17
+ */
18
+ public function __construct() {
19
+ add_action( 'admin_menu', array( $this, 'admin_menus' ) );
20
+ add_action( 'admin_head', array( $this, 'admin_head' ) );
21
+ add_action( 'admin_init', array( $this, 'welcome' ) );
22
 
23
+ update_option( 'redux_version_upgraded_from', ReduxFramework::$_version );
24
+ set_transient( '_redux_activation_redirect', true, 30 );
 
 
25
 
26
+ }
27
+
28
+ /**
29
+ * Register the Dashboard Pages which are later hidden but these pages
30
+ * are used to render the Welcome and Credits pages.
31
+ *
32
+ * @access public
33
+ * @since 1.4
34
+ * @return void
35
+ */
36
+ public function admin_menus() {
37
+
38
+ // About Page
39
+ add_dashboard_page(
40
+ __( 'Welcome to Redux Framework', 'redux-framework' ), __( 'Welcome to Redux Framework', 'redux-framework' ), $this->minimum_capability, 'redux-about', array(
41
+ $this,
42
+ 'about_screen'
43
+ )
44
+ );
45
+
46
+ // Changelog Page
47
+ add_dashboard_page(
48
+ __( 'Redux Framework Changelog', 'redux-framework' ), __( 'Redux Framework Changelog', 'redux-framework' ), $this->minimum_capability, 'redux-changelog', array(
49
+ $this,
50
+ 'changelog_screen'
51
+ )
52
+ );
53
+
54
+ // Getting Started Page
55
+ add_dashboard_page(
56
+ __( 'Getting started with Redux Framework', 'redux-framework' ), __( 'Getting started with Redux Framework', 'redux-framework' ), $this->minimum_capability, 'redux-getting-started', array(
57
+ $this,
58
+ 'getting_started_screen'
59
+ )
60
+ );
61
+
62
+ // Credits Page
63
+ add_dashboard_page(
64
+ __( 'The people that develop Redux Framework', 'redux-framework' ), __( 'The people that develop Redux Framework', 'redux-framework' ), $this->minimum_capability, 'redux-credits', array(
65
+ $this,
66
+ 'credits_screen'
67
+ )
68
+ );
69
+ }
70
 
71
+ /**
72
+ * Hide Individual Dashboard Pages
73
+ *
74
+ * @access public
75
+ * @since 1.4
76
+ * @return void
77
+ */
78
+ public function admin_head() {
79
+ remove_submenu_page( 'index.php', 'redux-about' );
80
+ remove_submenu_page( 'index.php', 'redux-changelog' );
81
+ remove_submenu_page( 'index.php', 'redux-getting-started' );
82
+ remove_submenu_page( 'index.php', 'redux-credits' );
83
+
84
+ // Badge for welcome page
85
+ $badge_url = ReduxFramework::$_url . 'assets/images/redux-badge.png';
86
+ ?>
87
+ <style type="text/css" media="screen">
88
+ /*<![CDATA[*/
89
+ .redux-badge {
90
+ padding-top: 150px;
91
+ height: 52px;
92
+ width: 185px;
93
+ color: #666;
94
+ font-weight: bold;
95
+ font-size: 14px;
96
+ text-align: center;
97
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
98
+ margin: 0 -5px;
99
+ background: url('<?php echo $badge_url; ?>') no-repeat;
100
+ }
101
+
102
+ .about-wrap .redux-badge {
103
+ position: absolute;
104
+ top: 0;
105
+ right: 0;
106
+ }
107
+
108
+ .redux-welcome-screenshots {
109
+ float: right;
110
+ margin-left: 10px !important;
111
+ }
112
+
113
+ .about-wrap .feature-section {
114
+ margin-top: 20px;
115
+ }
116
+
117
+ /*]]>*/
118
+ </style>
119
  <?php
120
+ }
121
 
122
+ /**
123
+ * Navigation tabs
124
+ *
125
+ * @access public
126
+ * @since 1.9
127
+ * @return void
128
+ */
129
+ public function tabs() {
130
+ $selected = isset ( $_GET['page'] ) ? $_GET['page'] : 'redux-about';
131
+ ?>
132
+ <h2 class="nav-tab-wrapper">
133
+ <a class="nav-tab <?php echo $selected == 'redux-about' ? 'nav-tab-active' : ''; ?>"
134
+ href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-about' ), 'index.php' ) ) ); ?>">
135
+ <?php _e( "What's New", 'redux-framework' ); ?>
136
+ </a>
137
+ <a class="nav-tab <?php echo $selected == 'redux-getting-started' ? 'nav-tab-active' : ''; ?>"
138
+ href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-getting-started' ), 'index.php' ) ) ); ?>">
139
+ <?php _e( 'Getting Started', 'redux-framework' ); ?>
140
+ </a>
141
+ <a class="nav-tab <?php echo $selected == 'redux-changelog' ? 'nav-tab-active' : ''; ?>"
142
+ href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-changelog' ), 'index.php' ) ) ); ?>">
143
+ <?php _e( 'Changelog', 'redux-framework' ); ?>
144
+ </a>
145
+ <a class="nav-tab <?php echo $selected == 'redux-credits' ? 'nav-tab-active' : ''; ?>"
146
+ href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-credits' ), 'index.php' ) ) ); ?>">
147
+ <?php _e( 'Credits', 'redux-framework' ); ?>
148
+ </a>
149
+ </h2>
150
  <?php
151
+ }
152
+
153
+ /**
154
+ * Render About Screen
155
+ *
156
+ * @access public
157
+ * @since 1.4
158
+ * @return void
159
+ */
160
+ public function about_screen() {
161
+ list( $display_version ) = explode( '-', ReduxFramework::$_version );
162
+ ?>
163
+ <div class="wrap about-wrap">
164
+ <h1><?php printf( __( 'Welcome to Redux Framework %s', 'redux-framework' ), $display_version ); ?></h1>
165
 
166
+ <div
167
+ class="about-text"><?php printf( __( 'Thank you for updating to the latest version! Redux Framework %s is ready to <add description>', 'redux-framework' ), $display_version ); ?></div>
168
+ <div
169
+ class="redux-badge"><?php printf( __( 'Version %s', 'redux-framework' ), $display_version ); ?></div>
 
 
 
 
 
 
 
 
 
 
170
 
171
+ <?php $this->tabs(); ?>
172
 
173
+ <div class="changelog">
174
+ <h3><?php _e( 'Some Feature', 'redux-framework' ); ?></h3>
175
 
176
+ <div class="feature-section">
177
 
178
+ <h4><?php _e( 'Feature', 'redux-framework' ); ?></h4>
 
179
 
180
+ <p></p>
 
181
 
182
+ <h4><?php _e( 'Feature', 'redux-framework' ); ?></h4>
183
+
184
+ <p></p>
185
+
186
+ </div>
187
  </div>
 
188
 
189
+ <div class="changelog">
190
+ <h3><?php _e( 'Some feature', 'redux-framework' ); ?></h3>
191
+
192
+ <div class="feature-section">
193
+
194
 
195
+ <h4><?php _e( 'Feature', 'redux-framework' ); ?></h4>
196
 
197
+ <p></p>
198
 
199
+ <h4><?php _e( 'Feature', 'redux-framework' ); ?></h4>
 
200
 
201
+ <p></p>
 
202
 
203
+ <h4><?php _e( 'Feature', 'redux-framework' ); ?></h4>
 
204
 
205
+ <p></p>
206
 
207
 
208
+ <h4><?php _e( 'Feature', 'redux-framework' ); ?></h4>
209
+
210
+ <p></p>
211
+
212
+ <p></p>
213
+ </div>
214
  </div>
 
215
 
216
+ <div class="changelog">
217
+ <h3><?php _e( 'More Features', 'redux-framework' ); ?></h3>
218
 
219
+ <div class="feature-section">
220
 
221
+ <h4><?php _e( 'Feature', 'redux-framework' ); ?></h4>
 
222
 
223
+ <p><?php _e( 'description', 'redux-framework' ); ?></p>
 
224
 
225
+ <h4><?php _e( 'Feature', 'redux-framework' ); ?></h4>
226
 
227
+ <p><?php _e( 'description', 'redux-framework' ); ?></p>
228
 
 
 
229
 
230
+ <h4><?php _e( 'Feature', 'redux-framework' ); ?></h4>
231
+
232
+ <p><?php _e( 'description', 'redux-framework' ); ?></p>
233
+
234
+ </div>
235
  </div>
 
236
 
237
+ <div class="changelog">
238
+ <h3><?php _e( 'Additional Updates', 'redux-framework' ); ?></h3>
239
 
240
+ <div class="feature-section col three-col">
241
+ <div>
242
+ <h4><?php _e( 'Cool thing', 'redux-framework' ); ?></h4>
 
243
 
244
+ <p><?php _e( 'cool thing description.', 'redux-framework' ); ?></p>
 
 
245
 
246
+ <h4><?php _e( 'Cool thing', 'redux-framework' ); ?></h4>
 
 
247
 
248
+ <p><?php _e( 'cool thing description.', 'redux-framework' ); ?></p>
249
+ </div>
250
+
251
+ <div>
252
+ <h4><?php _e( 'Cool thing', 'redux-framework' ); ?></h4>
253
+
254
+ <p><?php _e( 'cool thing description.', 'redux-framework' ); ?></p>
255
+
256
+ <h4><?php _e( 'Cool thing', 'redux-framework' ); ?></h4>
257
 
258
+ <p><?php _e( 'cool thing description.', 'redux-framework' ); ?></p>
259
+ </div>
 
260
 
261
+ <div class="last-feature">
262
+ <h4><?php _e( 'Cool thing', 'redux-framework' ); ?></h4>
263
+
264
+ <p><?php _e( 'cool thing description.', 'redux-framework' ); ?></p>
265
+
266
+ <h4><?php _e( 'Cool thing', 'redux-framework' ); ?></h4>
267
+
268
+ <p><?php _e( 'cool thing description.', 'redux-framework' ); ?></p>
269
+ </div>
270
  </div>
271
  </div>
 
272
 
273
+ <div class="return-to-dashboard">
274
+ <a href="<?php echo esc_url( admin_url( add_query_arg( array(
275
+ 'post_type' => 'download',
276
+ 'page' => 'redux-settings'
277
+ ), 'edit.php' ) ) ); ?>"><?php _e( 'Go to Redux Framework', 'redux-framework' ); ?></a> &middot;
278
+ <a href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-changelog' ), 'index.php' ) ) ); ?>"><?php _e( 'View the Full Changelog', 'redux-framework' ); ?></a>
279
+ </div>
280
  </div>
 
281
  <?php
282
+ }
283
 
284
+ /**
285
+ * Render Changelog Screen
286
+ *
287
+ * @access public
288
+ * @since 2.0.3
289
+ * @return void
290
+ */
291
+ public function changelog_screen() {
292
+ list( $display_version ) = explode( '-', ReduxFramework::$_version );
293
+ ?>
294
+ <div class="wrap about-wrap">
295
+ <h1><?php _e( 'Redux Framework Changelog', 'redux-framework' ); ?></h1>
296
+
297
+ <div
298
+ class="about-text"><?php printf( __( 'Thank you for updating to the latest version! Redux Framework %s is ready to make your <description>', 'redux-framework' ), $display_version ); ?></div>
299
+ <div
300
+ class="redux-badge"><?php printf( __( 'Version %s', 'redux-framework' ), $display_version ); ?></div>
301
+
302
+ <?php $this->tabs(); ?>
303
+
304
+ <div class="changelog">
305
+ <h3><?php _e( 'Full Changelog', 'redux-framework' ); ?></h3>
306
+
307
+ <div class="feature-section">
308
+ <?php echo $this->parse_readme(); ?>
309
+ </div>
310
  </div>
 
311
 
312
+ <div class="return-to-dashboard">
313
+ <a href="<?php echo esc_url( admin_url( add_query_arg( array(
314
+ 'post_type' => 'download',
315
+ 'page' => 'redux-settings'
316
+ ), 'edit.php' ) ) ); ?>"><?php _e( 'Go to Redux Framework', 'redux-framework' ); ?></a>
317
+ </div>
318
  </div>
 
319
  <?php
320
+ }
321
 
322
+ /**
323
+ * Render Getting Started Screen
324
+ *
325
+ * @access public
326
+ * @since 1.9
327
+ * @return void
328
+ */
329
+ public function getting_started_screen() {
330
+ list( $display_version ) = explode( '-', ReduxFramework::$_version );
331
+ ?>
332
+ <div class="wrap about-wrap">
333
+ <h1><?php printf( __( 'Welcome to Redux Framework %s', 'redux-framework' ), $display_version ); ?></h1>
 
 
334
 
335
+ <div
336
+ class="about-text"><?php printf( __( 'Thank you for updating to the latest version! Redux Framework %s is ready to make your <description>', 'redux-framework' ), $display_version ); ?></div>
337
+ <div
338
+ class="redux-badge"><?php printf( __( 'Version %s', 'redux-framework' ), $display_version ); ?></div>
339
 
340
+ <?php $this->tabs(); ?>
341
 
342
+ <p class="about-description"><?php _e( 'Use the tips below to get started using Redux Framework. You\'ll be up and running in no time!', 'redux-framework' ); ?></p>
 
343
 
344
+ <div class="changelog">
345
+ <h3><?php _e( 'Creating Your First Panel', 'redux-framework' ); ?></h3>
346
 
347
+ <div class="feature-section">
348
 
349
 
350
+ <h4><?php printf( __( '<a href="%s">%s &rarr; Add New</a>', 'redux-framework' ), admin_url( 'post-new.php?post_type=download' ), redux_get_label_plural() ); ?></h4>
 
351
 
352
+ <p><?php printf( __( 'The %s menu is your access point for all aspects of your Easy Digital Downloads product creation and setup. To create your first product, simply click Add New and then fill out the product details.', 'redux-framework' ), redux_get_label_plural() ); ?></p>
 
353
 
354
+ <h4><?php _e( 'Product Price', 'redux-framework' ); ?></h4>
 
355
 
356
+ <p><?php _e( 'Products can have simple prices or variable prices if you wish to have more than one price point for a product. For a single price, simply enter the price. For multiple price points, click <em>Enable variable pricing</em> and enter the options.', 'redux-framework' ); ?></p>
357
+
358
+ <h4><?php _e( 'Download Files', 'redux-framework' ); ?></h4>
359
+
360
+ <p><?php _e( 'Uploading the downloadable files is simple. Click <em>Upload File</em> in the Download Files section and choose your download file. To add more than one file, simply click the <em>Add New</em> button.', 'redux-framework' ); ?></p>
361
+
362
+ </div>
363
  </div>
 
364
 
365
+ <div class="changelog">
366
+ <h3><?php _e( 'Display a Product Grid', 'redux-framework' ); ?></h3>
367
+
368
+ <div class="feature-section">
369
+
370
+ <img src="<?php echo Redux_PLUGIN_URL . 'assets/images/screenshots/grid.png'; ?>"
371
+ class="redux-welcome-screenshots"/>
372
 
373
+ <h4><?php _e( 'Flexible Product Grids', 'redux-framework' ); ?></h4>
374
 
375
+ <p><?php _e( 'The [downloads] shortcode will display a product grid that works with any theme, no matter the size. It is even responsive!', 'redux-framework' ); ?></p>
376
 
377
+ <h4><?php _e( 'Change the Number of Columns', 'redux-framework' ); ?></h4>
 
378
 
379
+ <p><?php _e( 'You can easily change the number of columns by adding the columns="x" parameter:', 'redux-framework' ); ?></p>
 
 
380
 
381
+ <p>
382
+ <pre>[downloads columns="4"]</pre>
383
+ </p>
384
+
385
+ <h4><?php _e( 'Additional Display Options', 'redux-framework' ); ?></h4>
386
+
387
+ <p><?php _e( 'The product grids can be customized in any way you wish and there is <a href="%s">extensive documentation</a> to assist you.', 'redux-framework' ); ?></p>
388
+ </div>
389
  </div>
 
390
 
391
+ <div class="changelog">
392
+ <h3><?php _e( 'Purchase Buttons Anywhere', 'redux-framework' ); ?></h3>
393
+
394
+ <div class="feature-section">
395
 
 
396
 
397
+ <h4><?php _e( 'The <em>[purchase_link]</em> Shortcode', 'redux-framework' ); ?></h4>
398
 
399
+ <p><?php _e( 'With easily accessible shortcodes to display purchase buttons, you can add a Buy Now or Add to Cart button for any product anywhere on your site in seconds.', 'redux-framework' ); ?></p>
400
 
401
+ <h4><?php _e( 'Buy Now Buttons', 'redux-framework' ); ?></h4>
 
402
 
403
+ <p><?php _e( 'Purchase buttons can behave as either Add to Cart or Buy Now buttons. With Buy Now buttons customers are taken straight to PayPal, giving them the most frictionless purchasing experience possible.', 'redux-framework' ); ?></p>
 
404
 
405
+ </div>
406
  </div>
 
407
 
408
+ <div class="changelog">
409
+ <h3><?php _e( 'Need Help?', 'redux-framework' ); ?></h3>
410
+
411
+ <div class="feature-section">
412
 
413
+ <h4><?php _e( 'Phenomenal Support', 'redux-framework' ); ?></h4>
414
 
415
+ <p><?php _e( 'We do our best to provide the best support we can. If you encounter a problem or have a question, post a question in the <a href="' . 'https://' . 'easydigitaldownloads.com/support">support forums</a>.', 'redux-framework' ); ?></p>
 
416
 
417
+ <h4><?php _e( 'Need Even Faster Support?', 'redux-framework' ); ?></h4>
 
418
 
419
+ <p><?php _e( 'Our <a href="' . 'https://' . 'easydigitaldownloads.com/support/pricing/">Priority Support forums</a> are there for customers that need faster and/or more in-depth assistance.', 'redux-framework' ); ?></p>
420
+
421
+ </div>
422
  </div>
 
423
 
424
+ <div class="changelog">
425
+ <h3><?php _e( 'Stay Up to Date', 'redux-framework' ); ?></h3>
426
+
427
+ <div class="feature-section">
428
+
429
+ <h4><?php _e( 'Get Notified of Extension Releases', 'redux-framework' ); ?></h4>
430
 
431
+ <p><?php _e( 'New extensions that make Easy Digital Downloads even more powerful are released nearly every single week. Subscribe to the newsletter to stay up to date with our latest releases. <a href="' . 'http://' . 'eepurl.com/kaerz" target="_blank">Signup now</a> to ensure you do not miss a release!', 'redux-framework' ); ?></p>
432
 
433
+ <h4><?php _e( 'Get Alerted About New Tutorials', 'redux-framework' ); ?></h4>
 
434
 
435
+ <p><?php _e( '<a href="' . 'http://' . 'eepurl.com/kaerz" target="_blank">Signup now</a> to hear about the latest tutorial releases that explain how to take Easy Digital Downloads further.', 'redux-framework' ); ?></p>
 
436
 
437
+ </div>
438
  </div>
 
439
 
440
+ <div class="changelog">
441
+ <h3><?php _e( 'Extensions for Everything', 'redux-framework' ); ?></h3>
442
+
443
+ <div class="feature-section">
444
 
445
+ <h4><?php _e( 'Over 250 Extensions', 'redux-framework' ); ?></h4>
446
 
447
+ <p><?php _e( 'Add-on plugins are available that greatly extend the default functionality of Easy Digital Downloads. There are extensions for payment processors, such as Stripe and PayPal, extensions for newsletter integrations, and many, many more.', 'redux-framework' ); ?></p>
 
448
 
449
+ <h4><?php _e( 'Visit the Extension Store', 'redux-framework' ); ?></h4>
 
450
 
451
+ <p><?php _e( '<a href="' . 'https://' . 'asydigitaldownloads.com/extensions" target="_blank">The Extensions store</a> has a list of all available extensions, including convenient category filters so you can find exactly what you are looking for.', 'redux-framework' ); ?></p>
452
+
453
+ </div>
454
  </div>
 
455
 
456
+ </div>
457
  <?php
458
+ }
459
 
460
+ /**
461
+ * Render Credits Screen
462
+ *
463
+ * @access public
464
+ * @since 1.4
465
+ * @return void
466
+ */
467
+ public function credits_screen() {
468
+ list( $display_version ) = explode( '-', ReduxFramework::$_version );
469
+ ?>
470
+ <div class="wrap about-wrap">
471
+ <h1><?php printf( __( 'Welcome to Redux Framework %s', 'redux-framework' ), $display_version ); ?></h1>
472
+
473
+ <div
474
+ class="about-text"><?php printf( __( 'Thank you for updating to the latest version! Redux Framework %s is ready to make your <description>', 'redux-framework' ), $display_version ); ?></div>
475
+ <div
476
+ class="redux-badge"><?php printf( __( 'Version %s', 'redux-framework' ), $display_version ); ?></div>
477
+
478
+ <?php $this->tabs(); ?>
479
+
480
+ <p class="about-description"><?php _e( 'Redux Framework is created by a worldwide team of developers who <something witty here>', 'redux-framework' ); ?></p>
481
+
482
+ <?php echo $this->contributors(); ?>
483
+ </div>
484
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
485
  }
486
 
487
+ /**
488
+ * Parse the Redux readme.txt file
489
+ *
490
+ * @since 2.0.3
491
+ * @return string $readme HTML formatted readme file
492
+ */
493
+ public function parse_readme() {
494
+ $url = ReduxFramework::$_dir;
495
+ $url = str_replace( 'ReduxCore', '', $url );
496
+
497
+ $file = file_exists( $url . 'README.txt' ) ? $url . 'README.txt' : null;
498
+
499
+ if ( ! $file ) {
500
+ $readme = '<p>' . __( 'No valid changlog was found.', 'redux-framework' ) . '</p>';
501
+ } else {
502
+ $readme = wp_remote_retrieve_body( wp_remote_get( $file ) );
503
+ $readme = nl2br( esc_html( $readme ) );
504
+
505
+ $readme = explode( '== Changelog ==', $readme );
506
+ $readme = end( $readme );
507
+
508
+ $remove = explode( '== Attribution ==', $readme );
509
+ $readme = str_replace( '== Attribution ==' . end( $remove ), '', $readme );
510
+
511
+ $readme = preg_replace( '/`(.*?)`/', '<code>\\1</code>', $readme );
512
+ $readme = preg_replace( '/[\040]\*\*(.*?)\*\*/', ' <strong>\\1</strong>', $readme );
513
+ $readme = preg_replace( '/[\040]\*(.*?)\*/', ' <em>\\1</em>', $readme );
514
+ $readme = preg_replace( '/= (.*?) =/', '<h4>\\1</h4>', $readme );
515
+ $readme = preg_replace( '/\[(.*?)\]\((.*?)\)/', '<a href="\\2">\\1</a>', $readme );
516
+ }
517
+
518
+ return $readme;
519
+ }
520
 
521
+ /**
522
+ * Render Contributors List
523
+ *
524
+ * @since 1.4
525
+ * @uses Redux_Welcome::get_contributors()
526
+ * @return string $contributor_list HTML formatted list of all the contributors for Redux
527
+ */
528
+ public function contributors() {
529
+ $contributors = $this->get_contributors();
530
+
531
+ if ( empty ( $contributors ) ) {
532
+ return '';
533
+ }
534
 
535
+ $contributor_list = '<ul class="wp-people-group">';
536
+
537
+ foreach ( $contributors as $contributor ) {
538
+ $contributor_list .= '<li class="wp-person">';
539
+ $contributor_list .= sprintf( '<a href="%s" title="%s">', esc_url( 'https://github.com/' . $contributor->login ), esc_html( sprintf( __( 'View %s', 'redux-framework' ), $contributor->login ) )
540
+ );
541
+ $contributor_list .= sprintf( '<img src="%s" width="64" height="64" class="gravatar" alt="%s" />', esc_url( $contributor->avatar_url ), esc_html( $contributor->login ) );
542
+ $contributor_list .= '</a>';
543
+ $contributor_list .= sprintf( '<a class="web" href="%s">%s</a>', esc_url( 'https://github.com/' . $contributor->login ), esc_html( $contributor->login ) );
544
+ $contributor_list .= '</a>';
545
+ $contributor_list .= '</li>';
546
+ }
547
 
548
+ $contributor_list .= '</ul>';
549
 
550
+ return $contributor_list;
 
 
 
 
 
 
 
 
551
  }
552
 
553
+ /**
554
+ * Retreive list of contributors from GitHub.
555
+ *
556
+ * @access public
557
+ * @since 1.4
558
+ * @return array $contributors List of contributors
559
+ */
560
+ public function get_contributors() {
561
+ $contributors = get_transient( 'redux_contributors' );
562
+
563
+ if ( false !== $contributors ) {
564
+ return $contributors;
565
+ }
566
 
567
+ $response = wp_remote_get( 'https://api.github.com/repos/ReduxFramework/redux-framework/contributors', array( 'sslverify' => false ) );
 
568
 
569
+ if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
570
+ return array();
571
+ }
572
+
573
+ $contributors = json_decode( wp_remote_retrieve_body( $response ) );
 
 
 
 
 
 
 
574
 
575
+ if ( ! is_array( $contributors ) ) {
576
+ return array();
577
+ }
578
 
579
+ set_transient( 'redux_contributors', $contributors, 3600 );
 
580
 
581
+ return $contributors;
582
+ }
583
 
584
+ /**
585
+ * Sends user to the Welcome page on first activation of Redux as well as each
586
+ * time Redux is upgraded to a new version
587
+ *
588
+ * @access public
589
+ * @since 1.4
590
+ * @global $redux_options Array of all the Redux Options
591
+ * @return void
592
+ */
593
+ public function welcome() {
594
+ logconsole( 'welcome.php' );
595
+ //return;
596
+ // Bail if no activation redirect
597
+ if ( ! get_transient( '_redux_activation_redirect' ) ) {
598
+ return;
599
+ }
600
 
601
+ // Delete the redirect transient
602
+ delete_transient( '_redux_activation_redirect' );
603
 
604
+ // Bail if activating from network, or bulk
605
+ if ( is_network_admin() || isset ( $_GET['activate-multi'] ) ) {
606
+ return;
607
+ }
608
 
609
+ $upgrade = get_option( 'redux_version_upgraded_from' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
610
  //
611
  // if ( !$upgrade ) { // First time install
612
  // wp_safe_redirect ( admin_url ( 'index.php?page=redux-getting-started' ) );
615
  // wp_safe_redirect ( admin_url ( 'index.php?page=redux-about' ) );
616
  // exit;
617
  // }
618
+ }
619
  }
 
620
 
621
+ new Redux_Welcome();
ReduxCore/languages/ar.mo CHANGED
Binary file
ReduxCore/languages/bg_BG.mo CHANGED
Binary file
ReduxCore/languages/de_DE.mo CHANGED
Binary file
ReduxCore/languages/el.mo CHANGED
Binary file
ReduxCore/languages/es_ES.mo CHANGED
Binary file
ReduxCore/languages/es_MX.mo CHANGED
Binary file
ReduxCore/languages/fa_IR.mo CHANGED
Binary file
ReduxCore/languages/fi.mo CHANGED
Binary file
ReduxCore/languages/fr_FR.mo CHANGED
Binary file
ReduxCore/languages/he_IL.mo CHANGED
Binary file
ReduxCore/languages/hi_IN.mo CHANGED
Binary file
ReduxCore/languages/hr.mo CHANGED
Binary file
ReduxCore/languages/hu_HU.mo CHANGED
Binary file
ReduxCore/languages/id_ID.mo CHANGED
Binary file
ReduxCore/languages/it_IT.mo CHANGED
Binary file
ReduxCore/languages/km.mo CHANGED
Binary file
ReduxCore/languages/ne_NP.mo CHANGED
Binary file
ReduxCore/languages/nl_NL.mo CHANGED
Binary file
ReduxCore/languages/pl_PL.mo CHANGED
Binary file
ReduxCore/languages/pt_BR.mo CHANGED
Binary file
ReduxCore/languages/pt_PT.mo CHANGED
Binary file
ReduxCore/languages/redux-framework.pot CHANGED
@@ -2,10 +2,10 @@
2
  # This file is distributed under the GPL3+.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Redux Framework 3.3.8\n"
6
  "Report-Msgid-Bugs-To: "
7
  "https://github.com/ReduxFramework/ReduxFramework/issues\n"
8
- "POT-Creation-Date: 2014-09-23 00:37:29+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=utf-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
@@ -25,38 +25,38 @@ msgstr ""
25
  "X-Poedit-Bookmarks: \n"
26
  "X-Textdomain-Support: yes\n"
27
 
28
- #: ReduxCore/extensions/customizer/extension_customizer.php:470
29
- #: ReduxCore/framework.php:1936
30
  msgid "You have changes that are not saved. Would you like to save them now?"
31
  msgstr ""
32
 
33
- #: ReduxCore/extensions/customizer/extension_customizer.php:471
34
- #: ReduxCore/framework.php:1944
35
  msgid "Are you sure? Resetting will lose all custom values."
36
  msgstr ""
37
 
38
- #: ReduxCore/extensions/customizer/extension_customizer.php:472
39
- #: ReduxCore/framework.php:1960
40
  msgid ""
41
  "Your current options will be replaced with the values of this preset. Would "
42
  "you like to proceed?"
43
  msgstr ""
44
 
45
- #: ReduxCore/extensions/customizer/extension_customizer.php:505
46
  msgid "You have changes that are not saved. Would you like to save them now?"
47
  msgstr ""
48
 
49
- #: ReduxCore/extensions/customizer/extension_customizer.php:506
50
  msgid "Are you sure? Resetting will lose all custom values."
51
  msgstr ""
52
 
53
- #: ReduxCore/extensions/customizer/extension_customizer.php:507
54
  msgid ""
55
  "Your current options will be replaced with the values of this preset. "
56
  "Would you like to proceed?"
57
  msgstr ""
58
 
59
- #: ReduxCore/framework.php:203
60
  msgid "Options panel created using %1$s"
61
  msgstr ""
62
 
@@ -64,84 +64,107 @@ msgstr ""
64
  msgid "Redux Framework"
65
  msgstr ""
66
 
67
- #: ReduxCore/framework.php:207 ReduxCore/framework.php:211
68
  msgid "Options"
69
  msgstr ""
70
 
71
- #: ReduxCore/framework.php:1355 ReduxCore/framework.php:1356
72
- #: ReduxCore/framework.php:3541 ReduxCore/framework.php:3620
73
  msgid "System Info"
74
  msgstr ""
75
 
76
- #: ReduxCore/framework.php:1952
77
  msgid "Are you sure? Resetting will lose all custom values in this section."
78
  msgstr ""
79
 
80
- #: ReduxCore/framework.php:1967
81
  msgid "Please Wait"
82
  msgstr ""
83
 
84
- #: ReduxCore/framework.php:2114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  msgid "Hints"
86
  msgstr ""
87
 
88
- #: ReduxCore/framework.php:2239
89
  msgid "Default"
90
  msgstr ""
91
 
92
- #: ReduxCore/framework.php:3292
93
  msgid "Warning- This options panel will not work properly without javascript!"
94
  msgstr ""
95
 
96
- #: ReduxCore/framework.php:3339
97
  msgid "Developer Mode Enabled"
98
  msgstr ""
99
 
100
- #: ReduxCore/framework.php:3367
101
  msgid "Expand"
102
  msgstr ""
103
 
104
- #: ReduxCore/framework.php:3369 ReduxCore/framework.php:3677
105
  msgid "Save Changes"
106
  msgstr ""
107
 
108
- #: ReduxCore/framework.php:3373 ReduxCore/framework.php:3681
109
  msgid "Reset Section"
110
  msgstr ""
111
 
112
- #: ReduxCore/framework.php:3375 ReduxCore/framework.php:3683
113
  msgid "Reset All"
114
  msgstr ""
115
 
116
- #: ReduxCore/framework.php:3380 ReduxCore/framework.php:3688
117
  msgid "Working..."
118
  msgstr ""
119
 
120
- #: ReduxCore/framework.php:3400
121
  msgid "Settings Imported!"
122
  msgstr ""
123
 
124
- #: ReduxCore/framework.php:3415
125
  msgid "All Defaults Restored!"
126
  msgstr ""
127
 
128
- #: ReduxCore/framework.php:3429
129
  msgid "Section Defaults Restored!"
130
  msgstr ""
131
 
132
- #: ReduxCore/framework.php:3443
133
  msgid "Settings Saved!"
134
  msgstr ""
135
 
136
- #: ReduxCore/framework.php:3461
137
  msgid "Settings have changed, you should save them!"
138
  msgstr ""
139
 
140
- #: ReduxCore/framework.php:3469
141
  msgid "error(s) were found!"
142
  msgstr ""
143
 
144
- #: ReduxCore/framework.php:3477
145
  msgid "warning(s) were found!"
146
  msgstr ""
147
 
@@ -157,6 +180,19 @@ msgstr ""
157
  msgid "Dismiss"
158
  msgstr ""
159
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  #: ReduxCore/inc/debug.php:41 ReduxCore/inc/debug.php:69
161
  #: ReduxCore/inc/debug.php:76 ReduxCore/inc/debug.php:77
162
  msgid "Options Object"
@@ -554,7 +590,7 @@ msgstr ""
554
  msgid "Welcome to the Redux Demo Panel"
555
  msgstr ""
556
 
557
- #: ReduxCore/inc/tracking.php:152 ReduxCore/inc/welcome.php:125
558
  msgid "Getting Started"
559
  msgstr ""
560
 
@@ -680,132 +716,132 @@ msgstr ""
680
  msgid "Welcome to Redux Framework"
681
  msgstr ""
682
 
683
- #: ReduxCore/inc/welcome.php:45 ReduxCore/inc/welcome.php:259
684
  msgid "Redux Framework Changelog"
685
  msgstr ""
686
 
687
- #: ReduxCore/inc/welcome.php:50
688
  msgid "Getting started with Redux Framework"
689
  msgstr ""
690
 
691
- #: ReduxCore/inc/welcome.php:55
692
  msgid "The people that develop Redux Framework"
693
  msgstr ""
694
 
695
- #: ReduxCore/inc/welcome.php:122
696
  msgid "What's New"
697
  msgstr ""
698
 
699
- #: ReduxCore/inc/welcome.php:128
700
  msgid "Changelog"
701
  msgstr ""
702
 
703
- #: ReduxCore/inc/welcome.php:131
704
  msgid "Credits"
705
  msgstr ""
706
 
707
- #: ReduxCore/inc/welcome.php:148 ReduxCore/inc/welcome.php:291
708
- #: ReduxCore/inc/welcome.php:410
709
  msgid "Welcome to Redux Framework %s"
710
  msgstr ""
711
 
712
- #: ReduxCore/inc/welcome.php:149
713
  msgid ""
714
  "Thank you for updating to the latest version! Redux Framework %s is ready "
715
  "to <add description>"
716
  msgstr ""
717
 
718
- #: ReduxCore/inc/welcome.php:150 ReduxCore/inc/welcome.php:261
719
- #: ReduxCore/inc/welcome.php:293 ReduxCore/inc/welcome.php:412
720
  msgid "Version %s"
721
  msgstr ""
722
 
723
- #: ReduxCore/inc/welcome.php:155
724
  msgid "Some Feature"
725
  msgstr ""
726
 
727
- #: ReduxCore/inc/welcome.php:159 ReduxCore/inc/welcome.php:162
728
- #: ReduxCore/inc/welcome.php:174 ReduxCore/inc/welcome.php:177
729
- #: ReduxCore/inc/welcome.php:180 ReduxCore/inc/welcome.php:185
730
- #: ReduxCore/inc/welcome.php:196 ReduxCore/inc/welcome.php:199
731
- #: ReduxCore/inc/welcome.php:204
732
  msgid "Feature"
733
  msgstr ""
734
 
735
- #: ReduxCore/inc/welcome.php:169
736
  msgid "Some feature"
737
  msgstr ""
738
 
739
- #: ReduxCore/inc/welcome.php:192
740
  msgid "More Features"
741
  msgstr ""
742
 
743
- #: ReduxCore/inc/welcome.php:197 ReduxCore/inc/welcome.php:200
744
- #: ReduxCore/inc/welcome.php:205
745
  msgid "description"
746
  msgstr ""
747
 
748
- #: ReduxCore/inc/welcome.php:211
749
  msgid "Additional Updates"
750
  msgstr ""
751
 
752
- #: ReduxCore/inc/welcome.php:215 ReduxCore/inc/welcome.php:218
753
- #: ReduxCore/inc/welcome.php:223 ReduxCore/inc/welcome.php:226
754
- #: ReduxCore/inc/welcome.php:231 ReduxCore/inc/welcome.php:234
755
  msgid "Cool thing"
756
  msgstr ""
757
 
758
- #: ReduxCore/inc/welcome.php:216 ReduxCore/inc/welcome.php:219
759
- #: ReduxCore/inc/welcome.php:224 ReduxCore/inc/welcome.php:227
760
- #: ReduxCore/inc/welcome.php:232 ReduxCore/inc/welcome.php:235
761
  msgid "cool thing description."
762
  msgstr ""
763
 
764
- #: ReduxCore/inc/welcome.php:241 ReduxCore/inc/welcome.php:274
765
  msgid "Go to Redux Framework"
766
  msgstr ""
767
 
768
- #: ReduxCore/inc/welcome.php:242
769
  msgid "View the Full Changelog"
770
  msgstr ""
771
 
772
- #: ReduxCore/inc/welcome.php:260 ReduxCore/inc/welcome.php:292
773
- #: ReduxCore/inc/welcome.php:411
774
  msgid ""
775
  "Thank you for updating to the latest version! Redux Framework %s is ready "
776
  "to make your <description>"
777
  msgstr ""
778
 
779
- #: ReduxCore/inc/welcome.php:266
780
  msgid "Full Changelog"
781
  msgstr ""
782
 
783
- #: ReduxCore/inc/welcome.php:297
784
  msgid ""
785
  "Use the tips below to get started using Redux Framework. You'll be up and "
786
  "running in no time!"
787
  msgstr ""
788
 
789
- #: ReduxCore/inc/welcome.php:300
790
  msgid "Creating Your First Panel"
791
  msgstr ""
792
 
793
- #: ReduxCore/inc/welcome.php:306
794
  msgid "<a href=\"%s\">%s &rarr; Add New</a>"
795
  msgstr ""
796
 
797
- #: ReduxCore/inc/welcome.php:307
798
  msgid ""
799
  "The %s menu is your access point for all aspects of your Easy Digital "
800
  "Downloads product creation and setup. To create your first product, simply "
801
  "click Add New and then fill out the product details."
802
  msgstr ""
803
 
804
- #: ReduxCore/inc/welcome.php:309
805
  msgid "Product Price"
806
  msgstr ""
807
 
808
- #: ReduxCore/inc/welcome.php:310
809
  msgid ""
810
  "Products can have simple prices or variable prices if you wish to have more "
811
  "than one price point for a product. For a single price, simply enter the "
@@ -813,139 +849,110 @@ msgid ""
813
  "and enter the options."
814
  msgstr ""
815
 
816
- #: ReduxCore/inc/welcome.php:312
817
  msgid "Download Files"
818
  msgstr ""
819
 
820
- #: ReduxCore/inc/welcome.php:313
821
  msgid ""
822
  "Uploading the downloadable files is simple. Click <em>Upload File</em> in "
823
  "the Download Files section and choose your download file. To add more than "
824
  "one file, simply click the <em>Add New</em> button."
825
  msgstr ""
826
 
827
- #: ReduxCore/inc/welcome.php:319
828
  msgid "Display a Product Grid"
829
  msgstr ""
830
 
831
- #: ReduxCore/inc/welcome.php:325
832
  msgid "Flexible Product Grids"
833
  msgstr ""
834
 
835
- #: ReduxCore/inc/welcome.php:326
836
  msgid ""
837
  "The [downloads] shortcode will display a product grid that works with any "
838
  "theme, no matter the size. It is even responsive!"
839
  msgstr ""
840
 
841
- #: ReduxCore/inc/welcome.php:328
842
  msgid "Change the Number of Columns"
843
  msgstr ""
844
 
845
- #: ReduxCore/inc/welcome.php:329
846
  msgid ""
847
  "You can easily change the number of columns by adding the columns=\"x\" "
848
  "parameter:"
849
  msgstr ""
850
 
851
- #: ReduxCore/inc/welcome.php:332
852
  msgid "Additional Display Options"
853
  msgstr ""
854
 
855
- #: ReduxCore/inc/welcome.php:333
856
  msgid ""
857
  "The product grids can be customized in any way you wish and there is <a "
858
  "href=\"%s\">extensive documentation</a> to assist you."
859
  msgstr ""
860
 
861
- #: ReduxCore/inc/welcome.php:338
862
  msgid "Purchase Buttons Anywhere"
863
  msgstr ""
864
 
865
- #: ReduxCore/inc/welcome.php:344
866
  msgid "The <em>[purchase_link]</em> Shortcode"
867
  msgstr ""
868
 
869
- #: ReduxCore/inc/welcome.php:345
870
  msgid ""
871
  "With easily accessible shortcodes to display purchase buttons, you can add "
872
  "a Buy Now or Add to Cart button for any product anywhere on your site in "
873
  "seconds."
874
  msgstr ""
875
 
876
- #: ReduxCore/inc/welcome.php:347
877
  msgid "Buy Now Buttons"
878
  msgstr ""
879
 
880
- #: ReduxCore/inc/welcome.php:348
881
  msgid ""
882
  "Purchase buttons can behave as either Add to Cart or Buy Now buttons. With "
883
  "Buy Now buttons customers are taken straight to PayPal, giving them the "
884
  "most frictionless purchasing experience possible."
885
  msgstr ""
886
 
887
- #: ReduxCore/inc/welcome.php:354
888
  msgid "Need Help?"
889
  msgstr ""
890
 
891
- #: ReduxCore/inc/welcome.php:358
892
  msgid "Phenomenal Support"
893
  msgstr ""
894
 
895
- #: ReduxCore/inc/welcome.php:359
896
- msgid ""
897
- "We do our best to provide the best support we can. If you encounter a "
898
- "problem or have a question, post a question in the <a "
899
- "href=\"https://easydigitaldownloads.com/support\">support forums</a>."
900
- msgstr ""
901
-
902
- #: ReduxCore/inc/welcome.php:361
903
  msgid "Need Even Faster Support?"
904
  msgstr ""
905
 
906
- #: ReduxCore/inc/welcome.php:362
907
- msgid ""
908
- "Our <a href=\"https://easydigitaldownloads.com/support/pricing/\">Priority "
909
- "Support forums</a> are there for customers that need faster and/or more "
910
- "in-depth assistance."
911
- msgstr ""
912
-
913
- #: ReduxCore/inc/welcome.php:368
914
  msgid "Stay Up to Date"
915
  msgstr ""
916
 
917
- #: ReduxCore/inc/welcome.php:372
918
  msgid "Get Notified of Extension Releases"
919
  msgstr ""
920
 
921
- #: ReduxCore/inc/welcome.php:373
922
- msgid ""
923
- "New extensions that make Easy Digital Downloads even more powerful are "
924
- "released nearly every single week. Subscribe to the newsletter to stay up "
925
- "to date with our latest releases. <a href=\"http://eepurl.com/kaerz\" "
926
- "target=\"_blank\">Signup now</a> to ensure you do not miss a release!"
927
- msgstr ""
928
-
929
- #: ReduxCore/inc/welcome.php:375
930
  msgid "Get Alerted About New Tutorials"
931
  msgstr ""
932
 
933
- #: ReduxCore/inc/welcome.php:376
934
- msgid ""
935
- "<a href=\"http://eepurl.com/kaerz\" target=\"_blank\">Signup now</a> to "
936
- "hear about the latest tutorial releases that explain how to take Easy "
937
- "Digital Downloads further."
938
- msgstr ""
939
-
940
- #: ReduxCore/inc/welcome.php:382
941
  msgid "Extensions for Everything"
942
  msgstr ""
943
 
944
- #: ReduxCore/inc/welcome.php:386
945
  msgid "Over 250 Extensions"
946
  msgstr ""
947
 
948
- #: ReduxCore/inc/welcome.php:387
949
  msgid ""
950
  "Add-on plugins are available that greatly extend the default functionality "
951
  "of Easy Digital Downloads. There are extensions for payment processors, "
@@ -953,29 +960,21 @@ msgid ""
953
  "many, many more."
954
  msgstr ""
955
 
956
- #: ReduxCore/inc/welcome.php:389
957
  msgid "Visit the Extension Store"
958
  msgstr ""
959
 
960
- #: ReduxCore/inc/welcome.php:390
961
- msgid ""
962
- "<a href=\"https://easydigitaldownloads.com/extensions\" "
963
- "target=\"_blank\">The Extensions store</a> has a list of all available "
964
- "extensions, including convenient category filters so you can find exactly "
965
- "what you are looking for."
966
- msgstr ""
967
-
968
- #: ReduxCore/inc/welcome.php:416
969
  msgid ""
970
  "Redux Framework is created by a worldwide team of developers who <something "
971
  "witty here>"
972
  msgstr ""
973
 
974
- #: ReduxCore/inc/welcome.php:436
975
  msgid "No valid changlog was found."
976
  msgstr ""
977
 
978
- #: ReduxCore/inc/welcome.php:474
979
  msgid "View %s"
980
  msgstr ""
981
 
2
  # This file is distributed under the GPL3+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Redux Framework 3.3.8.3\n"
6
  "Report-Msgid-Bugs-To: "
7
  "https://github.com/ReduxFramework/ReduxFramework/issues\n"
8
+ "POT-Creation-Date: 2014-09-24 17:38:11+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=utf-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
25
  "X-Poedit-Bookmarks: \n"
26
  "X-Textdomain-Support: yes\n"
27
 
28
+ #: ReduxCore/extensions/customizer/extension_customizer.php:472
29
+ #: ReduxCore/framework.php:1940
30
  msgid "You have changes that are not saved. Would you like to save them now?"
31
  msgstr ""
32
 
33
+ #: ReduxCore/extensions/customizer/extension_customizer.php:473
34
+ #: ReduxCore/framework.php:1948
35
  msgid "Are you sure? Resetting will lose all custom values."
36
  msgstr ""
37
 
38
+ #: ReduxCore/extensions/customizer/extension_customizer.php:474
39
+ #: ReduxCore/framework.php:1964
40
  msgid ""
41
  "Your current options will be replaced with the values of this preset. Would "
42
  "you like to proceed?"
43
  msgstr ""
44
 
45
+ #: ReduxCore/extensions/customizer/extension_customizer.php:507
46
  msgid "You have changes that are not saved. Would you like to save them now?"
47
  msgstr ""
48
 
49
+ #: ReduxCore/extensions/customizer/extension_customizer.php:508
50
  msgid "Are you sure? Resetting will lose all custom values."
51
  msgstr ""
52
 
53
+ #: ReduxCore/extensions/customizer/extension_customizer.php:509
54
  msgid ""
55
  "Your current options will be replaced with the values of this preset. "
56
  "Would you like to proceed?"
57
  msgstr ""
58
 
59
+ #: ReduxCore/framework.php:207
60
  msgid "Options panel created using %1$s"
61
  msgstr ""
62
 
64
  msgid "Redux Framework"
65
  msgstr ""
66
 
67
+ #: ReduxCore/framework.php:211 ReduxCore/framework.php:215
68
  msgid "Options"
69
  msgstr ""
70
 
71
+ #: ReduxCore/framework.php:1359 ReduxCore/framework.php:1360
72
+ #: ReduxCore/framework.php:3561 ReduxCore/framework.php:3640
73
  msgid "System Info"
74
  msgstr ""
75
 
76
+ #: ReduxCore/framework.php:1956
77
  msgid "Are you sure? Resetting will lose all custom values in this section."
78
  msgstr ""
79
 
80
+ #: ReduxCore/framework.php:1971
81
  msgid "Please Wait"
82
  msgstr ""
83
 
84
+ #: ReduxCore/framework.php:2096
85
+ msgid "Enable"
86
+ msgstr ""
87
+
88
+ #: ReduxCore/framework.php:2101
89
+ msgid "Disable"
90
+ msgstr ""
91
+
92
+ #: ReduxCore/framework.php:2107
93
+ msgid "moving the mouse over"
94
+ msgstr ""
95
+
96
+ #: ReduxCore/framework.php:2109
97
+ msgid "clicking"
98
+ msgstr ""
99
+
100
+ #: ReduxCore/framework.php:2113
101
+ msgid ""
102
+ "Hints are tooltips that popup when %d the hint icon, offering addition "
103
+ "information about the field in which they appear. They can be %d d by "
104
+ "using the link below."
105
+ msgstr ""
106
+
107
+ #: ReduxCore/framework.php:2118
108
  msgid "Hints"
109
  msgstr ""
110
 
111
+ #: ReduxCore/framework.php:2243
112
  msgid "Default"
113
  msgstr ""
114
 
115
+ #: ReduxCore/framework.php:3308
116
  msgid "Warning- This options panel will not work properly without javascript!"
117
  msgstr ""
118
 
119
+ #: ReduxCore/framework.php:3359
120
  msgid "Developer Mode Enabled"
121
  msgstr ""
122
 
123
+ #: ReduxCore/framework.php:3387
124
  msgid "Expand"
125
  msgstr ""
126
 
127
+ #: ReduxCore/framework.php:3389 ReduxCore/framework.php:3697
128
  msgid "Save Changes"
129
  msgstr ""
130
 
131
+ #: ReduxCore/framework.php:3393 ReduxCore/framework.php:3701
132
  msgid "Reset Section"
133
  msgstr ""
134
 
135
+ #: ReduxCore/framework.php:3395 ReduxCore/framework.php:3703
136
  msgid "Reset All"
137
  msgstr ""
138
 
139
+ #: ReduxCore/framework.php:3400 ReduxCore/framework.php:3708
140
  msgid "Working..."
141
  msgstr ""
142
 
143
+ #: ReduxCore/framework.php:3420
144
  msgid "Settings Imported!"
145
  msgstr ""
146
 
147
+ #: ReduxCore/framework.php:3435
148
  msgid "All Defaults Restored!"
149
  msgstr ""
150
 
151
+ #: ReduxCore/framework.php:3449
152
  msgid "Section Defaults Restored!"
153
  msgstr ""
154
 
155
+ #: ReduxCore/framework.php:3463
156
  msgid "Settings Saved!"
157
  msgstr ""
158
 
159
+ #: ReduxCore/framework.php:3481
160
  msgid "Settings have changed, you should save them!"
161
  msgstr ""
162
 
163
+ #: ReduxCore/framework.php:3489
164
  msgid "error(s) were found!"
165
  msgstr ""
166
 
167
+ #: ReduxCore/framework.php:3497
168
  msgid "warning(s) were found!"
169
  msgstr ""
170
 
180
  msgid "Dismiss"
181
  msgstr ""
182
 
183
+ #: ReduxCore/inc/class.redux_themecheck.php:58
184
+ msgid ""
185
+ "The theme you are testing has %s embedded. We invite you to read the "
186
+ "%sTheme-Check Documentation%s to understand some warnings you will see "
187
+ "because of Redux."
188
+ msgstr ""
189
+
190
+ #: ReduxCore/inc/class.redux_themecheck.php:106
191
+ msgid ""
192
+ "The following directories & files are still located in your "
193
+ "<strong>Redux</strong> directory. They may cause errors in Theme-Check."
194
+ msgstr ""
195
+
196
  #: ReduxCore/inc/debug.php:41 ReduxCore/inc/debug.php:69
197
  #: ReduxCore/inc/debug.php:76 ReduxCore/inc/debug.php:77
198
  msgid "Options Object"
590
  msgid "Welcome to the Redux Demo Panel"
591
  msgstr ""
592
 
593
+ #: ReduxCore/inc/tracking.php:152 ReduxCore/inc/welcome.php:139
594
  msgid "Getting Started"
595
  msgstr ""
596
 
716
  msgid "Welcome to Redux Framework"
717
  msgstr ""
718
 
719
+ #: ReduxCore/inc/welcome.php:48 ReduxCore/inc/welcome.php:295
720
  msgid "Redux Framework Changelog"
721
  msgstr ""
722
 
723
+ #: ReduxCore/inc/welcome.php:56
724
  msgid "Getting started with Redux Framework"
725
  msgstr ""
726
 
727
+ #: ReduxCore/inc/welcome.php:64
728
  msgid "The people that develop Redux Framework"
729
  msgstr ""
730
 
731
+ #: ReduxCore/inc/welcome.php:135
732
  msgid "What's New"
733
  msgstr ""
734
 
735
+ #: ReduxCore/inc/welcome.php:143
736
  msgid "Changelog"
737
  msgstr ""
738
 
739
+ #: ReduxCore/inc/welcome.php:147
740
  msgid "Credits"
741
  msgstr ""
742
 
743
+ #: ReduxCore/inc/welcome.php:164 ReduxCore/inc/welcome.php:333
744
+ #: ReduxCore/inc/welcome.php:471
745
  msgid "Welcome to Redux Framework %s"
746
  msgstr ""
747
 
748
+ #: ReduxCore/inc/welcome.php:167
749
  msgid ""
750
  "Thank you for updating to the latest version! Redux Framework %s is ready "
751
  "to <add description>"
752
  msgstr ""
753
 
754
+ #: ReduxCore/inc/welcome.php:169 ReduxCore/inc/welcome.php:300
755
+ #: ReduxCore/inc/welcome.php:338 ReduxCore/inc/welcome.php:476
756
  msgid "Version %s"
757
  msgstr ""
758
 
759
+ #: ReduxCore/inc/welcome.php:174
760
  msgid "Some Feature"
761
  msgstr ""
762
 
763
+ #: ReduxCore/inc/welcome.php:178 ReduxCore/inc/welcome.php:182
764
+ #: ReduxCore/inc/welcome.php:195 ReduxCore/inc/welcome.php:199
765
+ #: ReduxCore/inc/welcome.php:203 ReduxCore/inc/welcome.php:208
766
+ #: ReduxCore/inc/welcome.php:221 ReduxCore/inc/welcome.php:225
767
+ #: ReduxCore/inc/welcome.php:230
768
  msgid "Feature"
769
  msgstr ""
770
 
771
+ #: ReduxCore/inc/welcome.php:190
772
  msgid "Some feature"
773
  msgstr ""
774
 
775
+ #: ReduxCore/inc/welcome.php:217
776
  msgid "More Features"
777
  msgstr ""
778
 
779
+ #: ReduxCore/inc/welcome.php:223 ReduxCore/inc/welcome.php:227
780
+ #: ReduxCore/inc/welcome.php:232
781
  msgid "description"
782
  msgstr ""
783
 
784
+ #: ReduxCore/inc/welcome.php:238
785
  msgid "Additional Updates"
786
  msgstr ""
787
 
788
+ #: ReduxCore/inc/welcome.php:242 ReduxCore/inc/welcome.php:246
789
+ #: ReduxCore/inc/welcome.php:252 ReduxCore/inc/welcome.php:256
790
+ #: ReduxCore/inc/welcome.php:262 ReduxCore/inc/welcome.php:266
791
  msgid "Cool thing"
792
  msgstr ""
793
 
794
+ #: ReduxCore/inc/welcome.php:244 ReduxCore/inc/welcome.php:248
795
+ #: ReduxCore/inc/welcome.php:254 ReduxCore/inc/welcome.php:258
796
+ #: ReduxCore/inc/welcome.php:264 ReduxCore/inc/welcome.php:268
797
  msgid "cool thing description."
798
  msgstr ""
799
 
800
+ #: ReduxCore/inc/welcome.php:277 ReduxCore/inc/welcome.php:316
801
  msgid "Go to Redux Framework"
802
  msgstr ""
803
 
804
+ #: ReduxCore/inc/welcome.php:278
805
  msgid "View the Full Changelog"
806
  msgstr ""
807
 
808
+ #: ReduxCore/inc/welcome.php:298 ReduxCore/inc/welcome.php:336
809
+ #: ReduxCore/inc/welcome.php:474
810
  msgid ""
811
  "Thank you for updating to the latest version! Redux Framework %s is ready "
812
  "to make your <description>"
813
  msgstr ""
814
 
815
+ #: ReduxCore/inc/welcome.php:305
816
  msgid "Full Changelog"
817
  msgstr ""
818
 
819
+ #: ReduxCore/inc/welcome.php:342
820
  msgid ""
821
  "Use the tips below to get started using Redux Framework. You'll be up and "
822
  "running in no time!"
823
  msgstr ""
824
 
825
+ #: ReduxCore/inc/welcome.php:345
826
  msgid "Creating Your First Panel"
827
  msgstr ""
828
 
829
+ #: ReduxCore/inc/welcome.php:350
830
  msgid "<a href=\"%s\">%s &rarr; Add New</a>"
831
  msgstr ""
832
 
833
+ #: ReduxCore/inc/welcome.php:352
834
  msgid ""
835
  "The %s menu is your access point for all aspects of your Easy Digital "
836
  "Downloads product creation and setup. To create your first product, simply "
837
  "click Add New and then fill out the product details."
838
  msgstr ""
839
 
840
+ #: ReduxCore/inc/welcome.php:354
841
  msgid "Product Price"
842
  msgstr ""
843
 
844
+ #: ReduxCore/inc/welcome.php:356
845
  msgid ""
846
  "Products can have simple prices or variable prices if you wish to have more "
847
  "than one price point for a product. For a single price, simply enter the "
849
  "and enter the options."
850
  msgstr ""
851
 
852
+ #: ReduxCore/inc/welcome.php:358
853
  msgid "Download Files"
854
  msgstr ""
855
 
856
+ #: ReduxCore/inc/welcome.php:360
857
  msgid ""
858
  "Uploading the downloadable files is simple. Click <em>Upload File</em> in "
859
  "the Download Files section and choose your download file. To add more than "
860
  "one file, simply click the <em>Add New</em> button."
861
  msgstr ""
862
 
863
+ #: ReduxCore/inc/welcome.php:366
864
  msgid "Display a Product Grid"
865
  msgstr ""
866
 
867
+ #: ReduxCore/inc/welcome.php:373
868
  msgid "Flexible Product Grids"
869
  msgstr ""
870
 
871
+ #: ReduxCore/inc/welcome.php:375
872
  msgid ""
873
  "The [downloads] shortcode will display a product grid that works with any "
874
  "theme, no matter the size. It is even responsive!"
875
  msgstr ""
876
 
877
+ #: ReduxCore/inc/welcome.php:377
878
  msgid "Change the Number of Columns"
879
  msgstr ""
880
 
881
+ #: ReduxCore/inc/welcome.php:379
882
  msgid ""
883
  "You can easily change the number of columns by adding the columns=\"x\" "
884
  "parameter:"
885
  msgstr ""
886
 
887
+ #: ReduxCore/inc/welcome.php:385
888
  msgid "Additional Display Options"
889
  msgstr ""
890
 
891
+ #: ReduxCore/inc/welcome.php:387
892
  msgid ""
893
  "The product grids can be customized in any way you wish and there is <a "
894
  "href=\"%s\">extensive documentation</a> to assist you."
895
  msgstr ""
896
 
897
+ #: ReduxCore/inc/welcome.php:392
898
  msgid "Purchase Buttons Anywhere"
899
  msgstr ""
900
 
901
+ #: ReduxCore/inc/welcome.php:397
902
  msgid "The <em>[purchase_link]</em> Shortcode"
903
  msgstr ""
904
 
905
+ #: ReduxCore/inc/welcome.php:399
906
  msgid ""
907
  "With easily accessible shortcodes to display purchase buttons, you can add "
908
  "a Buy Now or Add to Cart button for any product anywhere on your site in "
909
  "seconds."
910
  msgstr ""
911
 
912
+ #: ReduxCore/inc/welcome.php:401
913
  msgid "Buy Now Buttons"
914
  msgstr ""
915
 
916
+ #: ReduxCore/inc/welcome.php:403
917
  msgid ""
918
  "Purchase buttons can behave as either Add to Cart or Buy Now buttons. With "
919
  "Buy Now buttons customers are taken straight to PayPal, giving them the "
920
  "most frictionless purchasing experience possible."
921
  msgstr ""
922
 
923
+ #: ReduxCore/inc/welcome.php:409
924
  msgid "Need Help?"
925
  msgstr ""
926
 
927
+ #: ReduxCore/inc/welcome.php:413
928
  msgid "Phenomenal Support"
929
  msgstr ""
930
 
931
+ #: ReduxCore/inc/welcome.php:417
 
 
 
 
 
 
 
932
  msgid "Need Even Faster Support?"
933
  msgstr ""
934
 
935
+ #: ReduxCore/inc/welcome.php:425
 
 
 
 
 
 
 
936
  msgid "Stay Up to Date"
937
  msgstr ""
938
 
939
+ #: ReduxCore/inc/welcome.php:429
940
  msgid "Get Notified of Extension Releases"
941
  msgstr ""
942
 
943
+ #: ReduxCore/inc/welcome.php:433
 
 
 
 
 
 
 
 
944
  msgid "Get Alerted About New Tutorials"
945
  msgstr ""
946
 
947
+ #: ReduxCore/inc/welcome.php:441
 
 
 
 
 
 
 
948
  msgid "Extensions for Everything"
949
  msgstr ""
950
 
951
+ #: ReduxCore/inc/welcome.php:445
952
  msgid "Over 250 Extensions"
953
  msgstr ""
954
 
955
+ #: ReduxCore/inc/welcome.php:447
956
  msgid ""
957
  "Add-on plugins are available that greatly extend the default functionality "
958
  "of Easy Digital Downloads. There are extensions for payment processors, "
960
  "many, many more."
961
  msgstr ""
962
 
963
+ #: ReduxCore/inc/welcome.php:449
964
  msgid "Visit the Extension Store"
965
  msgstr ""
966
 
967
+ #: ReduxCore/inc/welcome.php:480
 
 
 
 
 
 
 
 
968
  msgid ""
969
  "Redux Framework is created by a worldwide team of developers who <something "
970
  "witty here>"
971
  msgstr ""
972
 
973
+ #: ReduxCore/inc/welcome.php:500
974
  msgid "No valid changlog was found."
975
  msgstr ""
976
 
977
+ #: ReduxCore/inc/welcome.php:539
978
  msgid "View %s"
979
  msgstr ""
980
 
ReduxCore/languages/ro_RO.mo CHANGED
Binary file
ReduxCore/languages/ru_RU.mo CHANGED
Binary file
ReduxCore/languages/sk_SK.mo CHANGED
Binary file
ReduxCore/languages/sl_SI.mo CHANGED
Binary file
ReduxCore/languages/sv_SE.mo CHANGED
Binary file
ReduxCore/languages/th.mo CHANGED
Binary file
ReduxCore/languages/tr_TR.mo CHANGED
Binary file
ReduxCore/languages/zh_CN.mo CHANGED
Binary file
ReduxCore/languages/zh_CN.po ADDED
@@ -0,0 +1,1060 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2014 Team Redux
2
+ # This file is distributed under the GPL3+.
3
+ # Translators:
4
+ # Wei He <iheywin@163.com>, 2014
5
+ # moyu <mr.moyus@gmail.com>, 2014
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: Redux Framework\n"
9
+ "Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues\n"
10
+ "POT-Creation-Date: 2014-09-23 21:11:43+00:00\n"
11
+ "PO-Revision-Date: 2014-09-24 10:34+0000\n"
12
+ "Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br>\n"
13
+ "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/redux-framework/language/zh_CN/)\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Language: zh_CN\n"
18
+ "Plural-Forms: nplurals=1; plural=0;\n"
19
+ "X-Generator: grunt-wp-i18n 0.4.8\n"
20
+ "X-Poedit-Basepath: ../\n"
21
+ "X-Poedit-Bookmarks: \n"
22
+ "X-Poedit-Country: United States\n"
23
+ "X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
24
+ "X-Poedit-SearchPath-0: .\n"
25
+ "X-Poedit-SourceCharset: UTF-8\n"
26
+ "X-Textdomain-Support: yes\n"
27
+
28
+ #: ReduxCore/extensions/customizer/extension_customizer.php:470
29
+ #: ReduxCore/framework.php:1939
30
+ msgid "You have changes that are not saved. Would you like to save them now?"
31
+ msgstr "你修改了某些设置项. 需要立即保存吗?"
32
+
33
+ #: ReduxCore/extensions/customizer/extension_customizer.php:471
34
+ #: ReduxCore/framework.php:1947
35
+ msgid "Are you sure? Resetting will lose all custom values."
36
+ msgstr "你确定要这样做? 重置将会抹掉当前所有设置数据值."
37
+
38
+ #: ReduxCore/extensions/customizer/extension_customizer.php:472
39
+ #: ReduxCore/framework.php:1963
40
+ msgid ""
41
+ "Your current options will be replaced with the values of this preset. Would "
42
+ "you like to proceed?"
43
+ msgstr "你当前的设置将会被现在的更改所覆盖. 确定继续?"
44
+
45
+ #: ReduxCore/extensions/customizer/extension_customizer.php:505
46
+ msgid "You have changes that are not saved. Would you like to save them now?"
47
+ msgstr "你还未保存更改. 需要立即保存吗?"
48
+
49
+ #: ReduxCore/extensions/customizer/extension_customizer.php:506
50
+ msgid "Are you sure? Resetting will lose all custom values."
51
+ msgstr "你确定要这样做? 重置将会抹掉当前所有设置数据值."
52
+
53
+ #: ReduxCore/extensions/customizer/extension_customizer.php:507
54
+ msgid ""
55
+ "Your current options will be replaced with the values of this preset. Would"
56
+ " you like to proceed?"
57
+ msgstr "你当前的设置将会被现在的更改所覆盖. 确定继续?"
58
+
59
+ #: ReduxCore/framework.php:206
60
+ msgid "Options panel created using %1$s"
61
+ msgstr "设置面板由 %1$s 提供开发"
62
+
63
+ #. Plugin Name of the plugin/theme
64
+ msgid "Redux Framework"
65
+ msgstr "Redux 开发框架"
66
+
67
+ #: ReduxCore/framework.php:210 ReduxCore/framework.php:214
68
+ msgid "Options"
69
+ msgstr "选项"
70
+
71
+ #: ReduxCore/framework.php:1358 ReduxCore/framework.php:1359
72
+ #: ReduxCore/framework.php:3544 ReduxCore/framework.php:3623
73
+ msgid "System Info"
74
+ msgstr "系统信息"
75
+
76
+ #: ReduxCore/framework.php:1955
77
+ msgid "Are you sure? Resetting will lose all custom values in this section."
78
+ msgstr "你确定要这样做? 重置将会抹掉当前选区的所有设置数据值."
79
+
80
+ #: ReduxCore/framework.php:1970
81
+ msgid "Please Wait"
82
+ msgstr "请稍等"
83
+
84
+ #: ReduxCore/framework.php:2095
85
+ msgid "Enable"
86
+ msgstr "启用"
87
+
88
+ #: ReduxCore/framework.php:2100
89
+ msgid "Disable"
90
+ msgstr "停用"
91
+
92
+ #: ReduxCore/framework.php:2106
93
+ msgid "moving the mouse over"
94
+ msgstr ""
95
+
96
+ #: ReduxCore/framework.php:2108
97
+ msgid "clicking"
98
+ msgstr ""
99
+
100
+ #: ReduxCore/framework.php:2112
101
+ msgid ""
102
+ "Hints are tooltips that popup when %d the hint icon, offering addition "
103
+ "information about the field in which they appear. They can be %d d by using"
104
+ " the link below."
105
+ msgstr ""
106
+
107
+ #: ReduxCore/framework.php:2117
108
+ msgid "Hints"
109
+ msgstr "提示"
110
+
111
+ #: ReduxCore/framework.php:2242
112
+ msgid "Default"
113
+ msgstr "默认"
114
+
115
+ #: ReduxCore/framework.php:3295
116
+ msgid "Warning- This options panel will not work properly without javascript!"
117
+ msgstr "警告! 若没有javascript, 这个设置区域将不能正常工作."
118
+
119
+ #: ReduxCore/framework.php:3342
120
+ msgid "Developer Mode Enabled"
121
+ msgstr ""
122
+
123
+ #: ReduxCore/framework.php:3370
124
+ msgid "Expand"
125
+ msgstr "展开"
126
+
127
+ #: ReduxCore/framework.php:3372 ReduxCore/framework.php:3680
128
+ msgid "Save Changes"
129
+ msgstr "保存更改"
130
+
131
+ #: ReduxCore/framework.php:3376 ReduxCore/framework.php:3684
132
+ msgid "Reset Section"
133
+ msgstr "重置选区"
134
+
135
+ #: ReduxCore/framework.php:3378 ReduxCore/framework.php:3686
136
+ msgid "Reset All"
137
+ msgstr "全部重置"
138
+
139
+ #: ReduxCore/framework.php:3383 ReduxCore/framework.php:3691
140
+ msgid "Working..."
141
+ msgstr "处理中..."
142
+
143
+ #: ReduxCore/framework.php:3403
144
+ msgid "Settings Imported!"
145
+ msgstr "设置数据已成功导入!"
146
+
147
+ #: ReduxCore/framework.php:3418
148
+ msgid "All Defaults Restored!"
149
+ msgstr "所有默认设置已恢复!"
150
+
151
+ #: ReduxCore/framework.php:3432
152
+ msgid "Section Defaults Restored!"
153
+ msgstr "选区的默认设置已恢复!"
154
+
155
+ #: ReduxCore/framework.php:3446
156
+ msgid "Settings Saved!"
157
+ msgstr "成功保存设置!"
158
+
159
+ #: ReduxCore/framework.php:3464
160
+ msgid "Settings have changed, you should save them!"
161
+ msgstr "设置项已改变, 你应该立即保存!"
162
+
163
+ #: ReduxCore/framework.php:3472
164
+ msgid "error(s) were found!"
165
+ msgstr "找到错误信息!"
166
+
167
+ #: ReduxCore/framework.php:3480
168
+ msgid "warning(s) were found!"
169
+ msgstr "找到警告信息!"
170
+
171
+ #: ReduxCore/inc/class.redux_filesystem.php:22
172
+ msgid "Unable to create a required directory. Please ensure that"
173
+ msgstr ""
174
+
175
+ #: ReduxCore/inc/class.redux_filesystem.php:24
176
+ msgid ""
177
+ "has the proper read/write permissions or enter your FTP information below."
178
+ msgstr ""
179
+
180
+ #: ReduxCore/inc/class.redux_functions.php:253
181
+ msgid "Dismiss"
182
+ msgstr "不再显示"
183
+
184
+ #: ReduxCore/inc/class.redux_themecheck.php:58
185
+ msgid ""
186
+ "The theme you are testing has %s embedded. We invite you to read the "
187
+ "%sTheme-Check Documentation%s to understand some warnings you will see "
188
+ "because of Redux."
189
+ msgstr ""
190
+
191
+ #: ReduxCore/inc/class.redux_themecheck.php:106
192
+ msgid ""
193
+ "The following directories & files are still located in your "
194
+ "<strong>Redux</strong> directory. They may cause errors in ThemeCheck."
195
+ msgstr ""
196
+
197
+ #: ReduxCore/inc/debug.php:41 ReduxCore/inc/debug.php:69
198
+ #: ReduxCore/inc/debug.php:76 ReduxCore/inc/debug.php:77
199
+ msgid "Options Object"
200
+ msgstr "设置对象"
201
+
202
+ #: ReduxCore/inc/debug.php:54
203
+ msgid "Show Object in Javascript Console Object"
204
+ msgstr "在Javsscript控制台显示对象"
205
+
206
+ #: ReduxCore/inc/fields/background/field_background.php:124
207
+ #: ReduxCore/inc/fields/color/field_color.php:72
208
+ #: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:79
209
+ #: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:91
210
+ #: ReduxCore/inc/fields/color_rgba/field_color_rgba.php:77
211
+ msgid "Transparent"
212
+ msgstr "透明"
213
+
214
+ #: ReduxCore/inc/fields/background/field_background.php:141
215
+ msgid "Background Repeat"
216
+ msgstr "重复背景"
217
+
218
+ #: ReduxCore/inc/fields/background/field_background.php:157
219
+ msgid "Background Clip"
220
+ msgstr "背景片段"
221
+
222
+ #: ReduxCore/inc/fields/background/field_background.php:173
223
+ msgid "Background Origin"
224
+ msgstr "背景定位"
225
+
226
+ #: ReduxCore/inc/fields/background/field_background.php:188
227
+ msgid "Background Size"
228
+ msgstr "背景尺寸"
229
+
230
+ #: ReduxCore/inc/fields/background/field_background.php:203
231
+ msgid "Background Attachment"
232
+ msgstr "背景附着方式"
233
+
234
+ #: ReduxCore/inc/fields/background/field_background.php:223
235
+ msgid "Background Position"
236
+ msgstr "背景位置"
237
+
238
+ #: ReduxCore/inc/fields/background/field_background.php:277
239
+ #: ReduxCore/inc/fields/media/field_media.php:149
240
+ msgid "No media selected"
241
+ msgstr "没有选择媒体"
242
+
243
+ #: ReduxCore/inc/fields/background/field_background.php:314
244
+ #: ReduxCore/inc/fields/media/field_media.php:193
245
+ #: ReduxCore/inc/fields/slides/field_slides.php:126
246
+ #: ReduxCore/inc/fields/slides/field_slides.php:188
247
+ msgid "Upload"
248
+ msgstr "上传"
249
+
250
+ #: ReduxCore/inc/fields/background/field_background.php:321
251
+ #: ReduxCore/inc/fields/media/field_media.php:200
252
+ #: ReduxCore/inc/fields/multi_text/field_multi_text.php:69
253
+ #: ReduxCore/inc/fields/multi_text/field_multi_text.php:73
254
+ #: ReduxCore/inc/fields/multi_text/field_multi_text.php:76
255
+ #: ReduxCore/inc/fields/slides/field_slides.php:133
256
+ #: ReduxCore/inc/fields/slides/field_slides.php:190
257
+ msgid "Remove"
258
+ msgstr "移除"
259
+
260
+ #: ReduxCore/inc/fields/border/field_border.php:114
261
+ #: ReduxCore/inc/fields/spacing/field_spacing.php:191
262
+ msgid "All"
263
+ msgstr "全部"
264
+
265
+ #: ReduxCore/inc/fields/border/field_border.php:127
266
+ #: ReduxCore/inc/fields/spacing/field_spacing.php:215
267
+ msgid "Top"
268
+ msgstr "上"
269
+
270
+ #: ReduxCore/inc/fields/border/field_border.php:134
271
+ #: ReduxCore/inc/fields/spacing/field_spacing.php:222
272
+ msgid "Right"
273
+ msgstr "右"
274
+
275
+ #: ReduxCore/inc/fields/border/field_border.php:141
276
+ #: ReduxCore/inc/fields/spacing/field_spacing.php:229
277
+ msgid "Bottom"
278
+ msgstr "下"
279
+
280
+ #: ReduxCore/inc/fields/border/field_border.php:148
281
+ #: ReduxCore/inc/fields/spacing/field_spacing.php:236
282
+ msgid "Left"
283
+ msgstr "左"
284
+
285
+ #: ReduxCore/inc/fields/border/field_border.php:162
286
+ msgid "Border style"
287
+ msgstr "描边样式"
288
+
289
+ #: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:68
290
+ msgid "From "
291
+ msgstr "从"
292
+
293
+ #: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:82
294
+ msgid "To "
295
+ msgstr "到"
296
+
297
+ #: ReduxCore/inc/fields/dimensions/field_dimensions.php:161
298
+ msgid "Width"
299
+ msgstr "宽度"
300
+
301
+ #: ReduxCore/inc/fields/dimensions/field_dimensions.php:177
302
+ #: ReduxCore/inc/fields/typography/field_typography.php:436
303
+ msgid "Height"
304
+ msgstr "高度"
305
+
306
+ #: ReduxCore/inc/fields/dimensions/field_dimensions.php:188
307
+ #: ReduxCore/inc/fields/dimensions/field_dimensions.php:189
308
+ #: ReduxCore/inc/fields/spacing/field_spacing.php:245
309
+ #: ReduxCore/inc/fields/spacing/field_spacing.php:246
310
+ msgid "Units"
311
+ msgstr "部件"
312
+
313
+ #: ReduxCore/inc/fields/gallery/field_gallery.php:73
314
+ msgid "Add/Edit Gallery"
315
+ msgstr "添加/编辑 相册"
316
+
317
+ #: ReduxCore/inc/fields/gallery/field_gallery.php:74
318
+ msgid "Clear Gallery"
319
+ msgstr "清空相册"
320
+
321
+ #: ReduxCore/inc/fields/link_color/field_link_color.php:87
322
+ msgid "Regular"
323
+ msgstr "一般"
324
+
325
+ #: ReduxCore/inc/fields/link_color/field_link_color.php:91
326
+ msgid "Hover"
327
+ msgstr "悬浮"
328
+
329
+ #: ReduxCore/inc/fields/link_color/field_link_color.php:95
330
+ msgid "Visited"
331
+ msgstr "访问"
332
+
333
+ #: ReduxCore/inc/fields/link_color/field_link_color.php:99
334
+ msgid "Active"
335
+ msgstr "激活"
336
+
337
+ #: ReduxCore/inc/fields/multi_text/field_multi_text.php:61
338
+ msgid "Add More"
339
+ msgstr "添加更多"
340
+
341
+ #: ReduxCore/inc/fields/password/field_password.php:62
342
+ msgid "Password"
343
+ msgstr "密码"
344
+
345
+ #: ReduxCore/inc/fields/password/field_password.php:63
346
+ msgid "Username"
347
+ msgstr "用户名"
348
+
349
+ #: ReduxCore/inc/fields/select/field_select.php:82
350
+ #: ReduxCore/inc/fields/select_image/field_select_image.php:62
351
+ msgid "Select an item"
352
+ msgstr "选择一个项目"
353
+
354
+ #: ReduxCore/inc/fields/select/field_select.php:126
355
+ #: ReduxCore/inc/fields/select_image/field_select_image.php:143
356
+ msgid "No items of this type were found."
357
+ msgstr "没有找到符合条件的此类别项目."
358
+
359
+ #: ReduxCore/inc/fields/slides/field_slides.php:68
360
+ msgid "Slide"
361
+ msgstr ""
362
+
363
+ #: ReduxCore/inc/fields/slides/field_slides.php:73
364
+ msgid "New %s"
365
+ msgstr ""
366
+
367
+ #: ReduxCore/inc/fields/slides/field_slides.php:145
368
+ #: ReduxCore/inc/fields/slides/field_slides.php:200
369
+ msgid "Title"
370
+ msgstr "标题"
371
+
372
+ #: ReduxCore/inc/fields/slides/field_slides.php:149
373
+ #: ReduxCore/inc/fields/slides/field_slides.php:204
374
+ msgid "Description"
375
+ msgstr "描述"
376
+
377
+ #: ReduxCore/inc/fields/slides/field_slides.php:153
378
+ #: ReduxCore/inc/fields/slides/field_slides.php:207
379
+ msgid "URL"
380
+ msgstr "URL"
381
+
382
+ #: ReduxCore/inc/fields/slides/field_slides.php:167
383
+ #: ReduxCore/inc/fields/slides/field_slides.php:220
384
+ msgid "Delete"
385
+ msgstr "删除"
386
+
387
+ #: ReduxCore/inc/fields/slides/field_slides.php:223
388
+ msgid "Add %s"
389
+ msgstr ""
390
+
391
+ #: ReduxCore/inc/fields/switch/field_switch.php:41
392
+ msgid "On"
393
+ msgstr "开启"
394
+
395
+ #: ReduxCore/inc/fields/switch/field_switch.php:44
396
+ msgid "Off"
397
+ msgstr "关闭"
398
+
399
+ #: ReduxCore/inc/fields/typography/field_typography.php:227
400
+ msgid "Font Family"
401
+ msgstr "字体源"
402
+
403
+ #: ReduxCore/inc/fields/typography/field_typography.php:228
404
+ msgid "Font family"
405
+ msgstr "字体"
406
+
407
+ #: ReduxCore/inc/fields/typography/field_typography.php:254
408
+ #: ReduxCore/inc/fields/typography/field_typography.php:255
409
+ msgid "Backup Font Family"
410
+ msgstr "备份字体源"
411
+
412
+ #: ReduxCore/inc/fields/typography/field_typography.php:269
413
+ #: ReduxCore/inc/fields/typography/field_typography.php:276
414
+ msgid "Font style"
415
+ msgstr "字体样式"
416
+
417
+ #: ReduxCore/inc/fields/typography/field_typography.php:270
418
+ msgid "Font Weight &amp; Style"
419
+ msgstr "字体粗细样式"
420
+
421
+ #: ReduxCore/inc/fields/typography/field_typography.php:276
422
+ msgid "Style"
423
+ msgstr "样式"
424
+
425
+ #: ReduxCore/inc/fields/typography/field_typography.php:316
426
+ msgid "Font subsets"
427
+ msgstr "字体子项"
428
+
429
+ #: ReduxCore/inc/fields/typography/field_typography.php:318
430
+ msgid "Font Subsets"
431
+ msgstr "字体子项"
432
+
433
+ #: ReduxCore/inc/fields/typography/field_typography.php:319
434
+ msgid "Subsets"
435
+ msgstr "子项"
436
+
437
+ #: ReduxCore/inc/fields/typography/field_typography.php:319
438
+ msgid "Font script"
439
+ msgstr "字体脚本"
440
+
441
+ #: ReduxCore/inc/fields/typography/field_typography.php:336
442
+ #: ReduxCore/inc/fields/typography/field_typography.php:337
443
+ #: ReduxCore/inc/fields/typography/field_typography.php:338
444
+ msgid "Text Align"
445
+ msgstr "文字对齐方式"
446
+
447
+ #: ReduxCore/inc/fields/typography/field_typography.php:359
448
+ #: ReduxCore/inc/fields/typography/field_typography.php:360
449
+ #: ReduxCore/inc/fields/typography/field_typography.php:361
450
+ msgid "Text Transform"
451
+ msgstr "文字转变"
452
+
453
+ #: ReduxCore/inc/fields/typography/field_typography.php:382
454
+ #: ReduxCore/inc/fields/typography/field_typography.php:383
455
+ #: ReduxCore/inc/fields/typography/field_typography.php:384
456
+ msgid "Font Variant"
457
+ msgstr "字体多样性"
458
+
459
+ #: ReduxCore/inc/fields/typography/field_typography.php:402
460
+ #: ReduxCore/inc/fields/typography/field_typography.php:403
461
+ #: ReduxCore/inc/fields/typography/field_typography.php:404
462
+ msgid "Text Decoration"
463
+ msgstr "字体装饰"
464
+
465
+ #: ReduxCore/inc/fields/typography/field_typography.php:426
466
+ #: ReduxCore/inc/fields/typography/field_typography.php:427
467
+ msgid "Font Size"
468
+ msgstr "字体尺寸"
469
+
470
+ #: ReduxCore/inc/fields/typography/field_typography.php:427
471
+ msgid "Size"
472
+ msgstr "尺寸"
473
+
474
+ #: ReduxCore/inc/fields/typography/field_typography.php:435
475
+ #: ReduxCore/inc/fields/typography/field_typography.php:436
476
+ msgid "Line Height"
477
+ msgstr "行高"
478
+
479
+ #: ReduxCore/inc/fields/typography/field_typography.php:444
480
+ #: ReduxCore/inc/fields/typography/field_typography.php:445
481
+ msgid "Word Spacing"
482
+ msgstr "词组间距"
483
+
484
+ #: ReduxCore/inc/fields/typography/field_typography.php:453
485
+ #: ReduxCore/inc/fields/typography/field_typography.php:454
486
+ msgid "Letter Spacing"
487
+ msgstr "文字间距"
488
+
489
+ #: ReduxCore/inc/fields/typography/field_typography.php:472
490
+ msgid "Font Color"
491
+ msgstr "字体颜色"
492
+
493
+ #: ReduxCore/inc/fields/typography/field_typography.php:474
494
+ msgid "Font color"
495
+ msgstr "字体颜色"
496
+
497
+ #: ReduxCore/inc/fields/typography/field_typography.php:841
498
+ msgid "Standard Fonts"
499
+ msgstr "标准字体"
500
+
501
+ #: ReduxCore/inc/fields/typography/field_typography.php:942
502
+ msgid "Google Webfonts"
503
+ msgstr "Google字体"
504
+
505
+ #: ReduxCore/inc/import_export.php:78
506
+ msgid "Import / Export Options"
507
+ msgstr "导入 / 导出 设置数据"
508
+
509
+ #: ReduxCore/inc/import_export.php:81
510
+ msgid "Import Options"
511
+ msgstr "导入选项"
512
+
513
+ #: ReduxCore/inc/import_export.php:82
514
+ msgid "Import from file"
515
+ msgstr "从文件导入"
516
+
517
+ #: ReduxCore/inc/import_export.php:82
518
+ msgid "Import from URL"
519
+ msgstr "从网址导入"
520
+
521
+ #: ReduxCore/inc/import_export.php:85
522
+ msgid ""
523
+ "Input your backup file below and hit Import to restore your sites options "
524
+ "from a backup."
525
+ msgstr "在下方输入你的备份文件, 然后点击导入来恢复你的备份设置."
526
+
527
+ #: ReduxCore/inc/import_export.php:90
528
+ msgid ""
529
+ "Input the URL to another sites options set and hit Import to load the "
530
+ "options from that site."
531
+ msgstr "输入另外一个站点的设置数据URL, 然后点击导入来远程导入设置."
532
+
533
+ #: ReduxCore/inc/import_export.php:94
534
+ msgid "Import"
535
+ msgstr "导入"
536
+
537
+ #: ReduxCore/inc/import_export.php:94
538
+ msgid ""
539
+ "WARNING! This will overwrite all existing option values, please proceed with"
540
+ " caution!"
541
+ msgstr "警告! 此动作将会复写所有当前设置数据值, 请小心使用!"
542
+
543
+ #: ReduxCore/inc/import_export.php:97
544
+ msgid "Export Options"
545
+ msgstr "导出设置数据"
546
+
547
+ #: ReduxCore/inc/import_export.php:100
548
+ msgid ""
549
+ "Here you can copy/download your current option settings. Keep this safe as "
550
+ "you can use it as a backup should anything go wrong, or you can use it to "
551
+ "restore your settings on this site (or any other site)."
552
+ msgstr "在此页面你可以复制/下载你当前的设置数据. 你可以以此作为备份以免发生任何错误, 或者你可以用来恢复此站点备份设置(或者其他网站设置)."
553
+
554
+ #: ReduxCore/inc/import_export.php:104
555
+ msgid "Copy"
556
+ msgstr "复制"
557
+
558
+ #: ReduxCore/inc/import_export.php:104
559
+ msgid "Download"
560
+ msgstr "下载"
561
+
562
+ #: ReduxCore/inc/import_export.php:104
563
+ msgid "Copy Link"
564
+ msgstr "复制链接"
565
+
566
+ #: ReduxCore/inc/import_export.php:140 ReduxCore/inc/import_export.php:149
567
+ #: ReduxCore/inc/import_export.php:150
568
+ msgid "Import / Export"
569
+ msgstr "导入 / 导出"
570
+
571
+ #: ReduxCore/inc/tracking.php:129
572
+ msgid "Help improve Our Panel"
573
+ msgstr "帮助改善我们的面板"
574
+
575
+ #: ReduxCore/inc/tracking.php:130
576
+ msgid ""
577
+ "Please helps us improve our panel by allowing us to gather anonymous usage "
578
+ "stats so we know which configurations, plugins and themes to test to ensure "
579
+ "compatibility."
580
+ msgstr ""
581
+
582
+ #: ReduxCore/inc/tracking.php:135
583
+ msgid "Allow tracking"
584
+ msgstr "允许追踪"
585
+
586
+ #: ReduxCore/inc/tracking.php:140
587
+ msgid "Do not allow tracking"
588
+ msgstr "不允许追踪"
589
+
590
+ #: ReduxCore/inc/tracking.php:151
591
+ msgid "Welcome to the Redux Demo Panel"
592
+ msgstr "欢迎来到Redux演示数据面板"
593
+
594
+ #: ReduxCore/inc/tracking.php:152 ReduxCore/inc/welcome.php:139
595
+ msgid "Getting Started"
596
+ msgstr "开始"
597
+
598
+ #: ReduxCore/inc/tracking.php:152
599
+ msgid ""
600
+ "This panel demonstrates the many features of Redux. Before digging in, we "
601
+ "suggest you get up to speed by reviewing %1$s."
602
+ msgstr "此演示数据面板包含了许多Redux的特性. 在深入了解前, 我们建议你先浏览 %1$s 来帮助你提高开发速度."
603
+
604
+ #: ReduxCore/inc/tracking.php:152
605
+ msgid "our documentation"
606
+ msgstr "说明文档"
607
+
608
+ #: ReduxCore/inc/tracking.php:153
609
+ msgid "Redux Generator"
610
+ msgstr "Redux生成器"
611
+
612
+ #: ReduxCore/inc/tracking.php:153
613
+ msgid ""
614
+ "Want to get a head start? Use the %1$s. It will create a customized "
615
+ "boilerplate theme or a standalone admin folder complete with all things "
616
+ "Redux (with the help of Underscores and TGM). Save yourself a headache and "
617
+ "try it today."
618
+ msgstr "想立即开始? 使用 %1$s. 它将会创建一个自定义的主题或者一个标准的管理员文件夹(由Undersocres与TGM提供). 节省你大量时间, 立即尝试下吧."
619
+
620
+ #: ReduxCore/inc/tracking.php:154
621
+ msgid "Redux Extensions"
622
+ msgstr "Redux插件"
623
+
624
+ #: ReduxCore/inc/tracking.php:154
625
+ msgid ""
626
+ "Did you know we have extensions, which greatly enhance the features of "
627
+ "Redux? Visit our %1$s to learn more!"
628
+ msgstr "你知道我们还有拓展插件吗? 这些插件将会极大拓展Redux设置面板的功能. 浏览我们的 %1$s 来了解更多!"
629
+
630
+ #: ReduxCore/inc/tracking.php:154
631
+ msgid "extensions directory"
632
+ msgstr "插件列表"
633
+
634
+ #: ReduxCore/inc/tracking.php:155
635
+ msgid "Like Redux?"
636
+ msgstr "喜欢Redux?"
637
+
638
+ #: ReduxCore/inc/tracking.php:155
639
+ msgid ""
640
+ "If so, please %1$s and consider making a %2$s to keep development of Redux "
641
+ "moving forward."
642
+ msgstr "如果如此, 请 %1$s 与考虑 %2$s 来支持我们的开发."
643
+
644
+ #: ReduxCore/inc/tracking.php:155
645
+ msgid "leave us a favorable review on WordPress.org"
646
+ msgstr "在WordPress.org给我们点赞吧"
647
+
648
+ #: ReduxCore/inc/tracking.php:155
649
+ msgid "donation"
650
+ msgstr "捐赠"
651
+
652
+ #: ReduxCore/inc/tracking.php:156
653
+ msgid "Newsletter"
654
+ msgstr "订阅"
655
+
656
+ #: ReduxCore/inc/tracking.php:156
657
+ msgid ""
658
+ "If you'd like to keep up to with all things Redux, please subscribe to our "
659
+ "newsletter"
660
+ msgstr "如果你想了解关于Redux的最新消息, 请订阅我们的内容吧."
661
+
662
+ #: ReduxCore/inc/tracking.php:157
663
+ msgid "Email address"
664
+ msgstr "Email地址"
665
+
666
+ #: ReduxCore/inc/tracking.php:157
667
+ msgid "Subscribe"
668
+ msgstr "d你个月"
669
+
670
+ #: ReduxCore/inc/tracking.php:166
671
+ msgid "Close"
672
+ msgstr "关闭"
673
+
674
+ #: ReduxCore/inc/validation/color/validation_color.php:15
675
+ #: ReduxCore/inc/validation/color_rgba/validation_color_rgba.php:14
676
+ #: ReduxCore/inc/validation/colorrgba/validation_colorrgba.php:16
677
+ msgid "This field must be a valid color value."
678
+ msgstr "此项必须填写一个有效的颜色值."
679
+
680
+ #: ReduxCore/inc/validation/comma_numeric/validation_comma_numeric.php:16
681
+ msgid ""
682
+ "You must provide a comma separated list of numerical values for this option."
683
+ msgstr "你必须填写一列由英文逗号分隔的数字串."
684
+
685
+ #: ReduxCore/inc/validation/date/validation_date.php:16
686
+ msgid "This field must be a valid date."
687
+ msgstr "此项必须填写一个有效的日期."
688
+
689
+ #: ReduxCore/inc/validation/email/validation_email.php:16
690
+ #: ReduxCore/inc/validation/email_not_empty/validation_email_not_empty.php:16
691
+ msgid "You must provide a valid email for this option."
692
+ msgstr "你必须填写一个有效的电子邮件地址."
693
+
694
+ #: ReduxCore/inc/validation/no_html/validation_no_html.php:15
695
+ msgid ""
696
+ "You must not enter any HTML in this field, all HTML tags have been removed."
697
+ msgstr "你不能在此填写任何HTML代码, 所有HTML代码将会被移除."
698
+
699
+ #: ReduxCore/inc/validation/no_special_chars/validation_no_special_chars.php:16
700
+ msgid ""
701
+ "You must not enter any special characters in this field, all special "
702
+ "characters have been removed."
703
+ msgstr "你不能在此填写任何特殊文字符号, 所有特殊文字符号将会被移除."
704
+
705
+ #: ReduxCore/inc/validation/not_empty/validation_not_empty.php:16
706
+ msgid "This field cannot be empty. Please provide a value."
707
+ msgstr "此项不能为空. 请提供一个有效的值."
708
+
709
+ #: ReduxCore/inc/validation/numeric/validation_numeric.php:16
710
+ #: ReduxCore/inc/validation/numeric_not_empty/validation_numeric_not_empty.php:16
711
+ msgid "You must provide a numerical value for this option."
712
+ msgstr "你必须填写一个有效的数字值."
713
+
714
+ #: ReduxCore/inc/validation/url/validation_url.php:16
715
+ msgid "You must provide a valid URL for this option."
716
+ msgstr "你必须填写一个有效的URL地址."
717
+
718
+ #: ReduxCore/inc/welcome.php:40
719
+ msgid "Welcome to Redux Framework"
720
+ msgstr ""
721
+
722
+ #: ReduxCore/inc/welcome.php:48 ReduxCore/inc/welcome.php:295
723
+ msgid "Redux Framework Changelog"
724
+ msgstr ""
725
+
726
+ #: ReduxCore/inc/welcome.php:56
727
+ msgid "Getting started with Redux Framework"
728
+ msgstr ""
729
+
730
+ #: ReduxCore/inc/welcome.php:64
731
+ msgid "The people that develop Redux Framework"
732
+ msgstr ""
733
+
734
+ #: ReduxCore/inc/welcome.php:135
735
+ msgid "What's New"
736
+ msgstr ""
737
+
738
+ #: ReduxCore/inc/welcome.php:143
739
+ msgid "Changelog"
740
+ msgstr "修订历史"
741
+
742
+ #: ReduxCore/inc/welcome.php:147
743
+ msgid "Credits"
744
+ msgstr "鸣谢"
745
+
746
+ #: ReduxCore/inc/welcome.php:164 ReduxCore/inc/welcome.php:333
747
+ #: ReduxCore/inc/welcome.php:471
748
+ msgid "Welcome to Redux Framework %s"
749
+ msgstr ""
750
+
751
+ #: ReduxCore/inc/welcome.php:167
752
+ msgid ""
753
+ "Thank you for updating to the latest version! Redux Framework %s is ready to"
754
+ " <add description>"
755
+ msgstr ""
756
+
757
+ #: ReduxCore/inc/welcome.php:169 ReduxCore/inc/welcome.php:300
758
+ #: ReduxCore/inc/welcome.php:338 ReduxCore/inc/welcome.php:476
759
+ msgid "Version %s"
760
+ msgstr "%s版本"
761
+
762
+ #: ReduxCore/inc/welcome.php:174
763
+ msgid "Some Feature"
764
+ msgstr ""
765
+
766
+ #: ReduxCore/inc/welcome.php:178 ReduxCore/inc/welcome.php:182
767
+ #: ReduxCore/inc/welcome.php:195 ReduxCore/inc/welcome.php:199
768
+ #: ReduxCore/inc/welcome.php:203 ReduxCore/inc/welcome.php:208
769
+ #: ReduxCore/inc/welcome.php:221 ReduxCore/inc/welcome.php:225
770
+ #: ReduxCore/inc/welcome.php:230
771
+ msgid "Feature"
772
+ msgstr ""
773
+
774
+ #: ReduxCore/inc/welcome.php:190
775
+ msgid "Some feature"
776
+ msgstr ""
777
+
778
+ #: ReduxCore/inc/welcome.php:217
779
+ msgid "More Features"
780
+ msgstr ""
781
+
782
+ #: ReduxCore/inc/welcome.php:223 ReduxCore/inc/welcome.php:227
783
+ #: ReduxCore/inc/welcome.php:232
784
+ msgid "description"
785
+ msgstr ""
786
+
787
+ #: ReduxCore/inc/welcome.php:238
788
+ msgid "Additional Updates"
789
+ msgstr ""
790
+
791
+ #: ReduxCore/inc/welcome.php:242 ReduxCore/inc/welcome.php:246
792
+ #: ReduxCore/inc/welcome.php:252 ReduxCore/inc/welcome.php:256
793
+ #: ReduxCore/inc/welcome.php:262 ReduxCore/inc/welcome.php:266
794
+ msgid "Cool thing"
795
+ msgstr ""
796
+
797
+ #: ReduxCore/inc/welcome.php:244 ReduxCore/inc/welcome.php:248
798
+ #: ReduxCore/inc/welcome.php:254 ReduxCore/inc/welcome.php:258
799
+ #: ReduxCore/inc/welcome.php:264 ReduxCore/inc/welcome.php:268
800
+ msgid "cool thing description."
801
+ msgstr ""
802
+
803
+ #: ReduxCore/inc/welcome.php:277 ReduxCore/inc/welcome.php:316
804
+ msgid "Go to Redux Framework"
805
+ msgstr ""
806
+
807
+ #: ReduxCore/inc/welcome.php:278
808
+ msgid "View the Full Changelog"
809
+ msgstr ""
810
+
811
+ #: ReduxCore/inc/welcome.php:298 ReduxCore/inc/welcome.php:336
812
+ #: ReduxCore/inc/welcome.php:474
813
+ msgid ""
814
+ "Thank you for updating to the latest version! Redux Framework %s is ready to"
815
+ " make your <description>"
816
+ msgstr ""
817
+
818
+ #: ReduxCore/inc/welcome.php:305
819
+ msgid "Full Changelog"
820
+ msgstr ""
821
+
822
+ #: ReduxCore/inc/welcome.php:342
823
+ msgid ""
824
+ "Use the tips below to get started using Redux Framework. You'll be up and "
825
+ "running in no time!"
826
+ msgstr ""
827
+
828
+ #: ReduxCore/inc/welcome.php:345
829
+ msgid "Creating Your First Panel"
830
+ msgstr ""
831
+
832
+ #: ReduxCore/inc/welcome.php:350
833
+ msgid "<a href=\"%s\">%s &rarr; Add New</a>"
834
+ msgstr ""
835
+
836
+ #: ReduxCore/inc/welcome.php:352
837
+ msgid ""
838
+ "The %s menu is your access point for all aspects of your Easy Digital "
839
+ "Downloads product creation and setup. To create your first product, simply "
840
+ "click Add New and then fill out the product details."
841
+ msgstr ""
842
+
843
+ #: ReduxCore/inc/welcome.php:354
844
+ msgid "Product Price"
845
+ msgstr ""
846
+
847
+ #: ReduxCore/inc/welcome.php:356
848
+ msgid ""
849
+ "Products can have simple prices or variable prices if you wish to have more "
850
+ "than one price point for a product. For a single price, simply enter the "
851
+ "price. For multiple price points, click <em>Enable variable pricing</em> and"
852
+ " enter the options."
853
+ msgstr ""
854
+
855
+ #: ReduxCore/inc/welcome.php:358
856
+ msgid "Download Files"
857
+ msgstr ""
858
+
859
+ #: ReduxCore/inc/welcome.php:360
860
+ msgid ""
861
+ "Uploading the downloadable files is simple. Click <em>Upload File</em> in "
862
+ "the Download Files section and choose your download file. To add more than "
863
+ "one file, simply click the <em>Add New</em> button."
864
+ msgstr ""
865
+
866
+ #: ReduxCore/inc/welcome.php:366
867
+ msgid "Display a Product Grid"
868
+ msgstr ""
869
+
870
+ #: ReduxCore/inc/welcome.php:373
871
+ msgid "Flexible Product Grids"
872
+ msgstr ""
873
+
874
+ #: ReduxCore/inc/welcome.php:375
875
+ msgid ""
876
+ "The [downloads] shortcode will display a product grid that works with any "
877
+ "theme, no matter the size. It is even responsive!"
878
+ msgstr ""
879
+
880
+ #: ReduxCore/inc/welcome.php:377
881
+ msgid "Change the Number of Columns"
882
+ msgstr ""
883
+
884
+ #: ReduxCore/inc/welcome.php:379
885
+ msgid ""
886
+ "You can easily change the number of columns by adding the columns=\"x\" "
887
+ "parameter:"
888
+ msgstr ""
889
+
890
+ #: ReduxCore/inc/welcome.php:385
891
+ msgid "Additional Display Options"
892
+ msgstr ""
893
+
894
+ #: ReduxCore/inc/welcome.php:387
895
+ msgid ""
896
+ "The product grids can be customized in any way you wish and there is <a "
897
+ "href=\"%s\">extensive documentation</a> to assist you."
898
+ msgstr ""
899
+
900
+ #: ReduxCore/inc/welcome.php:392
901
+ msgid "Purchase Buttons Anywhere"
902
+ msgstr ""
903
+
904
+ #: ReduxCore/inc/welcome.php:397
905
+ msgid "The <em>[purchase_link]</em> Shortcode"
906
+ msgstr ""
907
+
908
+ #: ReduxCore/inc/welcome.php:399
909
+ msgid ""
910
+ "With easily accessible shortcodes to display purchase buttons, you can add a"
911
+ " Buy Now or Add to Cart button for any product anywhere on your site in "
912
+ "seconds."
913
+ msgstr ""
914
+
915
+ #: ReduxCore/inc/welcome.php:401
916
+ msgid "Buy Now Buttons"
917
+ msgstr ""
918
+
919
+ #: ReduxCore/inc/welcome.php:403
920
+ msgid ""
921
+ "Purchase buttons can behave as either Add to Cart or Buy Now buttons. With "
922
+ "Buy Now buttons customers are taken straight to PayPal, giving them the most"
923
+ " frictionless purchasing experience possible."
924
+ msgstr ""
925
+
926
+ #: ReduxCore/inc/welcome.php:409
927
+ msgid "Need Help?"
928
+ msgstr ""
929
+
930
+ #: ReduxCore/inc/welcome.php:413
931
+ msgid "Phenomenal Support"
932
+ msgstr ""
933
+
934
+ #: ReduxCore/inc/welcome.php:417
935
+ msgid "Need Even Faster Support?"
936
+ msgstr ""
937
+
938
+ #: ReduxCore/inc/welcome.php:425
939
+ msgid "Stay Up to Date"
940
+ msgstr ""
941
+
942
+ #: ReduxCore/inc/welcome.php:429
943
+ msgid "Get Notified of Extension Releases"
944
+ msgstr ""
945
+
946
+ #: ReduxCore/inc/welcome.php:433
947
+ msgid "Get Alerted About New Tutorials"
948
+ msgstr ""
949
+
950
+ #: ReduxCore/inc/welcome.php:441
951
+ msgid "Extensions for Everything"
952
+ msgstr ""
953
+
954
+ #: ReduxCore/inc/welcome.php:445
955
+ msgid "Over 250 Extensions"
956
+ msgstr "多达250个扩展插件"
957
+
958
+ #: ReduxCore/inc/welcome.php:447
959
+ msgid ""
960
+ "Add-on plugins are available that greatly extend the default functionality "
961
+ "of Easy Digital Downloads. There are extensions for payment processors, such"
962
+ " as Stripe and PayPal, extensions for newsletter integrations, and many, "
963
+ "many more."
964
+ msgstr ""
965
+
966
+ #: ReduxCore/inc/welcome.php:449
967
+ msgid "Visit the Extension Store"
968
+ msgstr ""
969
+
970
+ #: ReduxCore/inc/welcome.php:480
971
+ msgid ""
972
+ "Redux Framework is created by a worldwide team of developers who <something "
973
+ "witty here>"
974
+ msgstr ""
975
+
976
+ #: ReduxCore/inc/welcome.php:500
977
+ msgid "No valid changlog was found."
978
+ msgstr ""
979
+
980
+ #: ReduxCore/inc/welcome.php:539
981
+ msgid "View %s"
982
+ msgstr ""
983
+
984
+ #: class.redux-plugin.php:306
985
+ msgid "Redux Framework has an embedded demo."
986
+ msgstr "Redux 开发框架有一个视频演示."
987
+
988
+ #: class.redux-plugin.php:306
989
+ msgid "Click here to activate the sample config file."
990
+ msgstr "点击此处启用演示配置文件."
991
+
992
+ #: class.redux-plugin.php:407
993
+ msgid "Repo"
994
+ msgstr "协议"
995
+
996
+ #: class.redux-plugin.php:408
997
+ msgid "Generator"
998
+ msgstr "生成器"
999
+
1000
+ #: class.redux-plugin.php:409
1001
+ msgid "Issues"
1002
+ msgstr "问题"
1003
+
1004
+ #: class.redux-plugin.php:410
1005
+ msgid "Documentation"
1006
+ msgstr "文档"
1007
+
1008
+ #: class.redux-plugin.php:415
1009
+ msgid "Deactivate Demo Mode"
1010
+ msgstr "停用演示模式"
1011
+
1012
+ #: class.redux-plugin.php:417
1013
+ msgid "Activate Demo Mode"
1014
+ msgstr "启用演示模式"
1015
+
1016
+ #: tests/includes/class-tivwp-dm-controller.php:28
1017
+ msgid "Must call in of after the \"plugins_loaded\" action."
1018
+ msgstr "必须在\"plugins_loaded\"动作后执行."
1019
+
1020
+ #: tests/includes/class-tivwp-dm-controller.php:138
1021
+ msgid "Unknown action \"%1$s\" specified for %2$s"
1022
+ msgstr "%2$s 挂载的未知动作 \"%1$s\" "
1023
+
1024
+ #: tests/includes/class-tivwp-dm-controller.php:143
1025
+ msgid "The unknown action has been replaced with \"%s\""
1026
+ msgstr "此位置的动作将会被 \"%s\" 代替"
1027
+
1028
+ #: tests/includes/class-tivwp-dm-controller.php:158
1029
+ msgid "Automatic action performed: \"%s\""
1030
+ msgstr "自动动作: \"%s\""
1031
+
1032
+ #: tests/includes/class-tivwp-dm.php:112
1033
+ msgid "Activate Development Plugins"
1034
+ msgstr "启用开发插件"
1035
+
1036
+ #: tests/includes/class-tivwp-dm.php:119
1037
+ msgid "Deactivate Development Plugins"
1038
+ msgstr "停用开发插件"
1039
+
1040
+ #: tests/includes/class-tivwp-dm.php:131
1041
+ msgid "You do not have sufficient permissions to access this page."
1042
+ msgstr "您没有足够的权限访问该页面。"
1043
+
1044
+ #. Plugin URI of the plugin/theme
1045
+ msgid "http://wordpress.org/plugins/redux-framework"
1046
+ msgstr ""
1047
+
1048
+ #. Description of the plugin/theme
1049
+ msgid ""
1050
+ "Redux is a simple, truly extensible options framework for WordPress themes "
1051
+ "and plugins."
1052
+ msgstr ""
1053
+
1054
+ #. Author of the plugin/theme
1055
+ msgid "Team Redux"
1056
+ msgstr ""
1057
+
1058
+ #. Author URI of the plugin/theme
1059
+ msgid "http://reduxframework.com"
1060
+ msgstr ""
redux-framework.php CHANGED
@@ -12,7 +12,7 @@
12
  * Description: Redux is a simple, truly extensible options framework for WordPress themes and plugins.
13
  * Author: Team Redux
14
  * Author URI: http://reduxframework.com
15
- * Version: 3.3.8
16
  * Text Domain: redux-framework
17
  * License: GPL3+
18
  * License URI: http://www.gnu.org/licenses/gpl-3.0.txt
@@ -46,4 +46,4 @@ register_deactivation_hook( __FILE__, array( 'ReduxFrameworkPlugin', 'deactivate
46
  // Waiting until all plugins have been loaded prevents the ReduxFramework class from
47
  // being created, and fails the !class_exists('ReduxFramework') check in the sample_config.php,
48
  // and thus prevents any plugin using Redux from loading their config file.
49
- ReduxFrameworkPlugin::instance();
12
  * Description: Redux is a simple, truly extensible options framework for WordPress themes and plugins.
13
  * Author: Team Redux
14
  * Author URI: http://reduxframework.com
15
+ * Version: 3.3.9
16
  * Text Domain: redux-framework
17
  * License: GPL3+
18
  * License URI: http://www.gnu.org/licenses/gpl-3.0.txt
46
  // Waiting until all plugins have been loaded prevents the ReduxFramework class from
47
  // being created, and fails the !class_exists('ReduxFramework') check in the sample_config.php,
48
  // and thus prevents any plugin using Redux from loading their config file.
49
+ ReduxFrameworkPlugin::instance();
sample/barebones-config.php CHANGED
@@ -1,224 +1,249 @@
1
  <?php
2
 
3
- /**
4
- ReduxFramework Sample Config File
5
- For full documentation, please visit: https://docs.reduxframework.com
6
- * */
7
 
8
- if (!class_exists('Redux_Framework_sample_config')) {
9
 
10
- class Redux_Framework_sample_config {
11
 
12
- public $args = array();
13
- public $sections = array();
14
- public $theme;
15
- public $ReduxFramework;
16
 
17
- public function __construct() {
18
 
19
- if (!class_exists('ReduxFramework')) {
20
- return;
21
- }
 
 
 
 
 
 
 
22
 
23
- // This is needed. Bah WordPress bugs. ;)
24
- if ( true == Redux_Helpers::isTheme(__FILE__) ) {
25
- $this->initSettings();
26
- } else {
27
- add_action('plugins_loaded', array($this, 'initSettings'), 10);
28
  }
29
 
30
- }
31
 
32
- public function initSettings() {
 
33
 
34
- // Set the default arguments
35
- $this->setArguments();
36
 
37
- // Set a few help tabs so you can see how it's done
38
- $this->setHelpTabs();
39
 
40
- // Create the sections and fields
41
- $this->setSections();
 
42
 
43
- if (!isset($this->args['opt_name'])) { // No errors please
44
- return;
45
  }
46
 
47
- $this->ReduxFramework = new ReduxFramework($this->sections, $this->args);
48
- }
49
-
50
- public function setSections() {
51
-
52
- // ACTUAL DECLARATION OF SECTIONS
53
- $this->sections[] = array(
54
- 'title' => __('Home Settings', 'redux-framework-demo'),
55
- 'desc' => __('Redux Framework was created with the developer in mind. It allows for any theme developer to have an advanced theme panel with most of the features a developer would need. For more information check out the Github repo at: <a href="https://github.com/ReduxFramework/Redux-Framework">https://github.com/ReduxFramework/Redux-Framework</a>', 'redux-framework-demo'),
56
- 'icon' => 'el-icon-home',
57
- // 'submenu' => false, // Setting submenu to false on a given section will hide it from the WordPress sidebar menu!
58
- 'fields' => array(
59
-
60
- array(
61
- 'id' => 'opt-web-fonts',
62
- 'type' => 'media',
63
- 'title' => __('Web Fonts', 'redux-framework-demo'),
64
- 'compiler' => 'true',
65
- 'mode' => false, // Can be set to false to allow any media type, or can also be set to any mime type.
66
- 'desc' => __('Basic media uploader with disabled URL input field.', 'redux-framework-demo'),
67
- 'subtitle' => __('Upload any media using the WordPress native uploader', 'redux-framework-demo'),
68
- 'hint' => array(
69
- //'title' => '',
70
- 'content' => 'This is a <b>hint</b> tool-tip for the webFonts field.<br/><br/>Add any HTML based text you like here.',
71
- )
72
- ),
73
- )
74
- );
75
- }
76
 
77
- public function setHelpTabs() {
78
 
79
- // Custom page help tabs, displayed using the help API. Tabs are shown in order of definition.
80
- $this->args['help_tabs'][] = array(
81
- 'id' => 'redux-help-tab-1',
82
- 'title' => __('Theme Information 1', 'redux-framework-demo'),
83
- 'content' => __('<p>This is the tab content, HTML is allowed.</p>', 'redux-framework-demo')
84
- );
85
 
86
- $this->args['help_tabs'][] = array(
87
- 'id' => 'redux-help-tab-2',
88
- 'title' => __('Theme Information 2', 'redux-framework-demo'),
89
- 'content' => __('<p>This is the tab content, HTML is allowed.</p>', 'redux-framework-demo')
90
- );
91
 
92
- // Set the help sidebar
93
- $this->args['help_sidebar'] = __('<p>This is the sidebar content, HTML is allowed.</p>', 'redux-framework-demo');
94
- }
95
 
96
- /**
97
-
98
- All the possible arguments for Redux.
99
- For full documentation on arguments, please refer to: https://github.com/ReduxFramework/ReduxFramework/wiki/Arguments
100
-
101
- * */
102
- public function setArguments() {
103
-
104
- $theme = wp_get_theme(); // For use with some settings. Not necessary.
105
-
106
- $this->args = array(
107
- // TYPICAL -> Change these values as you need/desire
108
- 'opt_name' => 'redux_demo', // This is where your data is stored in the database and also becomes your global variable name.
109
- 'display_name' => $theme->get('Name'), // Name that appears at the top of your panel
110
- 'display_version' => $theme->get('Version'), // Version that appears at the top of your panel
111
- 'menu_type' => 'menu', //Specify if the admin menu should appear or not. Options: menu or submenu (Under appearance only)
112
- 'allow_sub_menu' => true, // Show the sections below the admin menu item or not
113
- 'menu_title' => __('Sample Options', 'redux-framework-demo'),
114
- 'page_title' => __('Sample Options', 'redux-framework-demo'),
115
-
116
- // You will need to generate a Google API key to use this feature.
117
- // Please visit: https://developers.google.com/fonts/docs/developer_api#Auth
118
- 'google_api_key' => '', // Must be defined to add google fonts to the typography module
119
-
120
- 'async_typography' => false, // Use a asynchronous font on the front end or font string
121
- 'admin_bar' => true, // Show the panel pages on the admin bar
122
- 'global_variable' => '', // Set a different name for your global variable other than the opt_name
123
- 'dev_mode' => true, // Show the time the page took to load, etc
124
- 'customizer' => true, // Enable basic customizer support
125
-
126
- // OPTIONAL -> Give you extra features
127
- 'page_priority' => null, // Order where the menu appears in the admin area. If there is any conflict, something will not show. Warning.
128
- 'page_parent' => 'themes.php', // For a full list of options, visit: http://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters
129
- 'page_permissions' => 'manage_options', // Permissions needed to access the options panel.
130
- 'menu_icon' => '', // Specify a custom URL to an icon
131
- 'last_tab' => '', // Force your panel to always open to a specific tab (by id)
132
- 'page_icon' => 'icon-themes', // Icon displayed in the admin panel next to your menu_title
133
- 'page_slug' => '_options', // Page slug used to denote the panel
134
- 'save_defaults' => true, // On load save the defaults to DB before user clicks save or not
135
- 'default_show' => false, // If true, shows the default value next to each field that is not the default value.
136
- 'default_mark' => '', // What to print by the field's title if the value shown is default. Suggested: *
137
- 'show_import_export' => true, // Shows the Import/Export panel when not used as a field.
138
-
139
- // CAREFUL -> These options are for advanced use only
140
- 'transient_time' => 60 * MINUTE_IN_SECONDS,
141
- 'output' => true, // Global shut-off for dynamic CSS output by the framework. Will also disable google fonts output
142
- 'output_tag' => true, // Allows dynamic CSS to be generated for customizer and google fonts, but stops the dynamic CSS from going to the head
143
- // 'footer_credit' => '', // Disable the footer credit of Redux. Please leave if you can help it.
144
-
145
- // FUTURE -> Not in use yet, but reserved or partially implemented. Use at your own risk.
146
- 'database' => '', // possible: options, theme_mods, theme_mods_expanded, transient. Not fully functional, warning!
147
- 'system_info' => false, // REMOVE
148
-
149
- // HINTS
150
- 'hints' => array(
151
- 'icon' => 'icon-question-sign',
152
- 'icon_position' => 'right',
153
- 'icon_color' => 'lightgray',
154
- 'icon_size' => 'normal',
155
- 'tip_style' => array(
156
- 'color' => 'light',
157
- 'shadow' => true,
158
- 'rounded' => false,
159
- 'style' => '',
160
- ),
161
- 'tip_position' => array(
162
- 'my' => 'top left',
163
- 'at' => 'bottom right',
164
- ),
165
- 'tip_effect' => array(
166
- 'show' => array(
167
- 'effect' => 'slide',
168
- 'duration' => '500',
169
- 'event' => 'mouseover',
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  ),
171
- 'hide' => array(
172
- 'effect' => 'slide',
173
- 'duration' => '500',
174
- 'event' => 'click mouseleave',
175
  ),
176
- ),
177
- )
178
- );
179
-
180
-
181
- // SOCIAL ICONS -> Setup custom links in the footer for quick links in your panel footer icons.
182
- $this->args['share_icons'][] = array(
183
- 'url' => 'https://github.com/ReduxFramework/ReduxFramework',
184
- 'title' => 'Visit us on GitHub',
185
- 'icon' => 'el-icon-github'
186
- //'img' => '', // You can use icon OR img. IMG needs to be a full URL.
187
- );
188
- $this->args['share_icons'][] = array(
189
- 'url' => 'https://www.facebook.com/pages/Redux-Framework/243141545850368',
190
- 'title' => 'Like us on Facebook',
191
- 'icon' => 'el-icon-facebook'
192
- );
193
- $this->args['share_icons'][] = array(
194
- 'url' => 'http://twitter.com/reduxframework',
195
- 'title' => 'Follow us on Twitter',
196
- 'icon' => 'el-icon-twitter'
197
- );
198
- $this->args['share_icons'][] = array(
199
- 'url' => 'http://www.linkedin.com/company/redux-framework',
200
- 'title' => 'Find us on LinkedIn',
201
- 'icon' => 'el-icon-linkedin'
202
- );
203
-
204
- // Panel Intro text -> before the form
205
- if (!isset($this->args['global_variable']) || $this->args['global_variable'] !== false) {
206
- if (!empty($this->args['global_variable'])) {
207
- $v = $this->args['global_variable'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  } else {
209
- $v = str_replace('-', '_', $this->args['opt_name']);
210
  }
211
- $this->args['intro_text'] = sprintf(__('<p>Did you know that Redux sets a global variable for you? To access any of your saved options from within your code you can use your global variable: <strong>$%1$s</strong></p>', 'redux-framework-demo'), $v);
212
- } else {
213
- $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');
214
  }
215
 
216
- // Add content after the form.
217
- $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');
218
  }
219
 
 
 
220
  }
221
-
222
- global $reduxConfig;
223
- $reduxConfig = new Redux_Framework_sample_config();
224
- }
1
  <?php
2
 
3
+ /**
4
+ * ReduxFramework Sample Config File
5
+ * For full documentation, please visit: http://docs.reduxframework.com/
6
+ */
7
 
8
+ if ( ! class_exists( 'Redux_Framework_sample_config' ) ) {
9
 
10
+ class Redux_Framework_sample_config {
11
 
12
+ public $args = array();
13
+ public $sections = array();
14
+ public $theme;
15
+ public $ReduxFramework;
16
 
17
+ public function __construct() {
18
 
19
+ if ( ! class_exists( 'ReduxFramework' ) ) {
20
+ return;
21
+ }
22
+
23
+ // This is needed. Bah WordPress bugs. ;)
24
+ if ( true == Redux_Helpers::isTheme( __FILE__ ) ) {
25
+ $this->initSettings();
26
+ } else {
27
+ add_action( 'plugins_loaded', array( $this, 'initSettings' ), 10 );
28
+ }
29
 
 
 
 
 
 
30
  }
31
 
32
+ public function initSettings() {
33
 
34
+ // Set the default arguments
35
+ $this->setArguments();
36
 
37
+ // Set a few help tabs so you can see how it's done
38
+ $this->setHelpTabs();
39
 
40
+ // Create the sections and fields
41
+ $this->setSections();
42
 
43
+ if ( ! isset( $this->args['opt_name'] ) ) { // No errors please
44
+ return;
45
+ }
46
 
47
+ $this->ReduxFramework = new ReduxFramework( $this->sections, $this->args );
 
48
  }
49
 
50
+ public function setSections() {
51
+
52
+
53
+ // ACTUAL DECLARATION OF SECTIONS
54
+ $this->sections[] = array(
55
+ 'title' => __( 'Home Settings', 'redux-framework-demo' ),
56
+ 'desc' => sprintf( __( 'Redux Framework was created with the developer in mind. It allows for any theme developer to have an advanced theme panel with most of the features a developer would need. For more information check out the Github repo at: %d', 'redux-framework-demo' ), '<a href="' . 'https://' . 'github.com/ReduxFramework/Redux-Framework">' . 'https://' . 'github.com/ReduxFramework/Redux-Framework</a>' ),
57
+ 'icon' => 'el-icon-home',
58
+ // 'submenu' => false, // Setting submenu to false on a given section will hide it from the WordPress sidebar menu!
59
+ 'fields' => array(
60
+
61
+ array(
62
+ 'id' => 'opt-web-fonts',
63
+ 'type' => 'media',
64
+ 'title' => __( 'Web Fonts', 'redux-framework-demo' ),
65
+ 'compiler' => 'true',
66
+ 'mode' => false,
67
+ // Can be set to false to allow any media type, or can also be set to any mime type.
68
+ 'desc' => __( 'Basic media uploader with disabled URL input field.', 'redux-framework-demo' ),
69
+ 'subtitle' => __( 'Upload any media using the WordPress native uploader', 'redux-framework-demo' ),
70
+ 'hint' => array(
71
+ //'title' => '',
72
+ 'content' => 'This is a <b>hint</b> tool-tip for the webFonts field.<br/><br/>Add any HTML based text you like here.',
73
+ )
74
+ ),
75
+ )
76
+ );
77
+ }
 
78
 
79
+ public function setHelpTabs() {
80
 
81
+ // Custom page help tabs, displayed using the help API. Tabs are shown in order of definition.
82
+ $this->args['help_tabs'][] = array(
83
+ 'id' => 'redux-help-tab-1',
84
+ 'title' => __( 'Theme Information 1', 'redux-framework-demo' ),
85
+ 'content' => __( '<p>This is the tab content, HTML is allowed.</p>', 'redux-framework-demo' )
86
+ );
87
 
88
+ $this->args['help_tabs'][] = array(
89
+ 'id' => 'redux-help-tab-2',
90
+ 'title' => __( 'Theme Information 2', 'redux-framework-demo' ),
91
+ 'content' => __( '<p>This is the tab content, HTML is allowed.</p>', 'redux-framework-demo' )
92
+ );
93
 
94
+ // Set the help sidebar
95
+ $this->args['help_sidebar'] = __( '<p>This is the sidebar content, HTML is allowed.</p>', 'redux-framework-demo' );
96
+ }
97
 
98
+ /**
99
+ * All the possible arguments for Redux.
100
+ * For full documentation on arguments, please refer to: https://github.com/ReduxFramework/ReduxFramework/wiki/Arguments
101
+ * */
102
+ public function setArguments() {
103
+
104
+ $theme = wp_get_theme(); // For use with some settings. Not necessary.
105
+
106
+ $this->args = array(
107
+ // TYPICAL -> Change these values as you need/desire
108
+ 'opt_name' => 'redux_demo',
109
+ // This is where your data is stored in the database and also becomes your global variable name.
110
+ 'display_name' => $theme->get( 'Name' ),
111
+ // Name that appears at the top of your panel
112
+ 'display_version' => $theme->get( 'Version' ),
113
+ // Version that appears at the top of your panel
114
+ 'menu_type' => 'menu',
115
+ //Specify if the admin menu should appear or not. Options: menu or submenu (Under appearance only)
116
+ 'allow_sub_menu' => true,
117
+ // Show the sections below the admin menu item or not
118
+ 'menu_title' => __( 'Sample Options', 'redux-framework-demo' ),
119
+ 'page_title' => __( 'Sample Options', 'redux-framework-demo' ),
120
+ // You will need to generate a Google API key to use this feature.
121
+ // Please visit: https://developers.google.com/fonts/docs/developer_api#Auth
122
+ 'google_api_key' => '',
123
+ // Must be defined to add google fonts to the typography module
124
+
125
+ 'async_typography' => false,
126
+ // Use a asynchronous font on the front end or font string
127
+ 'admin_bar' => true,
128
+ // Show the panel pages on the admin bar
129
+ 'global_variable' => '',
130
+ // Set a different name for your global variable other than the opt_name
131
+ 'dev_mode' => true,
132
+ // Show the time the page took to load, etc
133
+ 'customizer' => true,
134
+ // Enable basic customizer support
135
+
136
+ // OPTIONAL -> Give you extra features
137
+ 'page_priority' => null,
138
+ // Order where the menu appears in the admin area. If there is any conflict, something will not show. Warning.
139
+ 'page_parent' => 'themes.php',
140
+ // For a full list of options, visit: http://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters
141
+ 'page_permissions' => 'manage_options',
142
+ // Permissions needed to access the options panel.
143
+ 'menu_icon' => '',
144
+ // Specify a custom URL to an icon
145
+ 'last_tab' => '',
146
+ // Force your panel to always open to a specific tab (by id)
147
+ 'page_icon' => 'icon-themes',
148
+ // Icon displayed in the admin panel next to your menu_title
149
+ 'page_slug' => '_options',
150
+ // Page slug used to denote the panel
151
+ 'save_defaults' => true,
152
+ // On load save the defaults to DB before user clicks save or not
153
+ 'default_show' => false,
154
+ // If true, shows the default value next to each field that is not the default value.
155
+ 'default_mark' => '',
156
+ // What to print by the field's title if the value shown is default. Suggested: *
157
+ 'show_import_export' => true,
158
+ // Shows the Import/Export panel when not used as a field.
159
+
160
+ // CAREFUL -> These options are for advanced use only
161
+ 'transient_time' => 60 * MINUTE_IN_SECONDS,
162
+ 'output' => true,
163
+ // Global shut-off for dynamic CSS output by the framework. Will also disable google fonts output
164
+ 'output_tag' => true,
165
+ // Allows dynamic CSS to be generated for customizer and google fonts, but stops the dynamic CSS from going to the head
166
+ // 'footer_credit' => '', // Disable the footer credit of Redux. Please leave if you can help it.
167
+
168
+ // FUTURE -> Not in use yet, but reserved or partially implemented. Use at your own risk.
169
+ 'database' => '',
170
+ // possible: options, theme_mods, theme_mods_expanded, transient. Not fully functional, warning!
171
+ 'system_info' => false,
172
+ // REMOVE
173
+
174
+ // HINTS
175
+ 'hints' => array(
176
+ 'icon' => 'icon-question-sign',
177
+ 'icon_position' => 'right',
178
+ 'icon_color' => 'lightgray',
179
+ 'icon_size' => 'normal',
180
+ 'tip_style' => array(
181
+ 'color' => 'light',
182
+ 'shadow' => true,
183
+ 'rounded' => false,
184
+ 'style' => '',
185
  ),
186
+ 'tip_position' => array(
187
+ 'my' => 'top left',
188
+ 'at' => 'bottom right',
 
189
  ),
190
+ 'tip_effect' => array(
191
+ 'show' => array(
192
+ 'effect' => 'slide',
193
+ 'duration' => '500',
194
+ 'event' => 'mouseover',
195
+ ),
196
+ 'hide' => array(
197
+ 'effect' => 'slide',
198
+ 'duration' => '500',
199
+ 'event' => 'click mouseleave',
200
+ ),
201
+ ),
202
+ )
203
+ );
204
+
205
+
206
+ // SOCIAL ICONS -> Setup custom links in the footer for quick links in your panel footer icons.
207
+ $this->args['share_icons'][] = array(
208
+ 'url' => 'https://github.com/ReduxFramework/ReduxFramework',
209
+ 'title' => 'Visit us on GitHub',
210
+ 'icon' => 'el-icon-github'
211
+ //'img' => '', // You can use icon OR img. IMG needs to be a full URL.
212
+ );
213
+ $this->args['share_icons'][] = array(
214
+ 'url' => 'https://www.facebook.com/pages/Redux-Framework/243141545850368',
215
+ 'title' => 'Like us on Facebook',
216
+ 'icon' => 'el-icon-facebook'
217
+ );
218
+ $this->args['share_icons'][] = array(
219
+ 'url' => 'http://twitter.com/reduxframework',
220
+ 'title' => 'Follow us on Twitter',
221
+ 'icon' => 'el-icon-twitter'
222
+ );
223
+ $this->args['share_icons'][] = array(
224
+ 'url' => 'http://www.linkedin.com/company/redux-framework',
225
+ 'title' => 'Find us on LinkedIn',
226
+ 'icon' => 'el-icon-linkedin'
227
+ );
228
+
229
+ // Panel Intro text -> before the form
230
+ if ( ! isset( $this->args['global_variable'] ) || $this->args['global_variable'] !== false ) {
231
+ if ( ! empty( $this->args['global_variable'] ) ) {
232
+ $v = $this->args['global_variable'];
233
+ } else {
234
+ $v = str_replace( '-', '_', $this->args['opt_name'] );
235
+ }
236
+ $this->args['intro_text'] = sprintf( __( '<p>Did you know that Redux sets a global variable for you? To access any of your saved options from within your code you can use your global variable: <strong>$%1$s</strong></p>', 'redux-framework-demo' ), $v );
237
  } else {
238
+ $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' );
239
  }
240
+
241
+ // Add content after the form.
242
+ $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' );
243
  }
244
 
 
 
245
  }
246
 
247
+ global $reduxConfig;
248
+ $reduxConfig = new Redux_Framework_sample_config();
249
  }
 
 
 
 
sample/sample-config.php CHANGED
@@ -1,9 +1,8 @@
1
  <?php
2
-
3
  /**
4
  * ReduxFramework Sample Config File
5
- * For full documentation, please visit: https://docs.reduxframework.com
6
- * */
7
 
8
  if ( ! class_exists( 'Redux_Framework_sample_config' ) ) {
9
 
@@ -1800,6 +1799,8 @@
1800
 
1801
  global $reduxConfig;
1802
  $reduxConfig = new Redux_Framework_sample_config();
 
 
1803
  }
1804
 
1805
  /**
1
  <?php
 
2
  /**
3
  * ReduxFramework Sample Config File
4
+ * For full documentation, please visit: http://docs.reduxframework.com/
5
+ */
6
 
7
  if ( ! class_exists( 'Redux_Framework_sample_config' ) ) {
8
 
1799
 
1800
  global $reduxConfig;
1801
  $reduxConfig = new Redux_Framework_sample_config();
1802
+ } else {
1803
+ 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>";
1804
  }
1805
 
1806
  /**