From 57a99c5c816d559444b0c2f96b5075363b1389df Mon Sep 17 00:00:00 2001 From: ultimatemember Date: Wed, 21 Jan 2015 22:11:51 +0200 Subject: [PATCH] Compatible with Redux plugin --- admin/assets/css/um-admin-redux.css | 9 +- admin/core/lib/ReduxFramework/CHANGELOG.md | 28 + admin/core/lib/ReduxFramework/README.md | 11 +- admin/core/lib/ReduxFramework/README.txt | 23 +- .../ReduxCore/assets/js/media/media.js | 12 +- .../ReduxCore/assets/js/media/media.min.js | 2 +- .../ReduxCore/assets/js/redux.js | 13 +- .../ReduxCore/assets/js/redux.min.js | 4 +- .../customizer/extension_customizer.php | 154 +- .../ReduxFramework/ReduxCore/framework.php | 164 +- .../inc/fields/media/field_media.php | 11 - .../inc/fields/slider/field_slider.php | 4 +- .../fields/typography/field_typography.php | 10 + .../lib/ReduxFramework/ReduxCore/inc/p.php | 2 +- .../ReduxFramework/ReduxCore/inc/tracking.php | 84 +- .../lib/ReduxFramework/class.redux-plugin.php | 2 +- .../lib/ReduxFramework/redux-framework.php | 2 +- .../sample/barebones-config.php | 249 +++ .../lib/ReduxFramework/sample/info-html.html | 68 + .../sample/patterns/tree_bark.png | Bin 0 -> 42360 bytes .../sample/patterns/triangular.png | Bin 0 -> 210 bytes .../sample/patterns/triangular_@2X.png | Bin 0 -> 212 bytes .../sample/patterns/wild_flowers.png | Bin 0 -> 47151 bytes .../ReduxFramework/sample/presets/preset1.png | Bin 0 -> 18478 bytes .../ReduxFramework/sample/presets/preset2.png | Bin 0 -> 33523 bytes .../ReduxFramework/sample/sample-config.php | 1845 +++++++++++++++++ admin/core/um-admin-redux.php | 205 +- admin/um-admin-init.php | 66 +- 28 files changed, 2674 insertions(+), 294 deletions(-) create mode 100644 admin/core/lib/ReduxFramework/sample/barebones-config.php create mode 100644 admin/core/lib/ReduxFramework/sample/info-html.html create mode 100644 admin/core/lib/ReduxFramework/sample/patterns/tree_bark.png create mode 100644 admin/core/lib/ReduxFramework/sample/patterns/triangular.png create mode 100644 admin/core/lib/ReduxFramework/sample/patterns/triangular_@2X.png create mode 100644 admin/core/lib/ReduxFramework/sample/patterns/wild_flowers.png create mode 100644 admin/core/lib/ReduxFramework/sample/presets/preset1.png create mode 100644 admin/core/lib/ReduxFramework/sample/presets/preset2.png create mode 100644 admin/core/lib/ReduxFramework/sample/sample-config.php diff --git a/admin/assets/css/um-admin-redux.css b/admin/assets/css/um-admin-redux.css index cafb3a46..4bdf48cf 100644 --- a/admin/assets/css/um-admin-redux.css +++ b/admin/assets/css/um-admin-redux.css @@ -81,6 +81,11 @@ border-bottom: 0; } +.redux-main .redux-option-image { + max-width: 200px; + max-height: 200px; +} + .redux-container #redux-footer { border-radius: 0; background: none !important; @@ -121,10 +126,6 @@ margin-top: 10px !important; } -.redux-container .redux-group-tab h3 { - border-bottom: 0; -} - .redux-container-switch {font-size: 13px} .redux-sidebar .redux-group-menu li a { diff --git a/admin/core/lib/ReduxFramework/CHANGELOG.md b/admin/core/lib/ReduxFramework/CHANGELOG.md index e9fb86df..ef76dfa0 100644 --- a/admin/core/lib/ReduxFramework/CHANGELOG.md +++ b/admin/core/lib/ReduxFramework/CHANGELOG.md @@ -1,5 +1,33 @@ # Redux Framework Changelog +## 3.3.9.4 +* Added: Customizer now supports PANEL! Yay 4.0. + +## 3.3.9.3 +* Fixed: #1789 - Customizer now properly working again with WP 4.0. Odd bug. +* Modified: README.md updates as per @cmwwebfx suggestions. + +## 3.3.9.2 +* Fixed: #1782 - Fixed some extra themecheck and customizer issues. + +## 3.3.9.1 +* Fixed: #1782 - Media field not showing files after upload? Hopefully this fixes it. + +## 3.3.9 +* 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. + +## 3.3.8.8 +* Fixed: #1742 - Sidebar subsections don't always expand. + +## 3.3.8.7 +* Fixed: #1758 - Thanks @echo1consulting! +* Added: 'hidden' to menu_type argument to allow for hidden menus until available. + +## 3.3.8.6 +* Fixed: #1749 - Remove font-wight and font-style from css output when not in use. + ## 3.3.8.5 * Modified: Added the "redux/options/{$this->args['opt_name']}/compiler/advanced" hook for more advanced compiling. * Added: Suggestions as per #1709. Thanks @echo1consulting. diff --git a/admin/core/lib/ReduxFramework/README.md b/admin/core/lib/ReduxFramework/README.md index 796cef97..23318f51 100644 --- a/admin/core/lib/ReduxFramework/README.md +++ b/admin/core/lib/ReduxFramework/README.md @@ -2,6 +2,11 @@ WordPress options framework which uses the [WordPress Settings API](http://codex.wordpress.org/Settings_API "WordPress Settings API"), Custom Error/Validation Handling, Custom Field/Validation Types, and import/export functionality. +## Posting Guidelines for issues and questions ## +When using our Issue Tracker, you may ask questions where you may be a bit lost or need help understanding the documentation. If, however, you find a bug we require you to read and provide the information contained in our [Contributing Guidelines](https://github.com/ReduxFramework/redux-framework/blob/master/CONTRIBUTING.md). If you do not provide this information, we will request it before we can support you. + +If you are stuck in some of your own code, or need help with PHP and anything else not Redux specific, we request you purchase some [Premium Support](http://reduxframework.com/extension/premium-support/) and we will be happy to assist you. If we feel the issue is outside of our scope we will suggest you to purchase some [Premium Support](http://reduxframework.com/extension/premium-support/) in order for us to serve you. + ## Kickstart Your Development ## Are you authoring a theme, or plugin? Visit the [Redux Builder](http://build.reduxframework.com) site and get started! @@ -12,7 +17,7 @@ We help you create a seamless user experience for your users to demo your WordPr ## Documentation ## Need a little help with Redux? Come check out our brand new documentation site at [docs.reduxframework.com](http://docs.reduxframework.com), chock full of tutorials and examples! - + ## SMOF (Simple Modified Option Users) Converter! ## @@ -72,8 +77,8 @@ If you can, please donate to help support the ongoing development of Redux Frame ## Are you using Redux? ## -Send me an email at ghost1227@reduxframework.com so I can add you to our user spotlight! +Send us an email at info@reduxframework.com so we can add you to our showcase! ## Changelog ## -See Changelog.md \ No newline at end of file +See [Changelog.md](https://github.com/ReduxFramework/redux-framework/blob/master/CHANGELOG.md) \ No newline at end of file diff --git a/admin/core/lib/ReduxFramework/README.txt b/admin/core/lib/ReduxFramework/README.txt index 287e33a7..c695ff18 100644 --- a/admin/core/lib/ReduxFramework/README.txt +++ b/admin/core/lib/ReduxFramework/README.txt @@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i Tags: admin, admin interface, options, theme options, plugin options, options framework, settings, web fonts, google fonts Requires at least: 3.5.1 Tested up to: 4.0 -Stable tag: 3.3.8.4 +Stable tag: 3.3.9.4 License: GPLv3 or later License URI: http://www.gnu.org/licenses/gpl-3.0.html @@ -125,6 +125,27 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re == Changelog == +## 3.3.9.4 +* Added: Customizer now supports PANEL! Yay 4.0. +* Fixed: #1789 - Customizer now properly working again with WP 4.0. Odd bug. + += 3.3.9.2 = +* Fixed: #1670 - Fixed some extra themecheck and customizer issues. +* Fixed: #1782 - Media field not showing files after upload? Hopefully this fixes it. + += 3.3.9 = +* 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* + = 3.3.8.3 = * Added: #1593 - Great pull request by @JonasDoebertin. Now you can enqueue dynamic output to the login screen or admin backend. * Fixed: Customizer wasn't saving at all! That's been like 4 months. No one's reported it. Hmm. diff --git a/admin/core/lib/ReduxFramework/ReduxCore/assets/js/media/media.js b/admin/core/lib/ReduxFramework/ReduxCore/assets/js/media/media.js index 958e2a7c..4b919518 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/assets/js/media/media.js +++ b/admin/core/lib/ReduxFramework/ReduxCore/assets/js/media/media.js @@ -1,4 +1,4 @@ -/*global redux_change, wp, redux*/ +/*global redux_change, wp, redux, libFilter */ /** * Media Uploader @@ -64,6 +64,7 @@ var frame; var jQueryel = $( this ); + var libFilter; // If the media frame already exists, reopen it. if ( frame ) { @@ -73,13 +74,12 @@ // Get library filter data var filter = $( selector ).find('.library-filter').data('lib-filter'); - var libFilter = []; // Must exist to do decoding if (filter !== undefined) { if (filter !== ''){ + libFilter = []; isFiltered = true; - filter = decodeURIComponent(filter); filter = JSON.parse(filter); @@ -87,8 +87,8 @@ libFilter.push(value); }); } - } - + } + // Create the media frame. frame = wp.media( { @@ -215,4 +215,4 @@ selector.find( '.media_upload_button' ).remove(); } }; -})( jQuery ); \ No newline at end of file +})( jQuery ); diff --git a/admin/core/lib/ReduxFramework/ReduxCore/assets/js/media/media.min.js b/admin/core/lib/ReduxFramework/ReduxCore/assets/js/media/media.min.js index 05684046..a8ca4c0c 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/assets/js/media/media.min.js +++ b/admin/core/lib/ReduxFramework/ReduxCore/assets/js/media/media.min.js @@ -1 +1 @@ -!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.media=redux.field_objects.media||{};var b;a(document).ready(function(){}),redux.field_objects.media.init=function(c){c||(c=a(document).find(".redux-container-media")),a(c).each(function(){var c=a(this),d=c;c.hasClass("redux-field-container")||(d=c.parents(".redux-field-container:first")),d.hasClass("redux-field-init")&&(d.removeClass("redux-field-init"),b=!1,c.find(".remove-image, .remove-file").unbind("click").on("click",function(){redux.field_objects.media.removeFile(a(this).parents("fieldset.redux-field:first"))}),c.find(".media_upload_button").unbind().on("click",function(b){redux.field_objects.media.addFile(b,a(this).parents("fieldset.redux-field:first"))}))})},redux.field_objects.media.addFile=function(c,d){c.preventDefault();var e,f=a(this);if(e)return void e.open();var g=a(d).find(".library-filter").data("lib-filter"),h=[];void 0!==g&&""!==g&&(b=!0,g=decodeURIComponent(g),g=JSON.parse(g),a.each(g,function(a,b){h.push(b)})),e=wp.media({multiple:!1,library:{type:h},title:f.data("choose"),button:{text:f.data("update")}}),e.on("select",function(){var c=e.state().get("selection").first();e.close();var f=a(d).find(".data").data();if(("undefined"==typeof redux.field_objects.media||void 0===typeof redux.field_objects.media)&&(redux.field_objects.media={}),(void 0===f||"undefined"===f.mode)&&(f={},f.mode="image"),b===!0&&(f.mode=0),0===f.mode);else if(f.mode!==!1&&c.attributes.type!==f.mode&&c.attributes.subtype!==f.mode)return;d.find(".upload").val(c.attributes.url),d.find(".upload-id").val(c.attributes.id),d.find(".upload-height").val(c.attributes.height),d.find(".upload-width").val(c.attributes.width),redux_change(a(d).find(".upload-id"));var g=c.attributes.url;if("undefined"!=typeof c.attributes.sizes&&"undefined"!=typeof c.attributes.sizes.thumbnail)g=c.attributes.sizes.thumbnail.url;else if("undefined"!=typeof c.attributes.sizes){var h=c.attributes.height;for(var i in c.attributes.sizes){var j=c.attributes.sizes[i];j.height').slideDown("fast"),d.find(".remove-image").removeClass("hide"),d.find(".redux-background-properties").slideDown()}),e.open()},redux.field_objects.media.removeFile=function(b){if(b.find(".remove-image").addClass("hide")){b.find(".remove-image").addClass("hide"),b.find(".upload").val(""),b.find(".upload-id").val(""),b.find(".upload-height").val(""),b.find(".upload-width").val(""),b.find(".upload-thumbnail").val(""),redux_change(a(b).find(".upload-id")),b.find(".redux-background-properties").hide();var c=b.find(".screenshot");c.slideUp(),b.find(".remove-file").unbind(),b.find(".section-upload .upload-notice").length>0&&b.find(".media_upload_button").remove()}}}(jQuery); \ No newline at end of file +(function(b){redux.field_objects=redux.field_objects||{};redux.field_objects.media=redux.field_objects.media||{};var a;b(document).ready(function(){});redux.field_objects.media.init=function(c){if(!c){c=b(document).find(".redux-container-media")}b(c).each(function(){var e=b(this);var d=e;if(!e.hasClass("redux-field-container")){d=e.parents(".redux-field-container:first")}if(d.hasClass("redux-field-init")){d.removeClass("redux-field-init")}else{return}a=false;e.find(".remove-image, .remove-file").unbind("click").on("click",function(){redux.field_objects.media.removeFile(b(this).parents("fieldset.redux-field:first"))});e.find(".media_upload_button").unbind().on("click",function(f){redux.field_objects.media.addFile(f,b(this).parents("fieldset.redux-field:first"))})})};redux.field_objects.media.addFile=function(g,c){g.preventDefault();var h;var e=b(this);var d;if(h){h.open();return}var f=b(c).find(".library-filter").data("lib-filter");if(f!==undefined){if(f!==""){d=[];a=true;f=decodeURIComponent(f);f=JSON.parse(f);b.each(f,function(i,j){d.push(j)})}}h=wp.media({multiple:false,library:{type:d},title:e.data("choose"),button:{text:e.data("update")}});h.on("select",function(){var n=h.state().get("selection").first();h.close();var m=b(c).find(".data").data();if(typeof redux.field_objects.media==="undefined"||typeof redux.field_objects.media===undefined){redux.field_objects.media={}}if(m===undefined||m.mode==="undefined"){m={};m.mode="image"}if(a===true){m.mode=0}if(m.mode===0){}else{if(m.mode!==false){if(n.attributes.type!==m.mode){if(n.attributes.subtype!==m.mode){return}}}}c.find(".upload").val(n.attributes.url);c.find(".upload-id").val(n.attributes.id);c.find(".upload-height").val(n.attributes.height);c.find(".upload-width").val(n.attributes.width);redux_change(b(c).find(".upload-id"));var l=n.attributes.url;if(typeof n.attributes.sizes!=="undefined"&&typeof n.attributes.sizes.thumbnail!=="undefined"){l=n.attributes.sizes.thumbnail.url}else{if(typeof n.attributes.sizes!=="undefined"){var i=n.attributes.height;for(var k in n.attributes.sizes){var j=n.attributes.sizes[k];if(j.height').slideDown("fast")}c.find(".remove-image").removeClass("hide");c.find(".redux-background-properties").slideDown()});h.open()};redux.field_objects.media.removeFile=function(c){if(!c.find(".remove-image").addClass("hide")){return}c.find(".remove-image").addClass("hide");c.find(".upload").val("");c.find(".upload-id").val("");c.find(".upload-height").val("");c.find(".upload-width").val("");c.find(".upload-thumbnail").val("");redux_change(b(c).find(".upload-id"));c.find(".redux-background-properties").hide();var d=c.find(".screenshot");d.slideUp();c.find(".remove-file").unbind();if(c.find(".section-upload .upload-notice").length>0){c.find(".media_upload_button").remove()}}})(jQuery); \ No newline at end of file diff --git a/admin/core/lib/ReduxFramework/ReduxCore/assets/js/redux.js b/admin/core/lib/ReduxFramework/ReduxCore/assets/js/redux.js index 677823eb..d9cf2c49 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/assets/js/redux.js +++ b/admin/core/lib/ReduxFramework/ReduxCore/assets/js/redux.js @@ -301,8 +301,9 @@ } var el = link.parents( '.redux-container:first' ); var relid = link.data( 'rel' ); // The group ID of interest - var oldid = el.find( '.redux-group-tab-link-li.active .redux-group-tab-link-a' ).data( 'rel' ); + var oldid = el.find( '.redux-group-tab-link-li.active:first .redux-group-tab-link-a' ).data( 'rel' ); + //console.log('id: '+relid+' oldid: '+oldid); if ( oldid === relid ) { return; @@ -356,12 +357,20 @@ el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); if ( el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).length ) { - //console.log('oldid is parent') + //console.log('oldid is parent'); + //console.log('#' + relid + '_section_group_li'); + el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).slideUp( 'fast', function() { el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ).removeClass( 'activeChild' ); } ); + var newParent = el.find( '#' + relid + '_section_group_li' ).parents( '.hasSubSections:first' ); + if ( newParent.length > 0 ) { + el.find( '#' + relid + '_section_group_li' ).removeClass( 'active' ); + relid = newParent.find( '.redux-group-tab-link-a:first' ).data( 'rel' ); + el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); + } } else if ( el.find( '#' + oldid + '_section_group_li' ).parents( 'ul.subsection' ).length ) { //console.log('oldid is a child'); if ( !el.find( '#' + oldid + '_section_group_li' ).parents( '#' + relid + '_section_group_li' ).length ) { diff --git a/admin/core/lib/ReduxFramework/ReduxCore/assets/js/redux.min.js b/admin/core/lib/ReduxFramework/ReduxCore/assets/js/redux.min.js index 153ad1e6..b0e5691a 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/assets/js/redux.min.js +++ b/admin/core/lib/ReduxFramework/ReduxCore/assets/js/redux.min.js @@ -1,3 +1,3 @@ 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++]];)d0?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="")&&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("
",{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("
",{"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("
",{"class":T+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("
",{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("",{"class":"qtip-close "+(this.options.style.widget?"":T+"-icon"),title:g,"aria-label":g}).prepend(d("",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(bb)||a.hide(b),F})},A._updateButton=function(a){if(!this.rendered)return F;var b=this.elements.button;a?this._createButton():b.remove()},A._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(bb);c.removeClass(bb),bb=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(bb,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass($,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(T+"-icon",!a)},A._storeMouse=function(a){(this.mouse=l(a)).type="mousemove"},A._bind=function(a,b,c,e,f){var g="."+this._id+(e?"-"+e:"");b.length&&d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this))},A._unbind=function(a,b){d(a).unbind("."+this._id+(b?"-"+b:""))};var ib="."+T;d(function(){r(X,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Z)&&!c.hasClass(bb)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(ab,b)}),r("["+V+"]",Y,p)}),A._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||G,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=F,!e.isDefaultPrevented()},A._bindEvents=function(a,b,c,e,f,g){if(e.add(c).length===e.length){var h=[];b=d.map(b,function(b){var c=d.inArray(b,a);return c>-1?void h.push(a.splice(c,1)[0]):b}),h.length&&this._bind(c,h,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)})}this._bind(c,a,f),this._bind(e,b,g)},A._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?F:(this.cache.event=l(a),this.cache.target=a?d(a.target):[c],clearTimeout(this.timers.show),void(this.timers.show=m.call(this,function(){this.render("object"==typeof a||e.show.ready)},e.show.delay)))}var e=this.options,f=e.show.target,g=e.hide.target,h=e.show.event?d.trim(""+e.show.event).split(" "):[],i=e.hide.event?d.trim(""+e.hide.event).split(" "):[];/mouse(over|enter)/i.test(e.show.event)&&!/mouse(out|leave)/i.test(e.hide.event)&&i.push("mouseleave"),this._bind(f,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=E}),this._bindEvents(h,i,f,g,b,function(){clearTimeout(this.timers.show)}),(e.show.ready||e.prerender)&&b.call(this,a)},A._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),m=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Z)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(bb)&&this.tooltip[0].offsetWidth>0,e=b.parents(X).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",p),this._bind(i.add(g),z.inactiveEvents,p,"-inactive")),this._bindEvents(r,s,h,i,n,o),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){this.cache.onTarget="mouseenter"===a.type}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(bb)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:m,"resize",q),f.adjust.scroll&&this._bind(m.add(f.container),"scroll",q)},A._unassignEvents=function(){var c=[this.options.show.target[0],this.options.hide.target[0],this.rendered&&this.tooltip[0],this.options.position.container[0],this.options.position.viewport[0],this.options.position.container.closest("html")[0],a,b];this._unbind(d([]).pushStack(d.grep(c,function(a){return"object"==typeof a})))},z=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=G,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],T):G;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,T);if(!a)return E;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),F;a.set(b,e)}}),g!==G?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(E,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===F||c.length<1||z.api[c]?z.nextid++:c,b=s(d(this),c,k),b===F?E:(z.api[c]=b,d.each(S,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,z.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,db):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(db,b))}return d.fn["attr"+cb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+cb].apply(this,arguments));return a||b.filter("["+db+"]").attr("title",function(){return d.attr(this,db)}).removeAttr(db),b}},function(a,b){if(!b||d.fn[a+cb])return E;var c=d.fn[a+cb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+cb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(U))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+cb].apply(this,arguments)}),z.version="2.2.0",z.nextid=0,z.inactiveEvents=Y,z.zindex=15e3,z.defaults={prerender:F,id:F,overwrite:E,suppress:E,content:{text:E,attr:"title",title:F,button:F},position:{my:"top left",at:"bottom right",target:F,container:F,viewport:F,adjust:{x:0,y:0,mouse:E,scroll:E,resize:E,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:F})}},show:{target:F,event:"mouseenter",effect:E,delay:90,solo:F,ready:F,autofocus:F},hide:{target:F,event:"mouseleave",effect:E,delay:0,fixed:F,inactive:F,leave:"window",distance:F},style:{classes:"",widget:F,width:F,height:F,def:E},events:{render:G,move:G,show:G,hide:G,toggle:G,visible:G,hidden:G,focus:G,blur:G}}; -var jb,kb="margin",lb="border",mb="color",nb="background-color",ob="transparent",pb=" !important",qb=!!b.createElement("canvas").getContext,rb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,sb={},tb=["Webkit","O","Moz","ms"];if(qb)var ub=a.devicePixelRatio||1,vb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),wb=ub/vb;else var xb=function(a,b,c){return"'};d.extend(w.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("
",{"class":T+"-tip"}).prependTo(a.tooltip),qb?(b=d("").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.offsetl&&!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("
",{id:"qtip-overlay",html:"
",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]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.bottom&&(f.position.bottom=c[1]),c[1]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';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("
",{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)&&dc.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=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=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]d.right||c.bottomd.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="); -(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('
'+c.msg+"
")})}),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(''+c+""),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(''+total+""),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)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('
');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(//,""));{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}; \ No newline at end of file +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"'};d.extend(w.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("
",{"class":T+"-tip"}).prependTo(a.tooltip),qb?(b=d("").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.offsetl&&!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("
",{id:"qtip-overlay",html:"
",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]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.bottom&&(f.position.bottom=c[1]),c[1]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';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("
",{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)&&dc.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=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=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]d.right||c.bottomd.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="); +(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('
'+c.msg+"
")})}),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(''+c+""),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(''+total+""),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)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('
');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(//,""));{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}; \ No newline at end of file diff --git a/admin/core/lib/ReduxFramework/ReduxCore/extensions/customizer/extension_customizer.php b/admin/core/lib/ReduxFramework/ReduxCore/extensions/customizer/extension_customizer.php index 4fe2e819..02061f1e 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/extensions/customizer/extension_customizer.php +++ b/admin/core/lib/ReduxFramework/ReduxCore/extensions/customizer/extension_customizer.php @@ -37,6 +37,8 @@ private $_extension_url; private $_extension_dir; private $parent; + private $orig_options = array(); + private static $post_values = array(); public static $version = "2.0"; /** @@ -54,10 +56,13 @@ public function __construct( $parent ) { //add_action('wp_head', array( $this, '_enqueue_new' )); - global $pagenow; - if ( ( $pagenow !== "customize.php" && $pagenow !== "admin-ajax.php" && ! isset( $GLOBALS['wp_customize'] ) ) ) { + global $pagenow, $wp_customize; + if ( ! isset( $wp_customize ) && $pagenow !== "customize.php" && $pagenow !== "admin-ajax.php" ) { return; } + if ( ( $pagenow !== "customize.php" && $pagenow !== "admin-ajax.php" && ! isset( $GLOBALS['wp_customize'] ) ) ) { + //return; + } $this->parent = $parent; @@ -66,6 +71,9 @@ $this->_extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->_extension_dir ) ); } + self::get_post_values(); + + // Create defaults array $defaults = array(); /* @@ -76,29 +84,31 @@ customize_controls_print_footer_scripts */ - if ( ! isset( $_POST['customized'] ) || $pagenow == "admin-ajax.php" ) { - if ( current_user_can( $this->parent->args['page_permissions'] ) ) { - add_action( 'customize_register', array( + + if ( ! ( isset( $_POST['action'] ) || ( isset( $_POST['action'] ) && $_POST['action'] != "customize_save" ) ) ) { + + add_action( "redux/options/{$this->parent->args['opt_name']}/options", array( + $this, + '_override_values' + ), 100 ); + + if ( ! isset( $_POST['customized'] ) || $pagenow == "admin-ajax.php" ) { + if ( current_user_can( $this->parent->args['page_permissions'] ) ) { + add_action( 'customize_register', array( $this, '_register_customizer_controls' ) ); // Create controls + } } - } - if ( isset( $_POST['customized'] ) ) { - if ( $pagenow == "admin-ajax.php" && $_POST['action'] == 'customize_save' ) { - //$this->parent-> - } - add_action( "redux/options/{$this->parent->args['opt_name']}/options", array( - $this, - '_override_values' - ), 100 ); - add_action( 'customize_save', array( $this, 'customizer_save_before' ) ); // Before save - add_action( 'customize_save_after', array( &$this, 'customizer_save_after' ) ); // After save add_action( 'wp_head', array( $this, 'customize_preview_init' ) ); } + //add_action( 'customize_save', array( $this, 'customizer_save_before' ) ); // Before save + add_action( 'customize_save_after', array( &$this, 'customizer_save_after' ) ); // After save + + //add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_previewer_css' ) ); // Enqueue previewer css //add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_previewer_js' ) ); // Enqueue previewer javascript //add_action( "wp_footer", array( $this, '_enqueue_new' ), 100 ); @@ -109,12 +119,22 @@ do_action( 'redux/customizer/live_preview' ); } + protected static function get_post_values() { + if ( empty( self::$post_values ) && isset( $_POST['customized'] ) && ! empty( $_POST['customized'] ) ) { + self::$post_values = json_decode( stripslashes_deep( $_POST['customized'] ), true ); + } + } + public function _override_values( $data ) { - if ( isset( $_POST['customized'] ) ) { - $this->orig_options = $this->parent->options; - $options = json_decode( stripslashes_deep( $_POST['customized'] ), true ); - if ( ! empty( $options ) && is_array( $options ) ) { - foreach ( $options as $key => $value ) { + if ( empty( $this->parent->options ) ) { + $this->parent->get_options(); + } + self::get_post_values(); + + if ( isset( $_POST['customized'] ) && ! empty( self::$post_values ) ) { + + if ( is_array( self::$post_values ) ) { + foreach ( self::$post_values as $key => $value ) { if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) { $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) ); $data[ $key ] = $value; @@ -172,6 +192,7 @@ 'admin-head-callback' => '', 'admin-preview-callback' => '' ); + $panel = ""; foreach ( $this->parent->sections as $key => $section ) { @@ -218,11 +239,28 @@ $order['heading'] ++; } - $wp_customize->add_section( $section['id'], array( - 'title' => $section['title'], - 'priority' => $section['priority'], - 'description' => $section['desc'] - ) ); + if ( method_exists( $wp_customize, 'add_panel' ) && ( ! isset( $section['subsection'] ) || ( isset( $section['subsection'] ) && $section['subsection'] != true ) ) && isset( $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) && $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) { + + $wp_customize->add_panel( $section['id'], array( + 'priority' => $section['priority'], + 'capability' => 'customize', + 'theme_supports' => '', + 'title' => $section['title'], + 'description' => $section['desc'], + ) ); + $panel = $section['id']; + + } else { + if ( ! isset( $section['subsection'] ) || ( isset( $section['subsection'] ) && $section['subsection'] != true ) ) { + $panel = ""; + } + $wp_customize->add_section( $section['id'], array( + 'title' => $section['title'], + 'priority' => $section['priority'], + 'description' => $section['desc'], + 'panel' => $panel + ) ); + } foreach ( $section['fields'] as $skey => $option ) { @@ -266,23 +304,22 @@ continue; } - $customSetting = array( - 'default' => $option['default'], - 'type' => 'option', - 'capabilities' => 'edit_theme_options', - //'capabilities' => $this->parent->args['page_permissions'], - 'transport' => 'refresh', - 'theme_supports' => '', - 'sanitize_callback' => '__return_false', - //'sanitize_callback' => array( $this, '_field_validation' ), - //'sanitize_js_callback' =>array( &$parent, '_field_input' ), - ); - - $option['id'] = $this->parent->args['opt_name'] . '[' . $option['id'] . ']'; if ( $option['type'] != "heading" || ! empty( $option['type'] ) ) { - $wp_customize->add_setting( $option['id'], $customSetting ); + $wp_customize->add_setting( $option['id'], + array( + 'default' => $option['default'], + 'type' => 'option', + 'capabilities' => 'edit_theme_options', + //'capabilities' => $this->parent->args['page_permissions'], + 'transport' => 'refresh', + 'theme_supports' => '', + //'sanitize_callback' => '__return_false', + 'sanitize_callback' => array( $this, '_field_validation' ), + //'sanitize_js_callback' =>array( &$parent, '_field_input' ), + ) + ); } if ( ! empty( $option['data'] ) && empty( $option['options'] ) ) { @@ -320,6 +357,14 @@ if ( isset( $option['data'] ) && $option['data'] ) { continue; } + //if ($option['title'] == "Twitter Publisher Username") { + // print_r($option); + // $trueID = str_replace(array(']', 'redux_demo['),'',$option['id']); + // $data = get_option($this->parent->args['opt_name']); + // print_r($data[$trueID]); + // print_r($this->parent->options[$trueID]); + // exit(); + //} $wp_customize->add_control( $option['id'], array( 'label' => $option['title'], 'section' => $section['id'], @@ -331,9 +376,14 @@ case 'select': case 'button_set': + if ( ! isset( $option['options'] ) ) { + continue; + } + if ( ( isset( $option['sortable'] ) && $option['sortable'] ) ) { continue; } + $wp_customize->add_control( $option['id'], array( 'label' => $option['title'], 'section' => $section['id'], @@ -423,7 +473,14 @@ } public function customizer_save_after( $wp_customize ) { - //if( isset( $_POST['customized'] ) ) { + + if ( empty( $this->parent->options ) ) { + $this->parent->get_options(); + } + if ( empty( $this->orig_options ) && ! empty( $this->parent->options ) ) { + $this->orig_options = $this->parent->options; + } + $options = json_decode( stripslashes_deep( $_POST['customized'] ), true ); $compiler = false; $changed = false; @@ -449,7 +506,7 @@ $this->parent->no_output = true; $this->parent->_enqueue_output(); do_action( "redux/options/{$this->parent->args['opt_name']}/compiler", $this->parent->options, $this->parent->compilerCSS ); - do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $parent ); + do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this->parent ); } } @@ -568,13 +625,13 @@ * * @return */ - public function _field_validation( $plugin_options, $two ) { - echo "dovy"; - echo $two; + public function _field_validation( $value ) { + print_r( $value ); + print_r( $_POST ); - return $plugin_options; + return $value; - return $this->parent->_validate_options( $plugin_options ); + //return $this->parent->_validate_options( $plugin_options ); } /** @@ -588,4 +645,7 @@ } } // class + function redux_customizer_custom_validation( $field ) { + return $field; + } } // if diff --git a/admin/core/lib/ReduxFramework/ReduxCore/framework.php b/admin/core/lib/ReduxFramework/ReduxCore/framework.php index afa2b330..b57777af 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/framework.php +++ b/admin/core/lib/ReduxFramework/ReduxCore/framework.php @@ -68,7 +68,7 @@ // ATTENTION DEVS // Please update the build number with each push, no matter how small. // This will make for easier support when we ask users what version they are using. - public static $_version = '3.3.8.5'; + public static $_version = '3.3.9.4'; public static $_dir; public static $_url; public static $_upload_dir; @@ -124,11 +124,11 @@ self::$_url = trailingslashit( self::$wp_content_url . $relative_url ); } } - - self::$_url = apply_filters( "redux/_url", self::$_url ); - self::$_dir = apply_filters( "redux/_dir", self::$_dir ); + + self::$_url = apply_filters( "redux/_url", self::$_url ); + self::$_dir = apply_filters( "redux/_dir", self::$_dir ); self::$_is_plugin = apply_filters( "redux/_is_plugin", self::$_is_plugin ); - + } // ::init() @@ -186,11 +186,6 @@ */ public function __construct( $sections = array(), $args = array(), $extra_tabs = array() ) { - $this->slug = 'ultimatemember'; - - $this->about_tabs['about'] = 'About'; - $this->about_tabs['start'] = 'Getting Started'; - // Disregard WP AJAX 'heartbeat'call. Why waste resources? if ( isset( $_POST ) && isset( $_POST['action'] ) && $_POST['action'] == 'heartbeat' ) { @@ -215,7 +210,7 @@ } if ( empty( $this->args['footer_credit'] ) ) { - $this->args['footer_credit'] = ''; + $this->args['footer_credit'] = '' . sprintf( __( 'Options panel created using %1$s', 'redux-framework' ), '
' . __( 'Redux Framework', 'redux-framework' ) . ' v' . self::$_version ) . ''; } if ( empty( $this->args['menu_title'] ) ) { @@ -390,19 +385,19 @@ // Output dynamic CSS // Frontend: Maybe enqueue dynamic CSS and Google fonts - if( empty( $this->args['output_location'] ) || in_array( 'frontend', $this->args['output_location'] ) ) { + if ( empty( $this->args['output_location'] ) || in_array( 'frontend', $this->args['output_location'] ) ) { add_action( 'wp_head', array( &$this, '_output_css' ), 150 ); add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 ); } // Login page: Maybe enqueue dynamic CSS and Google fonts - if( in_array( 'login', $this->args['output_location'] ) ) { + if ( in_array( 'login', $this->args['output_location'] ) ) { add_action( 'login_head', array( &$this, '_output_css' ), 150 ); add_action( 'login_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 ); } // Admin area: Maybe enqueue dynamic CSS and Google fonts - if( in_array( 'admin', $this->args['output_location'] ) ) { + if ( in_array( 'admin', $this->args['output_location'] ) ) { add_action( 'admin_head', array( &$this, '_output_css' ), 150 ); add_action( 'admin_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 ); } @@ -1301,22 +1296,14 @@ * @access public * @return void */ - public function _options_page() { - + public function _options_page() { $this->import_export->in_field(); - if ( $this->args['menu_type'] == 'submenu' ) { + if ( $this->args['menu_type'] == 'hidden' ) { - add_menu_page( __('Ultimate Member', $this->slug), __('Ultimate Member', $this->slug), 'manage_options', $this->slug, array(&$this, 'admin_page'), 'dashicons-admin-users', '66.78578'); - - foreach( $this->about_tabs as $k => $tab ) { - - add_submenu_page( '_'. $k . '_um', sprintf(__('%s | Ultimate Member', $this->slug), $tab), sprintf(__('%s | Ultimate Member', $this->slug), $tab), 'manage_options', $this->slug . '-' . $k, array(&$this, 'admin_page') ); - - } - - add_submenu_page( $this->slug, __('Dashboard', $this->slug), __('Dashboard', $this->slug), 'manage_options', $this->slug, array(&$this, 'admin_page') ); - + // No menu to add! + + } else if ( $this->args['menu_type'] == 'submenu' ) { $this->add_submenu( $this->args['page_parent'], $this->args['page_title'], @@ -1325,14 +1312,68 @@ $this->args['page_slug'] ); - add_submenu_page( $this->slug, __('Forms', $this->slug), __('Forms', $this->slug), 'manage_options', 'edit.php?post_type=um_form', '', '' ); - - add_submenu_page( $this->slug, __('User Roles', $this->slug), __('User Roles', $this->slug), 'manage_options', 'edit.php?post_type=um_role', '', '' ); - - if ( um_get_option('members_page' ) || !get_option('um_options') ){ - add_submenu_page( $this->slug, __('Member Directories', $this->slug), __('Member Directories', $this->slug), 'manage_options', 'edit.php?post_type=um_directory', '', '' ); - } + } else { + $this->page = add_menu_page( + $this->args['page_title'], + $this->args['menu_title'], + $this->args['page_permissions'], + $this->args['page_slug'], + array( &$this, '_options_page_html' ), + $this->args['menu_icon'], + $this->args['page_priority'] + ); + if ( true === $this->args['allow_sub_menu'] ) { + if ( ! isset( $section['type'] ) || $section['type'] != 'divide' ) { + foreach ( $this->sections as $k => $section ) { + $canBeSubSection = ( $k > 0 && ( ! isset( $this->sections[ ( $k ) ]['type'] ) || $this->sections[ ( $k ) ]['type'] != "divide" ) ) ? true : false; + + if ( ! isset( $section['title'] ) || ( $canBeSubSection && ( isset( $section['subsection'] ) && $section['subsection'] == true ) ) ) { + continue; + } + + if ( isset( $section['submenu'] ) && $section['submenu'] == false ) { + continue; + } + + if ( isset( $section['customizer_only'] ) && $section['customizer_only'] == true ) { + continue; + } + + add_submenu_page( + $this->args['page_slug'], + $section['title'], + $section['title'], + $this->args['page_permissions'], + $this->args['page_slug'] . '&tab=' . $k, + //create_function( '$a', "return null;" ) + '__return_null' + ); + } + + // Remove parent submenu item instead of adding null item. + remove_submenu_page( $this->args['page_slug'], $this->args['page_slug'] ); + } + + if ( true == $this->args['show_import_export'] && false == $this->import_export->is_field ) { + $this->import_export->add_submenu(); + } + + if ( true == $this->args['dev_mode'] ) { + $this->debug->add_submenu(); + } + + if ( true == $this->args['system_info'] ) { + add_submenu_page( + $this->args['page_slug'], + __( 'System Info', 'redux-framework' ), + __( 'System Info', 'redux-framework' ), + $this->args['page_permissions'], + $this->args['page_slug'] . '&tab=system_info_default', + '__return_null' + ); + } + } } add_action( "load-{$this->page}", array( &$this, '_load_page' ) ); @@ -1352,7 +1393,7 @@ $ct = wp_get_theme(); $theme_data = $ct; - if ( ! is_super_admin() || ! is_admin_bar_showing() || ! $this->args['admin_bar'] ) { + if ( ! is_super_admin() || ! is_admin_bar_showing() || ! $this->args['admin_bar'] || $this->args['menu_type'] == 'hidden' ) { return; } @@ -1422,6 +1463,7 @@ $nodeargs = array( 'id' => $this->args["page_slug"], 'title' => $title, + // $theme_data->get( 'Name' ) . " " . __( 'Options', 'redux-framework-demo' ), 'href' => admin_url( 'admin.php?page=' . $this->args["page_slug"] ), 'meta' => array() ); @@ -1890,7 +1932,7 @@ if ( isset( $this->args['dev_mode'] ) && $this->args['dev_mode'] == true ) { - $base = admin_url('admin-ajax.php') . '?action=redux_p&url='; + $base = admin_url( 'admin-ajax.php' ) . '?action=redux_p&url='; $url = $base . urlencode( 'http://ads.reduxframework.com/api/index.php?js&g&1&v=2' ) . '&proxy=' . urlencode( $base ); $this->localize_data['rAds'] = ''; } @@ -2250,15 +2292,13 @@ } // In case docs are ignored. - $contentParam = isset( $field['hint'] ) ? $field['hint'] : ''; + $titleParam = isset( $field['hint']['title'] ) ? $field['hint']['title'] : ''; + $contentParam = isset( $field['hint']['content'] ) ? $field['hint']['content'] : ''; $hint_color = isset( $this->args['hints']['icon_color'] ) ? $this->args['hints']['icon_color'] : '#d3d3d3'; // Set hint html with appropriate position css - $hint = ''; - $hint .= ''; - $hint .= ''; - + $hint = '
  
'; } } @@ -2351,7 +2391,7 @@ $section['title'] = ""; } - $heading = isset( $section['heading'] ) ? $section['heading'] : null; + $heading = isset( $section['heading'] ) ? $section['heading'] : $section['title']; if ( isset( $section['permissions'] ) ) { if ( ! current_user_can( $section['permissions'] ) ) { @@ -2632,7 +2672,8 @@ } if ( isset( $this->transients['run_compiler'] ) && $this->transients['run_compiler'] ) { - $this->args['output_tag'] = false; + + $this->no_output = true; $this->_enqueue_output(); @@ -2653,7 +2694,7 @@ * @param string CSS that get sent to the compiler hook */ do_action( "redux/options/{$this->args['opt_name']}/compiler", $this->options, $this->compilerCSS, $this->transients['changed_values'] ); - + /** * action 'redux/options/{opt_name}/compiler/advanced' * @@ -2769,7 +2810,9 @@ foreach ( $keys as $key ) { $plugin_options[ $key ] = $this->options[ $key ]; } - unset( $plugin_options['redux-no_panel'] ); + if ( isset( $plugin_options['redux-no_panel'] ) ) { + unset( $plugin_options['redux-no_panel'] ); + } } if ( ! empty( $this->hidden_perm_fields ) && is_array( $this->hidden_perm_fields ) ) { @@ -2859,6 +2902,11 @@ $plugin_options = $this->options_defaults; $this->transients['changed_values'] = array(); + + if ( empty( $this->options ) ) { + $this->options = $this->options_defaults; + } + foreach ( $this->options as $key => $value ) { if ( isset( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { $this->transients['changed_values'][ $key ] = $value; @@ -3657,7 +3705,7 @@ unset( $link['link'] ); } - echo ''; + echo ''; if ( isset( $link['icon'] ) && ! empty( $link['icon'] ) ) { echo ''; @@ -4252,30 +4300,6 @@ return $data_string; } - - public function admin_page(){ - - $page = $_REQUEST['page']; - - if ( $page == 'ultimatemember' ) { - include_once um_path . 'admin/templates/dashboard.php'; - } - - if ( strstr( $page, 'ultimatemember-' ) ) { - - $template = str_replace('ultimatemember-','',$page); - $file = um_path . 'admin/templates/'. $template . '.php'; - - if ( file_exists( $file ) ){ - include_once um_path . 'admin/templates/'. $template . '.php'; - } else { - echo '

' . __('Please create a team.php template in admin templates.','ultimatemember') . '

'; - } - - } - - } - } // ReduxFramework /** diff --git a/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/media/field_media.php b/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/media/field_media.php index 9fe65770..7fa33020 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/media/field_media.php +++ b/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/media/field_media.php @@ -181,20 +181,9 @@ } echo '
'; //Upload controls DIV diff --git a/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/slider/field_slider.php b/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/slider/field_slider.php index 2d21d67e..9f01dbc4 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/slider/field_slider.php +++ b/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/slider/field_slider.php @@ -310,7 +310,7 @@ value="' . $valOne . '" class="redux-slider-input redux-slider-input-one-' . $fieldID . ' ' . $this->field['class'] . '"/>'; - // LABEL output + // LABEL output } elseif ( $this->display_label == $this->field['display_value'] ) { $showLabel = true; @@ -321,7 +321,7 @@ name="' . $nameOne . '">
'; - // SELECT output + // SELECT output } elseif ( $this->display_select == $this->field['display_value'] ) { $showSelect = true; diff --git a/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/typography/field_typography.php b/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/typography/field_typography.php index f92b7a7a..abb3350c 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/typography/field_typography.php +++ b/admin/core/lib/ReduxFramework/ReduxCore/inc/fields/typography/field_typography.php @@ -687,6 +687,15 @@ $value = "normal"; } + if ($key == 'font-weight' && $this->field['font-weight'] == false) { + continue; + } + + if ($key == 'font-style' && $this->field['font-style'] == false) { + continue; + } + + if ( $key == "google" || $key == "subsets" || $key == "font-backup" || empty( $value ) ) { continue; } @@ -728,6 +737,7 @@ } } } + // Google only stuff! if ( ! empty( $font['font-family'] ) && ! empty( $this->field['google'] ) && filter_var( $this->field['google'], FILTER_VALIDATE_BOOLEAN ) ) { diff --git a/admin/core/lib/ReduxFramework/ReduxCore/inc/p.php b/admin/core/lib/ReduxFramework/ReduxCore/inc/p.php index 3bac3325..5951701d 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/inc/p.php +++ b/admin/core/lib/ReduxFramework/ReduxCore/inc/p.php @@ -208,7 +208,7 @@ curl_setopt( $ch, CURLOPT_USERAGENT, isset($_GET['user_agent']) ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'] ); - list( $header, $contents ) = preg_split( '/([\r\n][\r\n])\\1/', curl_exec( $ch ), 2 ); + list( $header, $contents ) = array_merge( array( '', '' ), preg_split( '/([\r\n][\r\n])\1/', curl_exec( $ch ), 2 ) ); $status = curl_getinfo( $ch ); diff --git a/admin/core/lib/ReduxFramework/ReduxCore/inc/tracking.php b/admin/core/lib/ReduxFramework/ReduxCore/inc/tracking.php index 65fdd514..a5501cca 100644 --- a/admin/core/lib/ReduxFramework/ReduxCore/inc/tracking.php +++ b/admin/core/lib/ReduxFramework/ReduxCore/inc/tracking.php @@ -67,15 +67,23 @@ } if ( isset( $_GET['redux_framework_disable_tracking'] ) && ! empty( $_GET['redux_framework_disable_tracking'] ) ) { - $this->options['allow_tracking'] = false; + $this->options['allow_tracking'] = 'no'; update_option( 'redux-framework-tracking', $this->options ); } if ( isset( $_GET['redux_framework_enable_tracking'] ) && ! empty( $_GET['redux_framework_enable_tracking'] ) ) { - $this->options['allow_tracking'] = true; + $this->options['allow_tracking'] = 'yes'; update_option( 'redux-framework-tracking', $this->options ); } + if ( isset( $_GET['page'] ) && $_GET['page'] == $this->parent->args['page_slug'] ) { + if ( ! isset( $this->options['allow_tracking'] ) ) { + add_action( 'admin_enqueue_scripts', array( $this, '_enqueue_tracking' ) ); + } else if ( ! isset( $this->options['tour'] ) && ( $this->parent->args['dev_mode'] == "true" || $this->parent->args['page_slug'] == "redux_demo" ) ) { + add_action( 'admin_enqueue_scripts', array( $this, '_enqueue_newsletter' ) ); + } + } + $hash = md5( trailingslashit( network_site_url() ) . '-redux' ); add_action( 'wp_ajax_nopriv_' . $hash, array( $this, 'tracking_arg' ) ); add_action( 'wp_ajax_' . $hash, array( $this, 'tracking_arg' ) ); @@ -84,6 +92,78 @@ add_action( 'wp_ajax_nopriv_' . $hash, array( $this, 'support_args' ) ); add_action( 'wp_ajax_' . $hash, array( $this, 'support_args' ) ); + if ( isset( $this->options['allow_tracking'] ) && $this->options['allow_tracking'] == 'yes' ) { + // The tracking checks daily, but only sends new data every 7 days. + if ( ! wp_next_scheduled( 'redux_tracking' ) ) { + wp_schedule_event( time(), 'daily', 'redux_tracking' ); + } + add_action( 'redux_tracking', array( $this, 'tracking' ) ); + } + } + + function _enqueue_tracking() { + wp_enqueue_style( 'wp-pointer' ); + wp_enqueue_script( 'jquery' ); + wp_enqueue_script( 'jquery-ui' ); + wp_enqueue_script( 'wp-pointer' ); + wp_enqueue_script( 'utils' ); + add_action( 'admin_print_footer_scripts', array( $this, 'tracking_request' ) ); + } + + function _enqueue_newsletter() { + wp_enqueue_style( 'wp-pointer' ); + wp_enqueue_script( 'jquery' ); + wp_enqueue_script( 'jquery-ui' ); + wp_enqueue_script( 'wp-pointer' ); + wp_enqueue_script( 'utils' ); + add_action( 'admin_print_footer_scripts', array( $this, 'newsletter_request' ) ); + } + + /** + * Shows a popup that asks for permission to allow tracking. + */ + function tracking_request() { + $id = '#wpadminbar'; + $nonce = wp_create_nonce( 'redux_activate_tracking' ); + + $content = '

' . __( 'Help improve Our Panel', 'redux-framework' ) . '

'; + $content .= '

' . __( 'Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.', 'redux-framework' ) . '

'; + $opt_arr = array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => 'center' ) + ); + $button2 = __( 'Allow tracking', 'redux-framework' ); + + $function2 = 'redux_store_answer("yes","' . $nonce . '")'; + $function1 = 'redux_store_answer("no","' . $nonce . '")'; + + $this->print_scripts( $id, $opt_arr, __( 'Do not allow tracking', 'redux-framework' ), $button2, $function2, $function1 ); + } + + /** + * Shows a popup that asks for permission to allow tracking. + */ + function newsletter_request() { + $id = '#wpadminbar'; + $nonce = wp_create_nonce( 'redux_activate_tracking' ); + + + $content = '

' . __( 'Welcome to the Redux Demo Panel', 'redux-framework' ) . '

'; + $content .= '

' . __( 'Getting Started', 'redux-framework' ) . '
' . 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' ), '' . __( 'our documentation', 'redux-framework' ) . '' ); + $content .= '

' . __( 'Redux Generator', 'redux-framework' ) . '
' . 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' ), '' . __( 'Redux Generator', 'redux-framework' ) . '' ); + $content .= '

' . __( 'Redux Extensions', 'redux-framework' ) . '
' . sprintf( __( 'Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!', 'redux-framework' ), '' . __( 'extensions directory', 'redux-framework' ) . '' ); + $content .= '

' . __( 'Like Redux?', 'redux-framework' ) . '
' . sprintf( __( 'If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.', 'redux-framework' ), '' . __( 'leave us a favorable review on WordPress.org', 'redux-framework' ) . '', '' . __( 'donation', 'redux-framework' ) . '' ); + $content .= '

' . __( 'Newsletter', 'redux-framework' ) . '
' . __( 'If you\'d like to keep up to with all things Redux, please subscribe to our newsletter', 'redux-framework' ) . ':

'; + $content .= '

    

'; + $opt_arr = array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => 'center' ), + 'pointerWidth' => 450 + ); + + $function1 = 'redux_store_answer("tour","' . $nonce . '")'; + + $this->print_scripts( $id, $opt_arr, __( 'Close', 'redux-framework' ), false, '', $function1 ); } /** diff --git a/admin/core/lib/ReduxFramework/class.redux-plugin.php b/admin/core/lib/ReduxFramework/class.redux-plugin.php index 6bcac6ab..9ea16799 100644 --- a/admin/core/lib/ReduxFramework/class.redux-plugin.php +++ b/admin/core/lib/ReduxFramework/class.redux-plugin.php @@ -25,7 +25,7 @@ * @const string VERSION The plugin version, used for cache-busting and script file references * @since 3.0.0 */ - const VERSION = '3.3.6.6'; + const VERSION = '3.3.9.1'; /** * @access protected diff --git a/admin/core/lib/ReduxFramework/redux-framework.php b/admin/core/lib/ReduxFramework/redux-framework.php index aaf1cda4..47f5cdf6 100644 --- a/admin/core/lib/ReduxFramework/redux-framework.php +++ b/admin/core/lib/ReduxFramework/redux-framework.php @@ -12,7 +12,7 @@ * Description: Redux is a simple, truly extensible options framework for WordPress themes and plugins. * Author: Team Redux * Author URI: http://reduxframework.com - * Version: 3.3.8.5 + * Version: 3.3.9.4 * Text Domain: redux-framework * License: GPL3+ * License URI: http://www.gnu.org/licenses/gpl-3.0.txt diff --git a/admin/core/lib/ReduxFramework/sample/barebones-config.php b/admin/core/lib/ReduxFramework/sample/barebones-config.php new file mode 100644 index 00000000..49730796 --- /dev/null +++ b/admin/core/lib/ReduxFramework/sample/barebones-config.php @@ -0,0 +1,249 @@ +initSettings(); + } else { + add_action( 'plugins_loaded', array( $this, 'initSettings' ), 10 ); + } + + } + + public function initSettings() { + + // Set the default arguments + $this->setArguments(); + + // Set a few help tabs so you can see how it's done + $this->setHelpTabs(); + + // Create the sections and fields + $this->setSections(); + + if ( ! isset( $this->args['opt_name'] ) ) { // No errors please + return; + } + + $this->ReduxFramework = new ReduxFramework( $this->sections, $this->args ); + } + + public function setSections() { + + + // ACTUAL DECLARATION OF SECTIONS + $this->sections[] = array( + 'title' => __( 'Home Settings', 'redux-framework-demo' ), + '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' ), '' . 'https://' . 'github.com/ReduxFramework/Redux-Framework' ), + 'icon' => 'el-icon-home', + // 'submenu' => false, // Setting submenu to false on a given section will hide it from the WordPress sidebar menu! + 'fields' => array( + + array( + 'id' => 'opt-web-fonts', + 'type' => 'media', + 'title' => __( 'Web Fonts', 'redux-framework-demo' ), + 'compiler' => 'true', + 'mode' => false, + // Can be set to false to allow any media type, or can also be set to any mime type. + 'desc' => __( 'Basic media uploader with disabled URL input field.', 'redux-framework-demo' ), + 'subtitle' => __( 'Upload any media using the WordPress native uploader', 'redux-framework-demo' ), + 'hint' => array( + //'title' => '', + 'content' => 'This is a hint tool-tip for the webFonts field.

Add any HTML based text you like here.', + ) + ), + ) + ); + } + + public function setHelpTabs() { + + // Custom page help tabs, displayed using the help API. Tabs are shown in order of definition. + $this->args['help_tabs'][] = array( + 'id' => 'redux-help-tab-1', + 'title' => __( 'Theme Information 1', 'redux-framework-demo' ), + 'content' => __( '

This is the tab content, HTML is allowed.

', 'redux-framework-demo' ) + ); + + $this->args['help_tabs'][] = array( + 'id' => 'redux-help-tab-2', + 'title' => __( 'Theme Information 2', 'redux-framework-demo' ), + 'content' => __( '

This is the tab content, HTML is allowed.

', 'redux-framework-demo' ) + ); + + // Set the help sidebar + $this->args['help_sidebar'] = __( '

This is the sidebar content, HTML is allowed.

', 'redux-framework-demo' ); + } + + /** + * All the possible arguments for Redux. + * For full documentation on arguments, please refer to: https://github.com/ReduxFramework/ReduxFramework/wiki/Arguments + * */ + public function setArguments() { + + $theme = wp_get_theme(); // For use with some settings. Not necessary. + + $this->args = array( + // TYPICAL -> Change these values as you need/desire + 'opt_name' => 'redux_demo', + // This is where your data is stored in the database and also becomes your global variable name. + 'display_name' => $theme->get( 'Name' ), + // Name that appears at the top of your panel + 'display_version' => $theme->get( 'Version' ), + // Version that appears at the top of your panel + 'menu_type' => 'menu', + //Specify if the admin menu should appear or not. Options: menu or submenu (Under appearance only) + 'allow_sub_menu' => true, + // Show the sections below the admin menu item or not + 'menu_title' => __( 'Sample Options', 'redux-framework-demo' ), + 'page_title' => __( 'Sample Options', 'redux-framework-demo' ), + // You will need to generate a Google API key to use this feature. + // Please visit: https://developers.google.com/fonts/docs/developer_api#Auth + 'google_api_key' => '', + // Must be defined to add google fonts to the typography module + + 'async_typography' => false, + // Use a asynchronous font on the front end or font string + 'admin_bar' => true, + // Show the panel pages on the admin bar + 'global_variable' => '', + // Set a different name for your global variable other than the opt_name + 'dev_mode' => true, + // Show the time the page took to load, etc + 'customizer' => true, + // Enable basic customizer support + + // OPTIONAL -> Give you extra features + 'page_priority' => null, + // Order where the menu appears in the admin area. If there is any conflict, something will not show. Warning. + 'page_parent' => 'themes.php', + // For a full list of options, visit: http://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters + 'page_permissions' => 'manage_options', + // Permissions needed to access the options panel. + 'menu_icon' => '', + // Specify a custom URL to an icon + 'last_tab' => '', + // Force your panel to always open to a specific tab (by id) + 'page_icon' => 'icon-themes', + // Icon displayed in the admin panel next to your menu_title + 'page_slug' => '_options', + // Page slug used to denote the panel + 'save_defaults' => true, + // On load save the defaults to DB before user clicks save or not + 'default_show' => false, + // If true, shows the default value next to each field that is not the default value. + 'default_mark' => '', + // What to print by the field's title if the value shown is default. Suggested: * + 'show_import_export' => true, + // Shows the Import/Export panel when not used as a field. + + // CAREFUL -> These options are for advanced use only + 'transient_time' => 60 * MINUTE_IN_SECONDS, + 'output' => true, + // Global shut-off for dynamic CSS output by the framework. Will also disable google fonts output + 'output_tag' => true, + // Allows dynamic CSS to be generated for customizer and google fonts, but stops the dynamic CSS from going to the head + // 'footer_credit' => '', // Disable the footer credit of Redux. Please leave if you can help it. + + // FUTURE -> Not in use yet, but reserved or partially implemented. Use at your own risk. + 'database' => '', + // possible: options, theme_mods, theme_mods_expanded, transient. Not fully functional, warning! + 'system_info' => false, + // REMOVE + + // HINTS + 'hints' => array( + 'icon' => 'icon-question-sign', + 'icon_position' => 'right', + 'icon_color' => 'lightgray', + 'icon_size' => 'normal', + 'tip_style' => array( + 'color' => 'light', + 'shadow' => true, + 'rounded' => false, + 'style' => '', + ), + 'tip_position' => array( + 'my' => 'top left', + 'at' => 'bottom right', + ), + 'tip_effect' => array( + 'show' => array( + 'effect' => 'slide', + 'duration' => '500', + 'event' => 'mouseover', + ), + 'hide' => array( + 'effect' => 'slide', + 'duration' => '500', + 'event' => 'click mouseleave', + ), + ), + ) + ); + + + // SOCIAL ICONS -> Setup custom links in the footer for quick links in your panel footer icons. + $this->args['share_icons'][] = array( + 'url' => 'https://github.com/ReduxFramework/ReduxFramework', + 'title' => 'Visit us on GitHub', + 'icon' => 'el-icon-github' + //'img' => '', // You can use icon OR img. IMG needs to be a full URL. + ); + $this->args['share_icons'][] = array( + 'url' => 'https://www.facebook.com/pages/Redux-Framework/243141545850368', + 'title' => 'Like us on Facebook', + 'icon' => 'el-icon-facebook' + ); + $this->args['share_icons'][] = array( + 'url' => 'http://twitter.com/reduxframework', + 'title' => 'Follow us on Twitter', + 'icon' => 'el-icon-twitter' + ); + $this->args['share_icons'][] = array( + 'url' => 'http://www.linkedin.com/company/redux-framework', + 'title' => 'Find us on LinkedIn', + 'icon' => 'el-icon-linkedin' + ); + + // Panel Intro text -> before the form + if ( ! isset( $this->args['global_variable'] ) || $this->args['global_variable'] !== false ) { + if ( ! empty( $this->args['global_variable'] ) ) { + $v = $this->args['global_variable']; + } else { + $v = str_replace( '-', '_', $this->args['opt_name'] ); + } + $this->args['intro_text'] = sprintf( __( '

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: $%1$s

', 'redux-framework-demo' ), $v ); + } else { + $this->args['intro_text'] = __( '

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.

', 'redux-framework-demo' ); + } + + // Add content after the form. + $this->args['footer_text'] = __( '

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.

', 'redux-framework-demo' ); + } + + } + + global $reduxConfig; + $reduxConfig = new Redux_Framework_sample_config(); + } diff --git a/admin/core/lib/ReduxFramework/sample/info-html.html b/admin/core/lib/ReduxFramework/sample/info-html.html new file mode 100644 index 00000000..79fd45fb --- /dev/null +++ b/admin/core/lib/ReduxFramework/sample/info-html.html @@ -0,0 +1,68 @@ + +
+
+
+
+ +
+

Info Field with Raw HTML Flag

+ +

If you set the raw_html flag to true, you can embed any type of content in an info field. Then you can have all kinds of fun with Redux!

+
+
+
+
\ No newline at end of file diff --git a/admin/core/lib/ReduxFramework/sample/patterns/tree_bark.png b/admin/core/lib/ReduxFramework/sample/patterns/tree_bark.png new file mode 100644 index 0000000000000000000000000000000000000000..5efc869ba152b34ad606e6d85dc5f17210262d9b GIT binary patch literal 42360 zcmV)eK&HQmP)0003{P)t-s=H}(+ z=jP_+v42@9^;O>FMe5@$v5N?&s&{=;-I_>gwp|=FDh2 z?CR?2^78WX^7HHK>gVR><>lqG1LK z@$vBR@bByD>hACF@9^;K>+9v_K@bB;N@bT*F>hA6B>+I|A z@9^>P@b2#K_4fAZ>go3O_T}Z~?CtF6=jiV5?&#_0=jP|_?(OU9>+J3A^6~NR?e6L5 z>F@CG=ji9@>gww0>g(+6=I7?^?e6vU_4W1k@9yvH>+JIJ^5y2{?dI?eOpL z@bU2U^z`cM>+0(3=jiD1^6}>8=jrL{=I7`3_4erL>Few4_VxAX=;`zG^7Qrf_V)GU zIFvodo1XI1?gem(-XGHV!6Rr_DoJpR|et^;uC&t^ZeGS&Zm zVdB^V^cG-92zkvXzx~}OpTPh7ua7?Y-G3d&*2V~J9J`6e)qd3f?YE!ohy2$^|MkfV z?zIm6ag10Y95Y&qPw>GXee}ux`d|BpZ(%v{v5a5**Vpjc{mVasZ|C#?OUO57q3cVK z#ES`s{tiatqd)pTf_r!%K#n(=e|+-M@AlV6zuW)(sKGU3>@Sj-ro^B#xO+f9`s9E8 z7M_h)hr_L<^^JMHJ-!si{`R9!GDM-!i)CWt2NHSO%VY0~qT}NNM&LMkIUu5%b8=z9>SK>r@YfA}Ay_!y9seD#j7ZgPa2bptdb5^rY?Ih7CV`W$(?Wpo z2;N$Ajw2!hqM_LeLJ>xSlMsmD(zRR)xOQO^+F>w~!RS3)9cKxAn#gnr3`ca;g z2Uh{J(#z8S_3V%7ct&zD$tDCn!OJ*Ux_e++8%K{8pk6S%j4eSGage0q)v~dWosB0M zAHjccPqk3);n+kqN0BbWE!~gkweUQFAYr;Aa0S}s{f*S^R2_vE?!#~Fk zz17&QV?h|AH(6ZD>;#y(icPGL67k#mj{s`K$Qt1@)2DscOw%;fL%Ro6m+z1q^d7;# zY-o=h5LG}ZL*EUxG3z5^0a`1QKqOBBs6hSQn$U}UPnK>GQo{rM#Y`8K2Y?l>PLF4B zl_0jV5AhOw_44|N2{B$At%aiU|7YiTpJlc&5ul2S*({nY-EGHi)s6jV=;<|*gUqZ) zAnQ~}Da$QPPv{o_XLyxE>=tI%uZCf0+aYgSW+Nx^UVJsIYqI_xe%)V1Q5rp5V<3G+ zuUs#x#n26vF|l13^EvaV5WOSbKF;%1mZmpnZ_CLpgfuOXv!Yk;vFpJwr8BYH18SHN zx*;ph`rTO8i>iW&^ZCZx;%DWLIK^mgW1DA;m-{KUgkD@Rxk}m&aXp@8S^4&1jSEfG z!)uw+B1aC(eH;&&{5!3gh)#TF7S*^ycIdNtp0jLgM0z3CU>UtW|D9V~pB>KyT=U#B zdDb+BcU(`W^ia+SNikMh^FECHuV{t`bN#e^C5Lcv^j4VX2UZt>r^>8`0^_mDvjyE{M zl5`pFwdHRXvHdvXBX8LFM@ZuU>=4A(NO_d2r~5 zwMdx-(6xC2f}VreNe+6;lIDniGAIDc8_IwdbLNZ4UMeFv)njNe$$7bydA7*zOg_{& zL8XT1czMcuMdba16IqWY0aqFOOOoFI`L6r9PMlm)1_#OoNg#y&5L;MoF93D09SR9R_=-UfF!6M=;C&wUTzvEqnK5%X#ceJkNz5CJmI9iB)$DsaKZeG?ncs3yzRI574_}PB3WLQ$LOWgB9);5n$uv}{^vq5A20_!=6$7@*zjs$ zX*~ak;5d(!H=!Y7-mgIstQpbCs6ks%dJo=EKNTZEFbIX%xVF3j8|pPF6FF%_2@-1?Tm1 zB;21Kx@M^BiUu-O06LlEz7i+kF$0UK!d~3qSo(K zmkGzLy8`vRtD?w0$gZ=id7jG_C7;KV&RoH4*5kOkU3Gn09H;Fby3D5ZN@Q}=3+31e2P!?I)pVf=}6S19u-joFB)vF@~ zaQYiF$D+vgWOKZ{nih&)M8wH)$}Fe*J1WKX`w!FftnV%in+F(gYSDqO%Qz+$_`{p7 zsp)uGtReul1-r=~GGu0Q)zi!S;^|yu>8>$+a4H}w7-Y=I;%QfwV_p%$h%N0zGXLVKH0-Vit)QTb0=Dnkb`DQmb zTk6f@qar5!+{~~_9kI47+E3<1I=1`Uy5rLFN%`w0{YOs9m|#}X8$|(n>zG7DGW_sA zrY}}CVCQI8fSGDdNZ>=bG6qamqRl37Gom*z18r0-1sGTvO}9g}XMXKipyXgZ@utn2 z%a8Ng_}0;eS)^XM9BWBstf+6RaWu4FS?1E$$Hn)1MA(Jd{^j_%7xY>*{yUbg6O9{>5=5pYYn{dQ3PifRoM|sx zGF*u4;Ms?HS!@9p4b)uBXf?3vF~$pR&|d{IFF{B46qyrZ!|n=r$gup*>bkjsacG{Q^; zV++!jwKBCPRiRLTwdyJ04a`gO_tPj8NmeZOsu=!Q0Ip8Ux+89q2|7lhk4HEl-u*uLuWJT5~4tK@RYRLCI7V-Lx$Mz;~sTKyF&~7*Q;r38)=#eoJ#EOT!kgWrwOIjPTUZ`0X)j0Ub6o+zpE4m`DIAOUf{I`GU z?HpTGG*Ivp^hal0DybQ(iu$Rq@r`1F5AN^uODdQ zPn5)%k*G{P(n9F9)i=Y%w6XQ&P2{8UdT|q?CQD}T1mQho>HJ0;fKm8wKdCe$f#xtic>z4!CY3b986TUBSbAh!M>l{XOua(gwGTX9LU62v&tTELPXwk=9nM4DRb4JD-=rS91n*7&eJa&Me-A$CMnV z!adA*muA<+4C(@W@)*4-(|gsb6=8iq4r z%hG;YGso=dkT{jNfZ6alTs_~lNDafYv5LolIZOa75g9XT)ZXSI{TGAN6IX5IM4g_F z2pf+*(P(`1ZVJ)6WG4t=H(8s7%`<{3TN%3{Um`zIsNsnBX8Y%sQCQusff}6qn=}u# z*}}#sXS{ovbp{9%&3j46Os5J5$P{>^^R`H^tU0%y$5( z3_bG$ZW40Jwasle)j$iMGI|4nuUN}H55+D&GWDv=8VlgkKva(NgbrZO9-5D3*>|m> zGg_!Y&!I8l19r%EH88uWFNe4a(3|QRsUB_JMCwb7f?c69d|DJ)-^MY)tIB?@7H%tefYP$#5mjcQdw?gtKM-snQQyeQ~4A6>N#HI z30ue8xvY|eCW#*{N$09+Cg!^3+c=v_K+4a#1B{=S>?i(zQZ z(Gi7H>e{sgr4y>>8qoxkQLhD|S6TFkls{~zdW|NRA+2M=oV7_p_m(_X-E(WSI+4*v zgv2n^F5@k5nZCeR&Ao`Ij>-nlpSvVqMP2dvqPvo)cPSXYWtm0HLEnu+nERohTBTkE zrCXRaNqLqXq#GE#^BHtO7LHad{PXq4!gN@JjdO-nR|K)dK6N@`Ff!2h$5EW9DZw^f zXb^#{2VTEFP+kW-d(xs2Wds4Yy}xr(r>WM{s>}0#CA1o~ zjIKKOInyL+QahfM{X^Fh!f5;kb%HY*tFfiAIU9!`x<)K8L~cD}fT%%~ub~I2>1-*cB-X!w}GFEZ+cQ(C6Bp z0_v^lQG|TNtoVtQ)>1_-vsD-^r>mP<@4F>?+6Run6<%IJ7xaEA_L_$LhcUie=hYIt zq>aw3k}zz>#Bywj8Nv%27H}C98s{KC@hA0H%T{13=#2>@YNekJ%(5%xGw>gS&SAJq zjHUsz1beU-fU=`EQnR&SqQj74O2{1B5@ZS#eFmb z_6ZZwxrr0U3BqW84gdHvgR1C-H+u~FQykX#^5!;i0RVBr@#xONldxJ5UMpEK38dp` zW+8fEgqWvHMWpVnh-yKs8Q-gYQ~9(7t9zst?D3J*>%Pg-wFmC~M#%D0MlW8rDtvG& zT2NjFM_-A9i6umJ*?{q1nFzVB8~9-G<*cpvD3Zh`n&;yzjaE}#6upV!HHJG|lnd^H ztd1Zyzp7Lla16WW!;+yc7J>LkcB1&eU%y?rNJQBRidkV&p7tntHu@#0KS&KS>ZuV( ztrs#OS`J^GhCjh^To{_qu+8hWY4h&GEazkeef^(4AqK%mlp=+cIXu=gKaFXnG8kN0Kj87;=Fz zElzGD2{(Sy&jQ9PyN*V-x_4QY{dixTUyTN*II0~5;1wJYdYL5rLv$4d(dmUj<8Q*@Si4w#9qYUjEjsd6WV0Uo)yH}MFMXD+tO|ULUPD$jWeqMI zuDWO@IxiY!Wbk7)JR#8F$8Iu`;c??-D|D8e&iP5-_|b7lp2m5$eG}?uF>ALKXz=Cg zE4EcPYCu>P3sTrk_p97+7M?^-o0eRWJU(L6%e-birXAC(*G0B9a7Wsy5U2y&l3~wT~I$sXqKHaxhD}7 z;&^ELqPW|26yad1q4`yL))0CxL(9tynH8)nnu;wHoTugthqo-WRb!T&tn#%e&|kIF zxT{IbPnUt8xL3}61lg@}B1{Y_jJsmTO0`Pw-VH~w7X-Cyg}1k-`_Xf@8{%D%jv;n! zkxX_P5O@49D(csN$j}Hsp98Hvefv58g_ol!ryTM7l39|5X%gA^N8pwGVgJ}?1z6{^ z{Z-6SG?${44UE>b`w>aAMom~;Y#MysN9b`}N`fW+9oB6R)7jU3e^UPbZ^iK+zi;`z zFZj7PXUEYg#6DU_-Cm%BJ>oTh|F4-`kjjpKJ1na5>?S?iy}2+P4GR<5gZd7vg;c9mBs^6)lIps7XY$wsB+_$LD&ADwW#P$~mi?jl5o(f^r* z$|W&tVzR_>Ad6SKS(kd!cp~-1qua)#UYa!T@r^rxIrmJMR=t}wl7knOonCrukE(^; zGg0&7Acxe3IaNS`R)}GVpm;12-Y>h3Y+D>!1-pE6sJ+TgK^!SDFu3>>RVQLmOnV=_ zi3p;CN}i!F0#{?<>&3T!^#yzSKg#?Ms^M`D%q&Ai-prG~?s zIJS9ZEelVk!a)*k#dEOh@u^4;g5FrzU1AeapI(z1#$z-`&Wl-d#u~)2;pfUqTM8o4 zsJX*%8c2wT$0iQLZ2M6BSyfA!icsj%W%lwGqaasrLMHa|}a3qnZ48a|WW%2$#+vBh_L;+6{t4Q#{6>88DGD?|?i%6m!ks3@kXW#dI z`D5{q8du7p!m@FvB=o91f%!@PMN?OCY^sY65)hJ(Mra^U`>Qf7K|XLPd20H#BA}|7 zUIvVl;k4=o_`E5cV<$zi;t167tREJON<}R_yUK_(wn&WwxYdWovLnE>YrA+dQl2A> z%i&Jb7ki|9_ZHKZRe_iNq~OwKTeBe{X*KzHz5lj8ck*6}2L$o!xy)mC2oURI_VP6- zAsRcdbJmV=`Nu4~&*tM9Jwum{VwM*)LQB|a`kiwS)i}}*%4RGzb5Ztv|2&(E90KT6 z)VYIwwLw!P?pH(4wPNH{bwyWtloCW$mhEnvW;LD_X%#Ovo##FzRGA@n6&mCWc6vGGqx&6_^Ojjblhl<VcL{tu&eMR%_{yvm&kH35uV$UfS}c35Df}0e92>v z=N?tqTvuW64+Rkc=*wMoXh5A^@Q-;J5wkiUtI#)@s(7i!e0~+IC7P}67;5n)5UvE- z)jwb6l}G~T>cjKAWoky{b*a~MR^TpDlBm5*Be z(9_TLl$4E`phVueP~23r)MNIwtvMcQ=+3sRUPX~w)LGe9)~^NFOyQ^aTT+1(vwTN; z`K*m?qMJ=%t~nMXf!o%#k;66FIxXnVXNGK)ZHjruc&bdcOe)ks(@a&{mHI#=%vUpV zbUjZJfR>?XpJ&;t^n(}2$FDvY+e=UZ;&gBhJXLS7bk;jxHl{-|L2x0rVw?86U7x;Q z9zQoE%9TN(qUZ}h_9qA=D^&Gxo^erb+g&p?&8okjk4L(v)$kC6dyw-iU@R0Kui(mV zP%^Hz>GgHiPaBc=GPT^%O;!m(UHk-qx*iS^zaiUgh5*!wiGS1J)N~_Hf&|&6qC<;| zpFKOO$gd3s@dGoM(@A)xWXY=ViQ9-dQ{qwo7186McVdz%d;=Z^-RxU+;l*NPST}vyKMe8_ zWeaG|9Gl=p*;Z}amTp!B?We?QQ8=P!+1eUup!7Q%G+>CfsA@omBar`}1V#z^kFzGl z!*BaQFoQW-q%&R-H7#j=;d#sCB5@A7#;({R^GK(l7Y0VdR`fG%686GqGLGA5%!RGG z3y~y7%^4*00)~iubeslSAf_tj7hcX+?C~islJh7EDy-%v|Bp(&r5?d5J<4iusPf}b zM!jM^Hm!lwAcna0i+>>XGUZqou%U6o#3gBtmLRa6YOY#PRLcG(j0Ochn5o$QAd+#% zD1}V6m|R~3!5c7EO1(^rz0LBivj9j8tL(eAL>(m%8)8)A1D|i z#vB=^Bw1HhZt$=Ux<%c@`;BTd+Z9NfMPUJ1kVE2gG8t^3#}f+OK-M3I`CmoXIb zLtyt4!#9v#_fy-A;8yNUZX02{A#}S^@wPO%?t8 zSfLO!0Q)|)NNRJn&&#H*-0=1ijGAx!!m7+0>B)rN(6kaeB}hFdUyXfkBn$@&aX@57 zMnkBSrdxcnO%p3oBs@;T1M|}Gj@`QQtu~aAA2FsHOUZmepo?`Hj6~Ci*B0Do@aa{S zmSvjF(ftI8Bs0740KLrAy)13b&LuWQI=pYw0cSutA76dgk6rhxZ_8}XatdD4R}*@P z1ma3#MK$z8_PmP82^{I5(Z68@vM zK;GGLE-JdT&0MZt36go~jBV3!EtU;b$= z3q(w1vqAJSbxHmpe6vEr|ATWEB?dHt@bu*33;=zK@ifPOM~~=dk%m!@9yx^}YbxVs zPAt=dfY@W5H>)N$9HrLy7MfPWsA8K0=_S0k8|F`X)iez3n`POrTCQsJp|=Qc10RVY ztl&4Yoqb5s_OcN6&^`^ zl+l}coqRrhBC!5Hx2*`39{8@vjpPhQS)#!UgiPWSg zH3_8Shz3L!<@#tz+GFVANW>hcv2&50*=g)-5@T7@30QSfg+NtZz33iVUYw86#@5f9 z&#j0#dD$*FNqefCQlXjEiijNW<@~Y|wQCB9o#rRsIVog4=DBEi{d`UzwtZThzyZR=;%r=o;F6CtQ4v)R#G17vEzQQH)t{eD z`LHUlM$w-D8+>A_!$RZJx#AkS(LhZI%k78;+WqD0!K~ML53FD744x<>^C-xw851|L zjgS20%``XdqDal6ozq=Tg0%2U35g?EHBK=JQWa=d=xNodtc%5b=HdiZ0u`ffd^?ez zL7GIu56=CabLDGx(>(?|<%9xQHn04fE=o}yYAcT`ny$QxEf?7gb(GIqx70vpciwYp z`_mK^SR&yd=>7v1a_K0|Y2?QGcA!pB5HNN2Gx_ebt1z5i1xK)lR#MGQ1SlG=an39j zgoY)mjpNRsDAMSE1RWeEof`>*lOsbc84(u^L4nV+N&LsycdGd#;Ccdt z)WDBZu&1E%CuY=1g=0gf{l+E)Y#6Yrm}psovA%FO^2f5Wmh6$#wxcaqLX8G0yhigG_b@*v4Sv~tpP?`@>w~R+WMeJZDyIe)3{A|`21kGZ)Win~3ozFyq(sSP^b!0*G7 zd68(!&{BWcvbC|Ert3A%Um-E9w1rorlNX`H+T7Fg!DA#kk5GeV{R6^D#|+V%TI+Fh z%YKD3TrlBx7Y;Ul`ICj|R&8zCd{t(f@hH`XoN6=_^A@{m5zy(l`|Z}-u$?w#4hiCX-* zxc5b$ou7a378S(=c~t)sy2_R=ycEVBL7Ak!yeWTr!mbs)cK#`{q1H|L$pinV~;{A1=3H`FacGc<=EjCUZjDOhe@)n4kUrRiL%i+S3Ay2yxXC;TC+v7Gu1r z$4rA-s_9`ju5u&tc&ZP@EH&d|Ev+$hbowcN^^9|S{Q%L!g$tmz>s5JklYZN^Y~XGV z`v1gqKf~yrho?LR{4FDd)?V}la=;Wu9CfeedHx_BrD9p;mq#nWDB=lv>uI$cE6G2$ zVYEfD0_r%Kk6Td$HMLN;TgqGga; zmXMeu(3&?XIOtd=HkIKMUZZtSk+Vlvu{|1MH7Vu4d(qdV5NNW1R<+1F}QIHyl^> z)6{gUCT~rk-#7=f3S~E!Ht5Iak}m5udn7-V;4NHe}AZ5l?b2oo@5AYJ$que=*>l0 zU$DgJe^HfCBh+#3`vJJiH1{LR1OTf6gp^#NNi(`$a_Zw5c3_Z9wbU)At`J}+VE`6^ z%ese*589rvgs4y#o_kci8b*D67?5nGbd29M$-%Bire33j>WZ@qVf(Akn?97)qBtev z_Po0Kx0)8|j&CU(5^Fh^ItX~oxe15{GwOp09&-*SgiBo*54q+am z1`us17IG9xm$7cwhv=#yPKpLm#)M|p2~|8Y@imFn%AQ>XO^s!&m zj+{XoFMCgZn(wq6N)!zmpd;v&D(VLUtrAhgYZV%OALOY7uT`hR!mLS*+kk09w3g}6 zcXbn%CZ;8})n9xQSZlo`X^xWT=94iyLhisl?0ZfwVGypE96)e&er3#;e*Nf!7%y?6 zeJt9gM15ZidK2X%8vKKUqbW`#dPR)$VJ&qZy^-v;*w0F07WB-kOA!62S&c}&RMTja z#9FK}XKPL*B%fKus~Wyd5WGF9#evMA3H?~8G^gP5ELU2YfKipiyxGF&e{CdY6$Z;; zNcQs7(E|Ne2oSN4hU&%At5wvA%Xh;og%k|mtWb37I3EYKbfkX@dimt~Hn3R|wEXtU zI46UIQ20?Ys)`(>b}%pXuEv{)V3@Ww^GT(KWyE<>E5}0BqKoQ>%6pmG77~|hMB73F ze;ix9`Gl6%HVF;WATC(x#>9XmJt=p&0!B&r2zO?CK*eTs=TG{^YT zGyg|ikI9cdB9RWO{9 zTL{Ie@qj%@r~G@CFdv=xD* zouG`Rs~m|-L5kib8P_7E`7f=f@@^Q4!L>o%j|s{hNW_gFaHa5S+;FKC4-!2(%OI(4 zievA1`n4Ys&2fAm%Xpn5l8U*=>$QtcOhOA(s?qo!j8W9a6iMQ?=S8tHjY%IH_C<;% zyBXEO+(QDUbor)cx%?(>=^>fD5=CE^)@~NhgVuHrvA40RN>+_vMg&a?EVbJ>p78IQ zgol}C7eNz>0@=LB5WIk4MXwYLbm=)7AW1NB5}sZiPRW^25_eXr4k^q`uSO(Z|Ja5T zTdRuBYsR<7JqTJndy3uZ?IyPH{l3O|Xls=afp< z%A!it=s*=QMU=0&x4B?KY-}R_2Ay8%p7&au(=&;F7#J=`KY>66Q>!2AS)ryl22*82 zDMqO1s?la)!6RzL!$Z&tC|=`ViVV)IB>JE##FpO_gZ~njmZ&q+UK{BDfOA47bfnx*AuuTCm zH|o%pScpYiKJU9#bBU0PnrZkX=Gc4Xznx>Cw0PjQx$OnDg;D$<0Pi}dW|g!&W@7?(j8 z_bL8m0U6_Q=L!a%!;>M6W@psG7w*ssC$&q<{$&Z_Q9BCS;`h(#m=SuR#2!KayoBpF zWeRwcS6D*-oKcyv-J0AiPy{T(=7Xf9L~#EG1ayiK(fiYh ztr^p!DE)Vcy83L^00@m@hvvU^#db9AbquP;*8vJHmvDkpWhOkd@+*}{Gj@RaWRxoPQeyZ4XXsv|bsI`&xu%q3N#Rus) zV1}8!j}Q-_ShsytT6Q=l_4e;Wm@U9ZenYe#o&#!7j}!8;=XY-qr9@V3fuv>a=R+8w9)b~n? z%Rdjp$Y&D=Ub#5Y$m8LA?Nba-!LJ}b-Kj*GZ)qf%Rv3{L9|&&}c{5-JqFLRj(}tvS z_4mQ0UdPoTdNY++n9fCEnC^u2-#amn-U=kH5tyjT6rP=&1SrO=R%K+7z8)Q)ZG2VA za03{J2zbj1Nz1zma_#6Gxp;^5`xINNdA?2ouzoT9Yl&=9jSK+Pa0|H|i(|5OwW8Hx zecg+1*a&*#?vb)>4-;b%HglWls5^#BpjNb5%e(OEkQ^>7zni?_3^D`_Dm~^bL~?vD z=O_EN!|pJj>xNy_39In3JF7NaP_ck@L^Lze zM}HzZapo#NA#ST(_V5;JHm)G>?|E>NmkeHLhZ6L{c%$Rh_N<9BQW|nW1h#a>MXSYN zDidq?p?Ft1n3}HymA(Vq^4eIlExh*2ch-vIEKC4)b1+wWv@s~6J!(V^pTElQ1{dk5 zzDdV{4eG~&UJZ>73^ihwdw?36vJm8531D;|uy$;|d#qIm_wcX6mjdS6gV7ozY?@)= zKE(n3M&Al3hz<#Y>Vheqh+$WT%2>x9OyRGYbjnw&gq-$QzGgSqYL1qZ-k6{2i@X`j z4=M0qq_JTmanW|I%iHRXeV*4b4Y01tG4kz2zS=!6*Ea0ZNMw|W^(n#Oa+jc2+X6au zyz)YOt9l|*L2$#2ORKR;bfdIYR=1=k;ki0=)Wf0rp}`YW!DUW$&3psC6d}s;cnRd) z39rGM>!+w)9lu_!@u=AmZq+lDv(YjiT+WMG+fkPwI*l4BmCfq5HRaVjqfHM|tu^dK zuaen#)!>PR096jXnjfs~ajI%z^KSbY^eO%~>QkJ=y@v)wMb3a2yq6bSi5!1)EGQ&m zRI9q}*!ShD;(YEaIQoqq0HU6={mH<+e0ku)*n$tdPn8VJM16{zN<$9)g^T7j3y9U( zt|kBSZu|=1^O^AGdd04q1`v{M z@fr3hKFb=)Jy4A%_iXrV7G3A7Rg+f)x==%;?UOpuN{_Pawl#JBEIX0SCfSIoUq=1A@qcMR&TwV7 z9Q>omDup>abQ&*1mg4_js@IC|QCW+^=(zE(0vu8C;41&zSdz$M@;WB&Og=~>rA^EL zORGC;r9i*nYs3?;&0B<4)BK&5X%)Td1g42loz$^8LNR6pFhw+*f7)<#CP!CUH+_DE zfU6K+SnJlLZnoX9zlm71^5~uege^hE zd#DzbH3YSyBrNA9RtoDGI}nxYb3cf(!@JuIqG`(VtZCjDf`MsQ&>IBcAmwb7S>gB5 z51%N^2ISCPxt;R-Vwk4eA7DAS-8wC)^g9>Z9~Ev_&ni7$ixPvE?;XOGm%HXaE{366 ze3{nluF(+4Gk?*R5bkDHYnv>L_F%9;4t{)rv`6{)4mZnu)5L;Z%R4W3gPmSFfhe*z zeia*Q<{(*|mbDrS%C3DnGTYG*iSG|g4&T^n9mKU->GZ1CHPL_TyuoQMOh;}VcxwvC z1#fg^e}vxP!2TE7;bhtS#Bo1Q8GGzx8Wx+fI7_b^T!@72uOeVbn_0Pze(6?u>%6<- zb5wY>OpeX3?#t}Vz&K}wse+I~LPuVYYsQ`aN_DeoMHtS&W+tb_^_ z2tY-m9$m!mRR!i2E2TIbI}IW)ds!w_eG*Z@;1m8mArGl~(H>|jHndwopeRBsOAC!@ zBu&CpFwi|$9p+xXFdnjPGp!dc6qh3zz2}ywvMZMngjvZ4ac$t1vgby`d873|kyVEU z?B^pc%2zpiK(hFX`3R$d;DSKW@D$i+K8F@zJ@I@5(YMSxJ#Y~viV81?oZ`0FTkbA~zMUg} zFc$Y?*EmlrFp^8v;WD&yX8bsrzrbo+>iIfm)JR=pr>t8TNP$w}e^$TU`@Y^>qL6-!X@UOAW zJaf`hh~rlptEyNgr(p@DPYb7~8PfoJtz?2Wa1x9J8_&$owR!S{m7)4T8EpRK8-vyS zUCg>{v!Q*Zjk|5E!F;MO`1`GJoIHt%LF5g9PLhD4mxodIk{5j`KUE#m#=kPP1U6^2 z`W%bX?B9OM0KBe{wR}o8MW9}ds1&~5ho+2c-+xG#!IRa;)mG0M#x1iD;SGtc6x;~G z-2~y3u-IQYIZO3%pWixjlD2*i>vll#zJfRC@Q~M)sq-#P2Ux{`sXsU?tWA=zDWS}B zeUO#;D-tYBcl&w0u7;_<@7F>9vj~%BB%d6fikU%TQ77K{#BK#twIT!BE9qA}opdlX zP#Q`I(xfBAgTiiM3C0 zRE*ddHF0)t7~b(od?dCZ`esAlpk6cSyYTY-t|*G9^PEyzGOVtgLQ%naHC06>9pgo- zO4{mb8Q9Z{isZl{{qQXm5-5r-q4`Cmh!`ng&Yfr0r*~$?MGy!ZJ@y?bA;6MNHm}U1MlN#ZdHyFF|h{U%c&`I_T_D zH(gEqN8=nYyI=(55SweZW7kSIuf|*2f^&SThjKfZMNmb>)JVtv_|ph=ZH_zHrdLIA zGgiz-GO}Vv0xrBgZ)(zoSt^68Vl5KeDr+XlXKcNUryj_x%sE1^^IQZ4v&5>)Vd~tc zxLb|o-(DAeOK~q3vWKo`iG5V{Lmlx!C4-f)fwrIL>$LpU3i==as!y{byNtsa07XE$ zzq7fBwDGUida)cE*g9~f6c>EE%#Mq!tPKpQ%*8a8cbBwFCuJrC?#8;bXH%(rF!dyt z6+1DYPw~r6x(=`FyzA4?@E zwuQmir})_t94EC%4jb)`M0$_{yi!rW-g?E6=Ct8n6H==vy{*lxy%;pnQ!c6*F6Wf` z!r;%Cf_OY@uf^SpqO1_Tbd&2gLTZp+ovX`#)I)p#KK286?tN$2uUgWE&&Dmn zbHb)9-I>}L%N?uw@hStGLsg!=O3$9Hq<;_YDu}}x0Pqy=`;tkXx`~Lu7#x8S_y6aK z)y-I@uhNr;%gR+Bi0#R7)5Et6VA*F}N@pm|yHwwxmf})# z&wvE0B7|5DO>+bYY$fDkP+^0h-jJA(>+V@Lx}G@ZumeAwsKW$={Oi>a(D+Fpwa5c@^6P;ElM;h8o9}ekae1ddt=^X(zL8rzvmO#GrT% z+jIqo##bGMznpP}2+u4Dv$BiKA%Vd~sKOv9CNWhu+I|i*E95J7N@v9Y*eMK0Ot_J_R8!35OD=Qlo(2W~CuWulZxRGo!GpO9l+l^fOV{uT0DDjPp5?1InNuF2( zq!b%x$54F;A<9$VHo&^52+K}!SOsGisCIZf=?O2Pu#4ih7+_2iG(Om8BDeR;o8&|(H-CsW}PS&2% zVj&ut^0@;i-oG$y5nko236mu*p-=I*114X$O+RUdjb@owJYG@9WTIhl5??H3OHzR5 z!=^PD)4HqWfnx6>syJ|0bn+IX{!@-N!)wPk z)SA1V0`hA%@)TPm$AmUuRBbR6y4d{Z$Kt$<6uoe=7ss!&Ec?q|C|GNY812y8_=y#i zXQRivK6`WI$AeqI%FM!}5%gLI67aGzjHchpo*AAuwZR&*U0;VKqjHjwwl6;{$6B;2 zF7F|-nMalAHgmS|z8^qdGe?)Z6>O8@^i<%b17;da40F-OyEH6@1e$Q2X9g%)N&vtdLIT~iO5=RDIWHainz1{)4`B}Y$@d- zFW}F##>1l)kyiFFeom4`m>1NFm430tvuVC-ENR=0m!5F|rKMyxvv#SLi5irBuM|-O zzqRJ0Y3|odj_REa1E8H?owyEA_Gk_o70eZUj%2=?X%^Wfg7Bfb@L)1wb9^;wRX^k; zC;s<+ier3r+cbHF(~F;&*^%O4J;6;p8XTf=G<{BOY39&C-Fm?>=3;7U##g*^eu6JT zE0!^;e88#@!yG;JCc?gwuCz+tr&-z63*XHoVYt4b%n8%n|JHA$%RFMPotxHH+vl&+ zU7nCQS-L@IFkyyJT6bSw)OFi_iG7M`9Z$sFDCiAyu(i+s2aXyi&r?Bgw@rOi*KM== zaZbOIB9cqLO8*eMvoENtVOOqU!wmHYR%+pSiJH`1a`uDUktyv|ZCnl~&IhhfF*CL_jLQBH z2J1%JIGM-%QOozLmcnnYPR{3Z$Z(rSL(bzI$Le96^F7?zLIc^hexG6~9GY+d>cba( zzw7UcJ*|)t_^`iRiQa~UjO6x-i^2a>TzIlEUFtuq%ai`uGe};X8`>M5H%6;uYS6h> zap}Ay6lt8~HFaKh>2;CyQjY+e^vX@VK1(ygnv7W!`po2EKLHx+`f?0_agG@Mpz~)NiJ8jc< zV5QNe-X1jf=~P(Zln`zs#rTrSN-8`WgGXfEbyKa?e+u7YE{W^ngZECZ;eZGJr$H>e;4^jn^6z!>Qk9Mwio9? zs%Pz@ka|b;##w)|_Pt-m07fYP^*CnC@}hGAYp4txK?S|yDjju9sV6YOprATu(UPzR^SXD&N>-60vS7Ed|44_nXkJ|(v zW(~TQAo>bx3Ms06dRo(8cv!;LYHLL#A(!>RHLyVKdBLTP;i+r*qV7@GI#hTnZ@(KH zuB2Ad;%ib2FGK6s*^T{xIa3J@ctSyrrq(bn&2N~U$bRm%ZtZi~f*RsMiW^B*iDw!( zm8hapqI7H!GiB>@72tB@yPWt6w4*T>jx4({Uwaufi)!L%KUcAD4HAZKpUjgjz)XZf z5j)SMB1S=Q`YPm*8!DcTDC8#llZW147JdmvQ#nqq#WdgeQ92yaxu)F?tE%?PFK`6@ zcjLzzZV+ZQ<|F`Z!uCM@mRehR&MP7Fz?3ra+q}>=6b3(Z;~k=Pmbv~fX@$wU%KU1t4iFck7x)lL7*(3zrTX4vY8D))LF#Gc}9 zc1tWrBa(lK&Dal>_Smsz7{FDm4*SecCEGB7%FAL+`3X#BdD)TIQv%GUDvA9X_Gnym ziI6rh3kZ^5Di%(Wen*rG(GN*|ijT8~df&SuGKF#HKmJfkcBIi_T2v6z5@XrG6w#Dd#GKdTYCl2mOR-p9Upx;8@Rh*^ zUO!2@DHvL&W(C)^A_`zIajA{4xYO7w5XWuJM_S z2UQG9pJqBeaH`+W_i38_+x053UTtaNk?O}|qk{%P!N^Zrlm?d)42|110p7JLifI^D zWieLjfwyu3C~e;Rg@ctK`(>B|D9pPnPMRT~cCUWSiN(12w{EQ7BhlUrG9l#s(vu6f z*6Mb%?KHK@c;V6$Q*#D(Qk%juso_@xnHN%vw!rLmKWT@}DQd;ssiGp^Thju!7ai} zCadh;vmr?NhhTQ16$7o)s%m#e5POMs30xbNu@*Sho?RY3SIZ;gxh8FPhQ~&1794{v zPnPMS)v>bsQ_&1uKndJk>NqTXEf@g3&bW%DR%}K6QZ2}Q*PtF5HBr=ub;a3`?`nK# z6&W4wZ8miEh>KV&71$FU7mOhn)WZB+hk=^P)E&vYILu#Q_6Hra>5s7r()9ec zsbc3_(JS-hVvVS|aRanaH&X#v%z{QS#x7ol&sMskubR0gkF+p$I9QWNdj8J>JdidiQ6R*se zmi_MQ4~z4=i-l#h&Av#|*o|Me!ys1=kHFq?gsgUyXiMmST&6Q6V-%=7`&^Q8jD6c>Tthm2(T2 z?RXW$KSG`LwjQQ#SN>RHg_>2+e(kd-*8Yi!P{6Lb=YRQQk!~xOXfwC@*|`%EGZ0UW zsgBzGc05UMI_a|QQG?NQL^=wK6iHcoUY}wxivTGtLB}!MYe30)(X$dVEq&|aR^pwU zd5dr?n_lGfG{>r=^gAX7J;!j3Ic4u{67b%q#yh5BGDzBmrd3fz|I^o_Sxo7y8l=`g zjZSJ6=e>S9+9%H6beaX4B80=Db>WvOSh2f;*-Nn!&s8WBGJ4e=rcO$ZgJlu9vk7Bj z;93IHG*r$7`ZI1s#xM3M)+%dyUP?_8Ju=fgCK8VBD6o1xOw&>2grwB#ZGnA?y^NrW z_nsCq6T@LK#_`c-goz87khy)CWp{noV#;T1CoUheB#p)kzV^-OB=JVqjKs3bQMQTv_#mvPZJuK;|^vtfEu*@ z5OQpQw5s-^dDl;3iXzxM%|~xz3zog|pi&(TEtxr!2DXUnvy-Mp9AmFlg9%uwzOH9x zPz4-Fh>0H-1TI@{t)?nC&7uR#1;8o- z;q)7}b>dF8{FAw_DX|TJVRF|nj$4#0Oica}LKL%>3t}8zjP*Br7{0r@zb?+<)~1U6 z8tVS;oO=)mnu+3nbr4Rh^os3+%>ga>bAj!T)3nI8CiZ=w_U{z_B;-(!*KMrH;2b&U za&%R}9nvE0x2tZ|?aK7NI2-(UdXhAh9AeX?J;zns*!KsW0UE>zSS;f8SY+kc-FCNs zK3cT9irpX9B~AoEI`1bC4Nh*O3p0^2hU+%> zV9quymL+~|#JCKq+5xnAN~yBHqfjeZ5aDYjWlefLkZq6<%J{B>+9H=+9nI8jTN~#x zRu0U9x*~XIkQ6kFm)lYF{*iejzVE7S+sd>?Q)I*jb%scjSj`)3TA|e72(1pxYE($c z=PFTB&rXloWqPJ2TYCVsaWd zQxyehs_5IuT)Zj?fm@6P^+<({r;`;_SgTDCG{c=b(|SoWUin_jIaAhteNcrj&6BX$ zGKq}g>NeQKBuptr&gv>Gwc3u3M8t6o17!(f>CXN&x_cvHPiednhQu~Ij(u5~O zZzh&*>$q>6B<3kg#fYuecmGJxox~526)zK}Du^J_hE7Y}9V7Ygg76frgzHJxyoTsB z33FnUT39)cHNuRZ-a-u-86`p*?G*l3buE>-B#NSgaRQDkoL0*taGzL}$=JXKm#6u+ zuE2?Qra~0JAbd2j)z{0wvPBf5$_j$&g<{4fMd>Is1CI-p^e(6~spNH74p(r~MxyI7 z13n{iWfZu(UVBS08O2_pk!1U3<}q=T(sp z$YB#Z6O%b#h5-}~L9*qzBeLM#9htgAJz8|v7?#vi`Jb2rqE1LnGh(8p+Z*?oQ<&)a zgJ0&~{Iwlu34%qV-DWKp1$pE!pNK8Gr65p7-ym8NF;OXYjX2SJD1(0)V4~2lGNO7> zKiq+GeA>hkN2&pIbOsW3)WNT=h|c5unuYb5|LS`Jk$Ijm%x=7zCmPffw8Nl`ZEcq( zNscNnqJRj}0(Q8uAEtm^t$40W_1#>>ici8?7D9JY+MrvNArO}GG2t> z65Dj4@(ix}KmgobzZ&vAxH*7J2f>Nb!jdg!>+hHQU+3TE5KbQ-w&H9^0GHb$ba)N- zyj8M>Ws+9URIpEToN)bcc9WLny9xz0Mejkk!PEW!uq4AP=|h#)EYH0R9A`Bh6hoiQ z^ZENXxbMTBX^+wS(_-;M#-IKzm$o2}+KN)5rs*VSz!g2)OlE?&udR5si)hdhV)tJu38p>i&6PIKIqy3IosuKQhm2hI`za9b; zNviX;8glPAy0-T8)~)1ou&NwHTxd(jD+Jqejw=tOfKk?E;P24YFYZHwr19P^zT)C}BLaG!J~3j0zQz z$6c$DOvneJvPQVsE>&{Va*~>kE`SjCl_IFQ2y?`r@jDnKJvFlk-LA1T)>8Beyc$1| z2Kixvi!+~QpjMxCb~^L#&Yof2U5)sp6um)R1~Mkt0KLl(P_ZXku|XpwC#R<({42#v zPKqDC{5eGSK)naRDBQ3fgCujT9D>>rvd#4*__EE zQRVL}3m}YKj>bx~jFjK_R}=ii$)#bzxvEN$t4)|xRkh_(>0Si3x+coow%p-kv`5y%s$?s8OSu*!j=WuoPm z6~UmUZws>u8OWDzMs)sgLTIAR^B-BD3JrDPQ7m9MljSlh!)lb~av1V2zs&QCsrjbC zT)Mak9}5~UMYS=5Y@3tPaCE%RDu=b-yrD+Att6QkQ`Id7Y9}^5481I>AVky*W0QcZ zPkotDbcQdjw_P)|Z3{^w!vGz6n`YI-!7kEOA!VCgeYOU0m1qQ9Kos}=y=<#0e!}1$ zLGF)VG+fd9Ys4=T8G_5H5;~_8J$pX^xOHv7m3a=@CJeaAsj7d@w%)MZ3#cs5-$EnZ z{WgJ8YzK{Wb6j%MT_LL|isE&4U0fA2G(DmHmM#Ogf&?+F$8mML>iYeI)1&>sOiL)F z^KnYs_O>{VW&m@B>l_BW&nd=Ljy7dH50-MU&&u*Q9}>7RfxBdI;W&Y9Ww7rrg8RW= zit7Tw{hX+pj|xTacWaCk8pmeU5x9_QqhZT)dLE@D_X4=*|5xtSkUYuB;;HMbS4Ruh z(9E-u16!BSemQ%V8#uNuh##;oT$x-sNyzFAlLI%=Ak!8sXT~6O$Sm1W{km+-9(5_} zlo&Lm*VW5GjAp82s^t(F!gPNTxWj$g_3Kt?#zaRY-!6jcYgjvrYzJun42KxTCnuB+Ad6E_1?ZLgn5|BfG^ zz-n#wmspi!3pqTQ_SO;4l!jj6cZ4lX#{p}^j0ITLT%%MPD z;0PjEc)ZvroI^et%JWDJ$=XR%ludOaNgL?MgZNt%n-pGpHVI$D*ZABecBU0f{d(=2 zTKVIZ#~YT>60L#+Ay{)nJKhl30|gLDL3j}q5~mMq;lAvU%AQFB%vidnYU0-L^^9z~ z6EB9Zh-$Qh6?h+qImcG41DbmHODZtDcNC-8PzMsC@$Yh8%Fj-!D7Y!fotJ0ltbsH^ zX}mS#71=KTzLE#3r&!~Kh2CisHK{CaCc2{FNuY2c<@Q?lgL5D;Im#-C?`t}fs!@&e zEV>~wJLjrhF2g6Mf-I_Bi1V|=8r}6_Y}JI5;11i!nlQqzC>B6*Ji(~sPfC#lt@$R4 zoJQFAi)M^E{n(fu^cbaE?qnuf@&E)|1XuLult5LTO=*FZtGM8yz9}Qr>j)S;bOm0f z2GuD&iw5VJY!8Fpkf_E@W3~PP?=!)h}hhLVW%rj{hmyY z5h07zt~x>>$<}Y8i{Q%3RSDz1zdDjnOy`F7sst0Su$4ES4*7ba%on~9zPc+P4PR=R zSk3`2YSNnt zfXW~k41ZkVkCAdFwerF?*1f3{-G&r{>`FbYFrE>?6}Q&@a(E^B8OK&QPLR`ZUXv%6 zve~F9sWELm z^bOvjy-$Q{B262#;*wlLPVs+MHGtc_OmA_n<1!4=kqsJ$X57xxXHJ*D(sEI*Z=t0W zgmJ7Eep5+h*BZ5;+tL)uK_XO?lEk<7QX^f;%O{W1PT3e;lm=<-Fu3j+X3fo6#7@%1 zHb8G&eVe8k#-d)|QsDQDL)AKa#=Lpms-L=o@Zv}vJJ&X-TEAW_Ru0@-+H5@mpcuYj ztPTTBkijKlIHjp|x}G$p^|Lg6Um&zhPU&=TQDZpR2aJ7{J9o2=#VaD7f(RKBmePvKYR4rWJ?gnB zNV13NQzP9EzUwQjv+wB$xnHxLk!;%b2&Gu@gojtBnTo~BZkopI^=L3MP)RYBlM&&@ zQbjC5NTGKrwI0S4(SqKer~PN;Uy9x=o;Yxk8h-#)k}YJyd(2VYR`8)x1ENmB<$%1h zC|7%M-$Oy+>W`kQo^)a@04|m9{lhbU8G;+7o+!(WbYZ#2P_aYwDs$HNh!^5WiHClf zbUAL{?nbqP6#?yYjNXi4BY<={5#`>S(m#iJW*1T49EB$K87 z?^?ODMR)~?Ot0U9N4omXH@cUu+^fg|6?0-W)cz*i!x7yhJKq>`v&3U~tWpVw)@TkZ zubo`&p{kve1VWN#J^b*M>k6V*kFPbxE#2CwRl@Ach!XzgdMU(?Kv&{B8Y9NPN&!{V z8g_mp_(KJEZT_O*ia#ADRS!8irj$iXF+yuA*9oPaOQS8C{JzTS9~@(iYxCsO(Mu1G z3Ic09$A-6eC*#`*z_5vyULMr+E~+-CRs`Pg^$UL)I%I@H_WtW}>~6O|W@QzN@X1x} z$|x)hFwz2SEDih=EgF88ZEYM5eSi1h{=OVf8hpQcWYn{)?jup|;za8QU?#ePOEb-~ zlks6SR*Sr>xr(l$?~4P0@6E!jAjXWWAWk9us}9lhU}&TZ*Lh!&dro!liy-+HeHBL> z@u=)I7WDE$aPrv2t5cHG`XkmA#5t#(Q?*e+wFlQ)LnJJkQy+z${ZSf{T)4Tf9Pzri zR{sX9on9MD5`ltz(CPJ-VpxY8ZKUfJX(V`3|0t$HgV0F#FSx+k1HE^95_!77R!?vK zISi`dIJ3hbw4;9QuIRgGCq_COAlj-~hmhWkP_^Sp*>^_PN`m-e`?&8f9F=K$-30#H z_*-ApOl`uPux`FtT@1BfH#^L<@xcA2=vTYaJW;JBjzj9bl(3xkp)AiTK6o@{9{^T( zHBa{0eRhi)z9u(d&qqcDN3iH#my#J?mq>wE1evdanG|#8tO}MC-*b_KoRTTa8fIDJ zYCJ-31d7w*v+QOi8DfH7@2SgDJco%MyuPf@6zTg0TK z*<lq=Sh-rG@aMXZ{pu}MBTbg^;*wl2a&EfIPKyZC+g~6>k@Lp(<`u?)&af&Lu zfahB`V-Mwbhdu=wrRb%`^}WxbcQj$G9H`9UATp3(32k9XLRKwp(8Y{ouBfFdd-IKP zvGl6#rU&54tXLutg}V2TlO4^4rYt*7#4-RRL@%(x#!6$+An&$4_o4>oil7QI!-zJ- zz{gQjVV5ihk?j>0Q8EUtNM+VMGui9j1{n^H;zJTC>8 za#6&gjKRcP1kTM_OMpA!OtKtLRUnBIiE080r;y!^EBxvAw$QTAeie0Ik@283CCn*M z#qtI?#NZEm7h7UDf+{D+N+bNFnmI{~f$4ax#__aZ+X;ASVLXiosFzgiz}Pqj!4py8 zID;_09D6zqepuI*Wg43hG7_jN8|*d9b@w$=NfkVHR<>;%A2!mJ{jh;&dSN;U5Iwp( zJle=*n0Jsc&|)K982!_^H)xwAzUAMFsHFso_US-lusF_4Es}lRoRx^o6K6P7^fFdW zrIo-Xd^hewr@|GRdWJ24TO+tI{HNIqPNBdJHA*K5d)xHfFqpQd`>ms#cGHlf^r%Sz z+|cCl8nsK7U9C_hJm2#Ob)g4(u9$TC?5ZectlfhA<@Kp=@1UzC`Vy&BDL&Ei$YG~z z+htjHlNEC@8iZ#X>8>m)KE{ZZ8Y7+YvbxTKGPskGqx{CNv&*7xUhcu=#p0*0b3>g6GY%z`Tp~GA*G<0%ceUm@HXe^G z#8mjO9WdtPrx6<7b|WM>^fmU(iHE~Ry6RI8j%^|Cps?-a;#vi|L`v zvTa4Z;GnmTF59xV)-Nt)na1sf{d|6%jz6?VdvJ$lTfV>FR>WRY1sAZ~ySjchC{&z#jQ_Qu=jhoU+_GBykBOTK+=)xezknRgO*EO4hd9UEvz(?pA~LRfI;mcYhdwE>gernLVi6w^;>t6#qJUNV9n^ zvUJzr-lPM%JU+kQZS8t|< zYb8nhW7t7a{wMDWy=rP?AHQKT%IU8f5zMI_d8D4f#_z6*&YPp!2!mqN-D><2 z-YVdp5tQ1GO0vs*aAVOa=vsKm9btVauaWM5;0>y5i>ajbauypry@F?KtcwKN(0Tx- z+n47oMx~;L3lx@JD9qCpy{_7h5ns60kL9I1>d%FSCMR4aUc>=05iP|VYk>&uhAPuc z939msf`-%!L-6wotR{-#W>Xui7m=3mojm2EXS434hS{$056h-Y^EB|35HFM^2oj&9 zdI(nFji}^sbmIx}9LPsdje4|Y+P)?sS7z+s&~w(-yK^r-5(4kZUrT~917=>}y5hHq zQKkBO;H_YH;_Smo`o6RiZqY=*`yk;BA>5@vYhVFOh+|PI;)ks zpmos7P{JDz8s27>bG4@nOe`&s>)-)n& zFkLMI`Oy)rGQCDnBH*&o_1;C}B~l!Ke)rmJ+<>j3_G~n=#8L^?QZ4)CBZrLAq2|1t z=_t@U$N6k*nr>TWS-hFMnJQFDZ zVMBKXw5?D+j)NG8Gi46IKz4JwZJIX^Zvk9pX^D3VwFTL5owq_eG;6_M?d2}1snhFz zYTI`BW&8J*NI~<1V$_e*&|A^TVpW2KgsLI*G=#jqh+i((UwcPu;^Lbor%@=phiPT( z^NbX|HonD}e}KOA;;YnSe2@guNz`M-JWb+@dL8sJ+&XgYq%Ud!Q+lyFk9TuW;haql zvVWhjF(^6GF)09c`ywK6GhASupTq-|j||D|Eh`&PdQCNSeQjBLj+Pod`1!U>%kc;| zu;5pt8S~H*S5#8BWo%e)tuLoN$W;+7xpVj(5>gHNZPvGoSdTW()K+@YOkt$mCh z{9)#xQ^Bm~Uz^e=&ng`LMI^zbXRONcJ}^cK$4E!;M2>Fd54|=MLvTSMjR{N zjjbFPwqZ(gK42}>jObx-0lf3R!jWG%CsXRUY+!Sys~U2;-N74n5~MtjsmTqKd8H;v zNNq~k?61~*-fXo2B7@%Tm7yD>NR$w4)pGv-&~q&FVKX2{8$cwnC{6R)IF z{mV2M-b3caQby&Xn@G_rKhC)(r@Wa%Cthu1C(sTLJK$(ELj^Yt1RHvIlh^f8oo~yl zncZLChv+T+0APNB#k2U@&8uPGh$>SCDZFYw-eoCuP?o-NvexZFr5g?-C-iow!t_#! zKBfW=kg`4H^&Z|mxW&wore9MFd=cl$IOz1Ps3vf6RO6YED3!HBP4%mG>i6K1Wiz6^tI2{~S@b!xFl>9Ttwsa8%f;Y&9-+H`4gb<M^}1^RtvFx~1-oB(%-Spv+z&q3gX@|QWb97$akY;;S+@Zf;$v zIi%h=6nT+8>)GGLAn*Y)H#kCVU@id;OXr>tf+RQ1_kGI#7NT^=;pk4mm@q5{(R);^ z1Y8ZK@#qGCkX=8JvOs}{k+ckQB9fk7V|e_<1TnqTYR13T1@?2cNrF-x8zIKC%@mqw zPi{`Bn6h3om^>N*8t|x81kbHytBf?rb>K!41zfU54b&p&5QZ8j_`lXuW90QrJT6R$ zrFP>r+Gu?biQi^>Bgcy?t)$nW8fXwVRO)U^8U6ZaHU3B@Y^qWNE?z0xD?uu_RtZBJ z>5@Sn8|fxo8j>q$ap8kyB&!Be7jIFfdVvP=XN1Mi+sxBN$czy9G<}hvz zj1&tWuf~NpW$dcd__RH+V(#1zR*Cq)UzDe zYih$PgJ0)k@ThST^Ks(m1_w1TwTqx^<}O}zS^6;5CPr(V$;Yy>HvT|$(JKd)p7or) z;QFe}j}zkC6wDa0RCB4DU$u+)8woC0awv}gX4eLQ4fmgdOFx$p_5IxfxHxK^zdLCx zi@gl49;t#2wdD}>ejqF_i3M=$wM!zen|FI~yD-*7k7yQIB#%hEPcJow&Xo&_>obrc zZn%-|{j`X!kFUaLwUoq>oAqsYwRmEdTtg9-q%P;pi&JZVTYv z}um z<SO&eH~mwqcn`pU+w==+y)1f`C-< z;T+q{4t*hS%T{PxI#J=`xKAt$^24;$DYw`l6V49gQ`f#DKFXV}%MFXR|3S#55|yps zl%dm009N~&Ts0TD&AVOs{kN-@<+Rl6A@z1)Jzy)NUMv@3oAGc3mq%~vyjiV&kOtL1 z`>$^0?6WMvh9JiZuId0aG2Hb<*MDF3w=KhwQid*CP){^`()&@hsQB9r970v$(hQk8 zpOZUE9ezZStAjTE{Kvd;Xf=lBiTiIWL-igJ`ooHVV&H>!|K18WGsD8t^J3F_DuF2u z(U8j7ZarW>U35X&c0q&9FKNr6+~;chY2uS|$$`Z-8Dpi3%FxbZwE~Q^`CbFtq@s%-MnW2{D`--sCq$MGNWD&#c1@@g=YiJiP2x6f^~IcS$387e<99*O;fJv&RwQn) zf+RIcn|uyto;KdkcWIhlotG^^LtK8~$?I`=Ercsp33-3`YQ~Z^U(9#!9`@jVO&U0h zJ33sml>8#|g5DZscy-ST9&G=Q78>d9S~xz{K%-`N=&6G zWseKE+`@^}K?OI8xP9t7bxeBscn(}OK`qELEZmvnsaeaz)lAOkj zgSL(44(r4STLhazyi7ucy6wJ!*yxOS7%9jKTNqG5Z`b<4%tquED$05_9Gt<4^ z%}zv0(kc!s1C&4kDsYOYP|qp0cgWuX3&Q>746r+eLBU08-{|4SEL~@HLeNRN4L?jk zCU6B_&8AiKtAsJmUh$OqNDwMx2(9pqWdqF74f9iT#sb14PyX^zF>+)CGLWKX6*+YX zs~ReV%8`;1)M~uLs+E`-CbC%4A|>X#R4C-GoR)OMz|#03Kvx;7{o1))Jz}t}M+gco zzgbh(7~G{V@Fm0?gbr0GGSmLgeFXYXP%pc|Gmp2M?7Zf%Pq8=#-SoBpN(%xBaRv|O z_o_NlfHfzvp2`6A7)e_YLMcE%Dc5K>JY2Yj^du5E1e7U6uRC#Z0B<=l$FvLE&TK!{ zyD}%uT0MZgilV&F@nOxcFPaX{n-INh|L61iQ`~O#NtRKMz#IU(#^=u3Pk5R6HGX4L*T4k?-c$9~yP{83 z1wUNh-=Ce4JnNtO=yhS!aaCPR4c^rRJwAHv&nCt~4_x>IHeSsb3+njOvxEZa09@@$ zGPkNuCR&`$OydZ}AvYVlK%Yrz%xxBQ**@yVlQPYU8Pdl$n?vTX)Al^X^#I##SH3F8 zoQN|;Y<=~s%+K(%wjP?U8^Q8Y+#+b1->+d_Ctf>jLN9>3eP{^rBpAKqzQ5XddxIj6ZV1!?i|nLZDV?9 zR=W|RQj{b#B&~pil>B6d<6E7AlDnM;tbf0;x9P8P^bDJ$%GAROXQ{w%^|7#5%bBVa zXb*yffJ*&{vBKKnq^S+3)(unFk83|CT)~ZAcaT@4;NoTF`9VrEnB2Q`n`1zZX#w2Z zA7U>Yih?cRKLYo%JU=dl6t&G1qnErkROMuN+0+#R$BlH`z!DcW(p_P5Z?trZ!&9`o zA+S@uSyiT4C~& zf3#!`+bGmFA~2UauPDj@D${)+?!>Ob)#CJ+IN`Q+ir`7{HN$}9d;+pM}((@N`I3iGCU{$}aR^~>~93sQPnBykH5 z^sCz8bgA#JbO4f?6p4VV56&izGf;C5P)!1_kDSi&4}Qw8 zQ)ltAbOtS}O@P<|z2y3sxf&zTZKwQEDl3c9ui=_)?3ZDctJhIl+m<9wTRHOxKV1uc zF%coS8>B3)HS+`(Xx2edL?Mz1F1!$p$Weqq2A4B!2wb&vSl4r^_v`JGnxAla2$g~T z%5L4EmRSUrA~L0lgdy=iL*lnXd?fFLQQREXGBSd=to0MRu}3{rz26Kdxf3+_$>j`n zir!NOS2v^H!xrw}38x>$G9sv7=qP*${2&2`}M~%V}Xh1!%&4!N2miPU#G9I>ch1W(`ET^jX=G z(VN79@J-bSJ+40Zr0R#Fx=$W==xY3u-eQA^xBg?FvsNL+Ug893oUtqDmHogsW--gI zE?g8g1{o1FSwW-3?2{lE4DWR!fj)QHU}&Dz03V_T8ld6c!a|ToFq=?Uj%DmJP^oj&6y=*=9R`tR1@bpTMeoOah)x+RMw!Oz9tt6Oa66|jji33JAWLVT}Z2OFtu z;?TXNf-8}D+O2+LA@pC@Z6&(vhMwgZrp9ptdIeHaOl?rwn>XEIpJE&#f*6AtRA?u1 z2x^$biKj#}K%uvyV=pS=LA~mS?faBbaX1a#LIOL$98|=LmIW#_YZ~ORDqb9$ST!aD zAvl60D=3M7IuF3*nBiD!qVcZ+wcoFe&^sz8)3&g-_X{@`_~J?iVV~kSaDR$G9oA!7 zBLp;(8O7(b-;!yB*u^#WDZZShX0;uxx}P=Pf&&8h9=kA7R$*f$;?}S1#F0FCTE6S1 zshOItt9W%2KHsc@>&ly2Q<01#Je?i(B04Ow(v~&--Dh0`*J>P);fVW6z*TZ5^j7pZ zWxiq8>S(Uu_B?&LU0vqQdXfKw`r}zu|G9Zl*cRmDEFB-lZUudcE26k|_RB=~2v=RY zoSynozxvb(lK<}|8!=6vmE*YWR@<@9x#!7A=xf6*))l<>uR77f++olt5(K@;l%>1v zL)Ufh&_n@uwDY582Aj`)aHTDu<-naZ3^EgNx7%N>Zuj609A8=<&r79-7WdVv;1Zpc z;U<`b2i&WZmM&L+Vt%jcEazntV)^?^>0UfSpWg25Ko3#_{4*C=)j8M&?RqW#U#|^q_*tY=g zZ@N4|LT7Ll;VBW%SbbZjf>ED-N=wLq z|LlP(v1{6B!@7KY{7ZqT^Y+#vwhEx$@4f(IruMX#<& z?D7^}0gC_4%2MR_DRxg&(Tri?ZiA7a7h4qo1Oa+Oa^M8NjX-D&9POJ8zkr~cJaJah zn@ISplmiJ3l9>ZhoynHb$Ccxh_i~uia~Bif*QqXpld6%xaYVhGfI&LoFJbgFJA2(>*F|{hjsYt&lyHT6CeeOlUN03U;0c}@DDsm&PgBVUc`6Pr zP`=Y9!pued{J;2)?|EvAwQIj zV|}ZJKamubgk_h*c6c=25l+e?x&v2Jmqdp1n7e-zM}C_aEA2#_qeC$jVUsk!-cF*G zsGLXoF}(aF7@@t9(nAlll9|DmB(#d6cTHh0cXn)Vq`V4Oak2S9p?M8*LEEviR6%p< z$z)4LFHbP>!f*w>gyLsJBZ?-cut>#sfj0~sNRWLpqHuzfzW~u(i#JEhrr@QRPJJm- z;nhGL;uUEi$9}B>!vd9JWhKlvCmOE$O0+`HEZd0WhL6d7&En>H>vv!96K_?m;5@`- zP<~%W$*`cB#EBd~s{i3ydm_)|)IfpzR=9#ND1dAVwHlDvyrUvfeNC?PF#M;GN_H*@ zcMV5M7+fU@HOv!*g$Z^8>SealF}4EZFp8UM=^WhlRyoi5z2XCKxuK$ZbqFA{*tlV* z46fz{ZQ?~WLDSznzZj-w)sQ)2l0KwPyLcDFj0`iBws~7tkBB@+PPoaN zAbpC7!gw&3dx1X19e@kK?!o;bZ@OEGa#XENHh*DIa;PX)cfAMq&0Yz)(Y+(ymH4MJ z-Glqj3OvR8>wHE}28p*m-WcQ&Asy1QlecAh6&+_6)`oqGrA5uUD@4`%;|nSy`E<7i zW|2H*4&M>K-lZ>3PEzO-GX|dDIUTcQO61g*@>sZDz~P(bj9x^n$0wuFE(F|{zkj_4 zcX-@Z`4SHv(@9A&LIajWSrgHxzQiSA+52mkmH_VF05^WRM+y`J*m+y-LHWe* zQ~Wgw<3hdRzUUGp`6?mJ|Z3~#o}4andFZA5DPtKDPLu997v=`)Gg3L+EJlfSkc zaN|+Jc9E`Xur8g+{yqA$U#+Y-8N}x{DWLqLLq>++MiHfRF}M+cTLJ1W7Sw*CYVOYQ zE&7kI*Cc(fOHs~SLYL8^Ojf5&}_%YHSO*qw%rw`la}UqsWV zKE<@@R{QfeeSpRY6-2SL%FF9!e0i7N-Ie2IMeI`1>+3kFRJAZux5^EhG51)!?wcy! zEFk>ot#biFsAXTmbNkhW;R0G#$TEr)NsaWIZ@aEJV!pixcTTr0I?A!Fva@2f&Gm}_4HxYL@u$d(Hi$ZGaO>=ROcs9ZFA`1xSdlG(LL zM>K$LxV&2(p{1`cq(-%q&dDoD=cgF(gnAVZFUbqS_sP7%icJ3@!%cW_*eccsa7!!AS@$}GxCV3Dn0TkE5?0?W&6Z* z8EQl=tke)mE7Fl7J!rLP zN>XRA>N1iBI_vdM!Ap386{VqjB>oeeL^lF5YP^@JstAGpr6QU(HNH|ppp$;(S!={= zg22^dA)00r3!M^rHL3?N=!bDf3W{7JB8mBXN||7!n5OvE!dxm+Ws5^o(Ld>d+N(k4 zR*$c}=${~;!Ovdd@!j!(Avsk8kxi^5+}L&ZUXuh;XPP2#6LFMl=^f6sQQ>n4YHd0V zeR%sq8w2KCVc3$^hR%Ba;@>(CRCqRm%aCdd9*AnskP4B^QoL6%5qy_#1&MhIZ|+xW zvQ|uML-|6aSOizmevrXp$;a}b2%u%_i3p@NCX?t7R}i5igG%c(Ol|?h@hmPWcrEDF zuCrly3WIerv&U1*TM0)5>iv{WbD#2Xjf*&C67GeatGx)$$s*KN{Qk1~dh1%!m@7Jk zc}2)^B6oTFzGQHNR1mB4@{Af-l-)iY=3R|0!Nd1>ZqaQeSMRTsr7yXMqP9$NkgQNt zTFXW$M>i#T9{h^9m5~KO1IT|OeLU!RVmjLcQnZ-uIR*ipy<`SyWuPZsUDHIW6Gx#H z=m{CBJfn^c+8NI^vzU!c3*6f^_9-sYH+awJp#c|eQs%6AR|hP5OAG5On#R=aFm<2Z zl^~C69-Q!qj1K`H4-&7d@yPTv$&`TTq^dolw#p599!ED?qf;buLpnxtHl)sL>(e0h zC0ZM({lD6sy+r?NH7^5k8d>^=rl`Sz+AW$DyO={%oj%?{nK*P4t}t}n?v@9F`j<=# z7Z+k;jEw>6^*G2%bB;-VtsudKoDxSk2|({M+@Q1_;-+%jse(-zW|4}O3NafmRt1Aw ztSUs@XODVt^3EAJ?LA2r0&XN3p(|$?V&94>3({SW%NDSr)Zpi8k=svOmQ`^T@SMN< zOo7(HK%e6GX%Cacs}JFgX2SxMIeXT|i09p?=+!>O))yAydQ7wI{)=rZ@xX*$&1~zr zSE+5%iPX2%Nxm>a4VxRLf|&OMs36j(7SgB$RM7T1j-AjAf@cY_k^Dc!4r2F=c0rZ`s@-;KtD3^L#<^82s5+6|nQK!~J>1}mmW|G=?eB}??w{CI{yV?G zRjE<0fL>q+hfb#x?W2n~rV`C#U0Y?46Gt(qi5@CCjMu1B+z}{yLu_-nKV6sIy3dN@ z!wwe1{F~pQ{saejR&l!~veRX>FKMWJCq3F#TQe0dF*fp2aA(}AW@^_m`!z0#7g5tb z@|UBYq@D;O8#7~k0V8arDo6Q|gpL@{A7fu&_q+F<`mLBLAH<;LRjZ3ENwG@++{@N1 z5;oL4d4fJNA!-FzVrANxP==ljYv4{v?RMiR(Z0=F2CkidgRDwo|I}5hvie9mk}LTy z==F}j=!zb~jepBD%NklSbpU*+5mUS(G(aU@PNeeFC%-`#NuABtRD>!kjS|Qs^s??M z(ugA(Fsul3z#j#X_a59#z_l9^(i0BC%Xw}gOLzWq_9-KJbySCdwFK^cySVtUCY~v* zlbv&6DNVDgVl;cxekZax2o0p`=Q~`@`DTL6sl=I3O1ckn7AFmy?G-#*UA1AkvxfEB zvEWugwGB9?6!g^4|K)07R%=KcjDxP#JHH}i#$proDMoPF#V*zJ>>yasmLJm)qwH-p zgxZ?($UChY;E7P-NIZw4{4++qS&YSd3xQ1^+)@lv%j`h zzr0=Lt?TZr=iDH2|EbhPUm&6fiT5GO^Ai_!{qdHYV4%}t0 zR{Jr27pY!^-sKX7Lg{<)=@SVM)uY4rkjibnjqOF6l{If+t_oStzVgwEtJAYHXb&1i zuU<3UvdglDM!NioZ-WBhULM^+WEF2E0T(lKr1$Qy2e%cUD~%5$16%3dDEgl&vhEj! zH{!fgSdBr=z@C%)5#B`aN)$pxnmF5ab7nW8huWks7l1HgWMbLH1YS@&G z*_5Ku)4qjM&6}}qV&%Q01~iucD7Vn}B##~eztF`B?c zqP?ZHlMQ2+P2WeV1}#rf3*x|S>NF<1KF)mSYz2m6w+7W3HMKBz?$4fo6u?!phgPk{ zav9zMxTS!2VKsiG6^O}G?=NeJ=Qgbi+nM5J%?nra`7OReynd%;5hT&UHJx9TbZy*Gky=XUDS!CceeB? zhF@|&3gAI$Pz%n(rI|ElhM}5x)y2H!g-2Jn7?>pBE)iV!T0M3g^t}5!#;*9EIop5u zLtaclr>$3#-jPjp0U% z0xcJ(38=x)o*3TcErXjgHL6cz%S82LqfO`4F-O>Yt*i`Q@CWMZX1diyT~$NVXX9FW z&xh}3elCdB{)4oyS7e?S5}plt9!&rKby1ujUyX()SEyZL*(G>HCr2Hw|Rx2 zC$#xZ-f<~}3DYGMy_NIK4FK+1v@ySGVJ9ZxuK`?!_fvFBUUs!jTo{R7pE+8roBz3O zJ|`{}Mi3UvL#u81Zh)QE27QW&$_63azrR5A*5W-3+&y6t%a!ZU+s|{6o@`f5({)hz za?U0`;!-I>SdiJ;nUZW!bfqOw2?8gCOxf|%>}=P0;2z-{m8pKfZI$Kt3$M7;=V}AR zn!&w=$0E3Yo7jFP^65-W?fZ@H^o?*6Yh%9!=d~1?18~2a+eQA7L=`=&IWJKA6uZX1 z9z#dak?r|RGWr*JDfKDFU{8cCZH(9xOXU9Lsy5R2R|OK!_EXJjDf+;R8JMj^O-vMJ+RNOG#yEbu@qYs~jW*23M&J4CN5AyQXq{4eZES51dfIr9bdudosrd>e$XmzGQE?Srd>- zExC4kWE{|?dV(gm^PII?O{}v0MGlnlYbiK(26JF_Mej}mn@46Xqd>|e>)9@6zL{DW z#NbB9l%wXSzNuOhMe6NTlcg&NAb{Xs5L|0k8Qpb8TuMYN3Et9dNTmjOrEYqyq$7sl ze)f~ywSAUWoJ9A7!s|y3NOFTZK_tSY$vh*Qup?3QXxs^dE9h0j?b^78AF9eB=ymT( zR9>pmY%S$U06>AaqzSr~BpPa=#tizcafReln`lkBgeVk;mZ8QN1|qlzb2=0K zZKT*ZkdPdZXqyBuZkcn97n{VNp)o(gDO8nC?ButkwjQGV02!~K!~G(-EV%uu;F z8c#N;9tzix=@h|5dSz``<76^*q)xG2cQvdya_`pDfiy)5!4))|{*8CAXJ}JPpteS_`^PieK9oP$N;$rF8NdV9;7>H8wieio|s$^#)CRkYpdTcO@{)@);PDZ$x=I3xe0-**VDC- zZr_7bs;cVd*@`RTVlLG(N@)d}9>Ha5*Nx9Y@kvMy-@57v57_wk>iqaAQuHMOi}3oH zv()fRvvp&dZas&6iVbf=AkQMZ&;GJUXAR)I*Ct+kv*c|U6$`B#(D6wa?=eat;msDo zE#~OE4&ZP6tYZ~HY~uR2dwJ%E1t1Vy(&CS@9^3&v=OMlZ7yK-bR%!3(vO>_!>~c=$|AR&H z)tpuhQ{KwyqTrqd`QqxPt|6kcznRa> zqcEK%&Czd0o;Vfx8yBqmBhOt5{}}+cZR-~L6rVQ)R(~2sGFq!X9YG(1E7z2$EK03( z>!v+w>!I1*%;_4>I8{TaqkhgD-|0cJSyw8UITYz;mvNr)Zqa=y`q`Ebpe5&^$6+l4)1}wfH~l1w96#z) zte4Y;AQ-dNSi4R&DJ#la-e*Pjyu)x=_^9LUAP0Q|(5bYotfGu04!1Cxqf69_Wnr`H zSN)WT^)J)fQjutSvDH-*^tPe!rpf9wI`8j`EbVH^Ug>l=foo$&x}Q2-Pz|%oWmFg% zqSpp^u}%SbdO_|FO;uI_3kFEdj5v?Pe;7Tpt`xhD#v3$@;2ndi^0ZB?5}97wux&Q1 zdr0bvby6=0X5wU8x)LW*5!M$`O3VGq^cHs_XNd(S7-_zu%C59)5Y0!FO&*-O9G95_ zx^bt8{nnvQ_Eh^v4L6kN$2gYIg;;BWbZX)ITCHl9;A2@MkqMF(;!7l>S5NhcRs$66 zl}!0w*Cvkdb=wkO;o^oP;XHpdswW}kNb=cAQFWrtC1SNr277wZBLs@$k@i6tbx6v# zN*9b?7lx+4A<_cvDq8YQG!7U7g0k5VE=Tojmn@m0H{Y#-Z{rge@ImJjUQ%3J)@rI3 z;HO{85pOk%sZv*=ww28l3%Hr)8aJ;zo9{?~9NnzsG=$F%MRjjOM(_x#1|K9b(oWO z#pEk%>zuEQzeib_6PTZxlu$3cb)voO1w&h zC$mN`V|aB+V3B~^v}l#ZcrOdMTZi=|GXDWA5vmoF;CYQe=%Z7+0C25Uw8MmzSxTx`E4aJ9dLJP`>^8HH*YwwguC ziQJNW{+q14y)ZOMQ&0V$&BFTNu3*9{Ys>HIb5WP7R!APfVdyvhU1D8%;}uUVs_^91 zzzbT>_`Va&;F+v zcm#^XwcPlZyuY|2ty=|2N7VCL5R#}yKOLfhq%PBxg*dB0&kXU^t8Wp}dl;H-IiQne zBfW>fWoI=4<9A@2j}Ru681!gKn5lW-Mhq?n?=h`{}}#krQiJ=ES|IhIQ5t6L|Z zGt=Qh2IvbCEuOe}oj2Vo=k~2ZA=+iTNYu~Al#uu?=H&KKZ_k=7C~GLV)3gFadYG%{ zvK)<3r!r$^6KC=``T3I12L=~T35PGCnpPenKk30%v(7sYQuBs2XaDtJ7s|oQ!Wjh~Tjmso3Y2U(V z)0~YJjZ|zbk*<-tN{ zCD!5Mdhned73K>#tM2Ek6&Xxy80M_kO1HWflGnPb_@{tg>*7tD;wnu6T({Q%oPqT< zA6yAl2sHFE&~RDz1-zDfaPP9>`j&@kIoz-Z=dCQ%6Qpm6rq{SjS69$NtCi*-1N15G zFF<>>EIw$lY~>JzVGt7fwcv&+L_?+W-i-xE~Q=lz-m=q0F#3isgtSpL%l{VNuk;#R=53B4H5>xu<6 zz?QJY%JLK(a@IL!>l*g1){!KB9Po6!&W}VGw6Uhl`aCj|rbJl0U z#L}0M7V1{UVXG<#GSE)-atli_T1QyRHksM4#ru|$ekIC{)ad;s+7^MkRP~&t7%e0q zMQ{2j@EB>$X|Jo9q8zmfeI|Y78nlf!CmN0*4=))7I6~WPQJzBJt5B)>LnK*(LVJ0Y zL88xqaBXN_#)wm&zpU4POs|{?JcyAWf~30gad)HGkEIEfAkm8T4vjr5BY)=%^kK;L z<$vf?9QT3%#YN+&L9+ub=YlADA3L6RyH$I% zuD@KB*-jh(`XMTCrfTjEgR%MhA1hPtY22vW#nWoC+s!VeL0PP)Q9({EzV z)m~7dT(zxfhuboHW+*XVVI`x3wemPMXRd-lr6#Ee84nLX)N26uE*+jMzAE&wq7}pB zwGlSoSkD`q?N|CRn;)94E%HDDPUAt zDeU593ET*p(e71J`xxANuX3=d0bF2cSN<~0M^?hXeLp}oZMRKLi;~0iepC64e;aE2 z`?fs8KEhhH25|>*|9PChoqcsBZpNPMF30x+#-!bI;*93a zSS%(@0m*oo%k8^{Q~7h;>t>DMD(^jlKE-Dc@-pu#*z!%l@pf|h5Ir)o0o;p9bzK0r zbe5nLa666tNtyob#qsif5EFtbgXc!~qh5O2i^mVv5E}n3mjbVOK&ChsyP8H%N()?C ziR>7O)nE+YRa+8_Id|vXBk@C|#SgK2%X!+6_H1v+Z^ilIB*P|8utQj74ubC&63g;* z`|C|keTu18+xj6x!S1SWiK9-wB)}ze6ZQ8@mkpi|;F?&2_{}fhd^@gPmHI>q ziA6ZLvxJFOHhe5%R3dQzYDkVB(k;9ff@#{kdFZDY$&oMHx&8xX3+Z>6INQY48P)(N zq!qDk)03uMf3;Zrr@=a7Bdmmq)m0&nExHARs|F|?c@Y%NU2$7wptd!DJN8qc6E8G# z1S)Tt?r*0cZAfEP^}C+QQ@NK}efD+JLbr8e*4U@G79ipc0+eZixU8c-#jY=x)%WLt z!Q%}Y1+XdYbpdM)1{i;rB;4r+;PbadZTfNTIWl~ zPJH50TjeAu>PcHQTn>;wm;eM)ViS^R!?+SH9KqdV1K1aqK2U9={M{$s_0cE)m07h> zX^>U@kKcas$?rb;-AAA7fBddt_@tzqwhOi5MgQ&Ze)q}mVC*L!{TJNykH*&prFQBf z{pgeb_0j(C`>)@9QUnervz9c3L{nZ$gc3kuh%@11+&q?*^8f229QfOhKH86N{I&~W z7oZs7*n|69z{7v-zx}V@0yO_b*Gr`i6q;p7EZFM+&ZuMzQh)8^kdhHJpM(g~U){Ae&>oK^4mxfNo4iJyQ zm^F?GQ-|WP`9`jqd%bFAuYSUR%r`e|o!I?T@H^Utb)){%Nhd{J(8~{{AYgvhlwjU$YmR mf_>BSZGU~(S_3od5BpV~E$uupm0N+1VeoYIb6Mw<&;$Te17r~Z literal 0 HcmV?d00001 diff --git a/admin/core/lib/ReduxFramework/sample/patterns/triangular_@2X.png b/admin/core/lib/ReduxFramework/sample/patterns/triangular_@2X.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5b88afe33834676ed32ded4abdd5cad77f9d18 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#S3?yB+?l}S}o&cW^*Bv|dZQs6k^X6T()qUTYRfig`y__XIJC~7 zH8zoJ_aTw8R?RnD!8b&)Nc=p0Uwhu)WCE&Cwd?QPe{A=*YnrJ*=P-D>`njxgN@xNA DWr0001TP)t-szQ4b{ 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

@`0LnB@dN^A4h#<*l{)G>*t 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 literal 0 HcmV?d00001 diff --git a/admin/core/lib/ReduxFramework/sample/presets/preset2.png b/admin/core/lib/ReduxFramework/sample/presets/preset2.png new file mode 100644 index 0000000000000000000000000000000000000000..de80d93a4a6746a43fd8048a8cfce329beb6b6ee GIT binary patch literal 33523 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 + } else { + add_action( 'plugins_loaded', array( $this, 'initSettings' ), 10 ); + } + + } + + public function initSettings() { + + // Just for demo purposes. Not needed per say. + $this->theme = wp_get_theme(); + + // Set the default arguments + $this->setArguments(); + + // Set a few help tabs so you can see how it's done + $this->setHelpTabs(); + + // Create the sections and fields + $this->setSections(); + + if ( ! isset( $this->args['opt_name'] ) ) { // No errors please + return; + } + + // If Redux is running as a plugin, this will remove the demo notice and links + //add_action( 'redux/loaded', array( $this, 'remove_demo' ) ); + + // Function to test the compiler hook and demo CSS output. + // Above 10 is a priority, but 2 in necessary to include the dynamically generated CSS to be sent to the function. + //add_filter('redux/options/'.$this->args['opt_name'].'/compiler', array( $this, 'compiler_action' ), 10, 3); + + // Change the arguments after they've been declared, but before the panel is created + //add_filter('redux/options/'.$this->args['opt_name'].'/args', array( $this, 'change_arguments' ) ); + + // Change the default value of a field after it's been set, but before it's been useds + //add_filter('redux/options/'.$this->args['opt_name'].'/defaults', array( $this,'change_defaults' ) ); + + // Dynamically add a section. Can be also used to modify sections/fields + //add_filter('redux/options/' . $this->args['opt_name'] . '/sections', array($this, 'dynamic_section')); + + $this->ReduxFramework = new ReduxFramework( $this->sections, $this->args ); + } + + /** + * This is a test function that will let you see when the compiler hook occurs. + * It only runs if a field set with compiler=>true is changed. + * */ + function compiler_action( $options, $css, $changed_values ) { + echo '

The compiler hook has run!

'; + echo "
";
+                print_r( $changed_values ); // Values that have changed since the last save
+                echo "
"; + //print_r($options); //Option values + //print_r($css); // Compiler selector CSS values compiler => array( CSS SELECTORS ) + + /* + // Demo of how to use the dynamic CSS and write your own static CSS file + $filename = dirname(__FILE__) . '/style' . '.css'; + global $wp_filesystem; + if( empty( $wp_filesystem ) ) { + require_once( ABSPATH .'/wp-admin/includes/file.php' ); + WP_Filesystem(); + } + + if( $wp_filesystem ) { + $wp_filesystem->put_contents( + $filename, + $css, + FS_CHMOD_FILE // predefined mode settings for WP files + ); + } + */ + } + + /** + * Custom function for filtering the sections array. Good for child themes to override or add to the sections. + * Simply include this function in the child themes functions.php file. + * NOTE: the defined constants for URLs, and directories will NOT be available at this point in a child theme, + * so you must use get_template_directory_uri() if you want to use any of the built in icons + * */ + function dynamic_section( $sections ) { + //$sections = array(); + $sections[] = array( + 'title' => __( 'Section via hook', 'redux-framework-demo' ), + 'desc' => __( '

This is a section created by adding a filter to the sections array. Can be used by child themes to add/remove sections from the options.

', 'redux-framework-demo' ), + 'icon' => 'el-icon-paper-clip', + // Leave this as a blank section, no options just some intro text set above. + 'fields' => array() + ); + + return $sections; + } + + /** + * Filter hook for filtering the args. Good for child themes to override or add to the args array. Can also be used in other functions. + * */ + function change_arguments( $args ) { + //$args['dev_mode'] = true; + + return $args; + } + + /** + * Filter hook for filtering the default value of any given field. Very useful in development mode. + * */ + function change_defaults( $defaults ) { + $defaults['str_replace'] = 'Testing filter hook!'; + + return $defaults; + } + + // Remove the demo link and the notice of integrated demo from the redux-framework plugin + function remove_demo() { + + // Used to hide the demo mode link from the plugin page. Only used when Redux is a plugin. + if ( class_exists( 'ReduxFrameworkPlugin' ) ) { + remove_filter( 'plugin_row_meta', array( + ReduxFrameworkPlugin::instance(), + 'plugin_metalinks' + ), null, 2 ); + + // Used to hide the activation notice informing users of the demo panel. Only used when Redux is a plugin. + remove_action( 'admin_notices', array( ReduxFrameworkPlugin::instance(), 'admin_notices' ) ); + } + } + + public function setSections() { + + /** + * Used within different fields. Simply examples. Search for ACTUAL DECLARATION for field examples + * */ + // Background Patterns Reader + $sample_patterns_path = ReduxFramework::$_dir . '../sample/patterns/'; + $sample_patterns_url = ReduxFramework::$_url . '../sample/patterns/'; + $sample_patterns = array(); + + if ( is_dir( $sample_patterns_path ) ) : + + if ( $sample_patterns_dir = opendir( $sample_patterns_path ) ) : + $sample_patterns = array(); + + while ( ( $sample_patterns_file = readdir( $sample_patterns_dir ) ) !== false ) { + + if ( stristr( $sample_patterns_file, '.png' ) !== false || stristr( $sample_patterns_file, '.jpg' ) !== false ) { + $name = explode( '.', $sample_patterns_file ); + $name = str_replace( '.' . end( $name ), '', $sample_patterns_file ); + $sample_patterns[] = array( + 'alt' => $name, + 'img' => $sample_patterns_url . $sample_patterns_file + ); + } + } + endif; + endif; + + ob_start(); + + $ct = wp_get_theme(); + $this->theme = $ct; + $item_name = $this->theme->get( 'Name' ); + $tags = $this->theme->Tags; + $screenshot = $this->theme->get_screenshot(); + $class = $screenshot ? 'has-screenshot' : ''; + + $customize_title = sprintf( __( 'Customize “%s”', 'redux-framework-demo' ), $this->theme->display( 'Name' ) ); + + ?> +
+ + + + <?php esc_attr_e( 'Current theme preview', 'redux-framework-demo' ); ?> + + + <?php esc_attr_e( 'Current theme preview', 'redux-framework-demo' ); ?> + + +

theme->display( 'Name' ); ?>

+ +
+
    +
  • theme->display( 'Author' ) ); ?>
  • +
  • theme->display( 'Version' ) ); ?>
  • +
  • ' . __( 'Tags', 'redux-framework-demo' ) . ': '; ?>theme->display( 'Tags' ) ); ?>
  • +
+

theme->display( 'Description' ); ?>

+ theme->parent() ) { + printf( '

' . __( 'This child theme requires its parent theme, %2$s.', 'redux-framework-demo' ) . '

', __( 'http://codex.wordpress.org/Child_Themes', 'redux-framework-demo' ), $this->theme->parent()->display( 'Name' ) ); + } + ?> + +
+
+ + get_contents( dirname( __FILE__ ) . '/info-html.html' ); + } + + // ACTUAL DECLARATION OF SECTIONS + $this->sections[] = array( + 'title' => __( 'Home Settings', 'redux-framework-demo' ), + '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: https://github.com/ReduxFramework/Redux-Framework', 'redux-framework-demo' ), + 'icon' => 'el-icon-home', + // 'submenu' => false, // Setting submenu to false on a given section will hide it from the WordPress sidebar menu! + 'fields' => array( + + array( + 'id' => 'opt-web-fonts', + 'type' => 'media', + 'title' => __( 'Web Fonts', 'redux-framework-demo' ), + 'compiler' => 'true', + 'mode' => false, + // Can be set to false to allow any media type, or can also be set to any mime type. + 'desc' => __( 'Basic media uploader with disabled URL input field.', 'redux-framework-demo' ), + 'subtitle' => __( 'Upload any media using the WordPress native uploader', 'redux-framework-demo' ), + 'hint' => array( + //'title' => '', + 'content' => 'This is a hint tool-tip for the webFonts field.

Add any HTML based text you like here.', + ) + ), + array( + 'id' => 'section-media-checkbox', + 'type' => 'switch', + 'title' => __( 'Section Show', 'redux-framework-demo' ), + 'subtitle' => __( 'With the "section" field you can create indent option sections.', 'redux-framework-demo' ), + + ), + array( + 'id' => 'section-media-start', + 'type' => 'section', + 'title' => __( 'Media Options', 'redux-framework-demo' ), + 'subtitle' => __( 'With the "section" field you can create indent option sections.', 'redux-framework-demo' ), + 'indent' => true, // Indent all options below until the next 'section' option is set. + 'required' => array( 'section-media-checkbox', "=", 1 ), + ), + array( + 'id' => 'opt-media', + 'type' => 'media', + 'url' => true, + 'title' => __( 'Media w/ URL', 'redux-framework-demo' ), + 'compiler' => 'true', + //'mode' => false, // Can be set to false to allow any media type, or can also be set to any mime type. + 'desc' => __( 'Basic media uploader with disabled URL input field.', 'redux-framework-demo' ), + 'subtitle' => __( 'Upload any media using the WordPress native uploader', 'redux-framework-demo' ), + 'default' => array( 'url' => 'http://s.wordpress.org/style/images/codeispoetry.png' ), + //'hint' => array( + // 'title' => 'Hint Title', + // 'content' => 'This is a hint for the media field with a Title.', + //) + ), + array( + 'id' => 'section-media-end', + 'type' => 'section', + 'indent' => false, // Indent all options below until the next 'section' option is set. + 'required' => array( 'section-media-checkbox', "=", 1 ), + ), + array( + 'id' => 'media-no-url', + 'type' => 'media', + 'title' => __( 'Media w/o URL', 'redux-framework-demo' ), + 'desc' => __( 'This represents the minimalistic view. It does not have the preview box or the display URL in an input box. ', 'redux-framework-demo' ), + 'subtitle' => __( 'Upload any media using the WordPress native uploader', 'redux-framework-demo' ), + ), + array( + 'id' => 'media-no-preview', + 'type' => 'media', + 'preview' => false, + 'title' => __( 'Media No Preview', 'redux-framework-demo' ), + 'desc' => __( 'This represents the minimalistic view. It does not have the preview box or the display URL in an input box. ', 'redux-framework-demo' ), + 'subtitle' => __( 'Upload any media using the WordPress native uploader', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-gallery', + 'type' => 'gallery', + 'title' => __( 'Add/Edit Gallery', 'redux-framework-demo' ), + 'subtitle' => __( 'Create a new Gallery by selecting existing or uploading new images using the WordPress native uploader', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-slider-label', + 'type' => 'slider', + 'title' => __( 'Slider Example 1', 'redux-framework-demo' ), + 'subtitle' => __( 'This slider displays the value as a label.', 'redux-framework-demo' ), + 'desc' => __( 'Slider description. Min: 1, max: 500, step: 1, default value: 250', 'redux-framework-demo' ), + 'default' => 250, + 'min' => 1, + 'step' => 1, + 'max' => 500, + 'display_value' => 'label' + ), + array( + 'id' => 'opt-slider-text', + 'type' => 'slider', + 'title' => __( 'Slider Example 2 with Steps (5)', 'redux-framework-demo' ), + 'subtitle' => __( 'This example displays the value in a text box', 'redux-framework-demo' ), + 'desc' => __( 'Slider description. Min: 0, max: 300, step: 5, default value: 75', 'redux-framework-demo' ), + 'default' => 75, + 'min' => 0, + 'step' => 5, + 'max' => 300, + 'display_value' => 'text' + ), + array( + 'id' => 'opt-slider-select', + 'type' => 'slider', + 'title' => __( 'Slider Example 3 with two sliders', 'redux-framework-demo' ), + 'subtitle' => __( 'This example displays the values in select boxes', 'redux-framework-demo' ), + 'desc' => __( 'Slider description. Min: 0, max: 500, step: 5, slider 1 default value: 100, slider 2 default value: 300', 'redux-framework-demo' ), + 'default' => array( + 1 => 100, + 2 => 300, + ), + 'min' => 0, + 'step' => 5, + 'max' => '500', + 'display_value' => 'select', + 'handles' => 2, + ), + array( + 'id' => 'opt-slider-float', + 'type' => 'slider', + 'title' => __( 'Slider Example 4 with float values', 'redux-framework-demo' ), + 'subtitle' => __( 'This example displays float values', 'redux-framework-demo' ), + 'desc' => __( 'Slider description. Min: 0, max: 1, step: .1, default value: .5', 'redux-framework-demo' ), + 'default' => .5, + 'min' => 0, + 'step' => .1, + 'max' => 1, + 'resolution' => 0.1, + 'display_value' => 'text' + ), + array( + 'id' => 'opt-spinner', + 'type' => 'spinner', + 'title' => __( 'JQuery UI Spinner Example 1', 'redux-framework-demo' ), + 'desc' => __( 'JQuery UI spinner description. Min:20, max: 100, step:20, default value: 40', 'redux-framework-demo' ), + 'default' => '40', + 'min' => '20', + 'step' => '20', + 'max' => '100', + ), + array( + 'id' => 'switch-on', + 'type' => 'switch', + 'title' => __( 'Switch On', 'redux-framework-demo' ), + 'subtitle' => __( 'Look, it\'s on!', 'redux-framework-demo' ), + 'default' => true, + ), + array( + 'id' => 'switch-off', + 'type' => 'switch', + 'title' => __( 'Switch Off', 'redux-framework-demo' ), + 'subtitle' => __( 'Look, it\'s on!', 'redux-framework-demo' ), + //'options' => array('on', 'off'), + 'default' => false, + ), + array( + 'id' => 'switch-parent', + 'type' => 'switch', + 'title' => __( 'Switch - Nested Children, Enable to show', 'redux-framework-demo' ), + 'subtitle' => __( 'Look, it\'s on! Also hidden child elements!', 'redux-framework-demo' ), + 'default' => 0, + 'on' => 'Enabled', + 'off' => 'Disabled', + ), + array( + 'id' => 'switch-child1', + 'type' => 'switch', + 'required' => array( 'switch-parent', '=', '1' ), + 'title' => __( 'Switch - This and the next switch required for patterns to show', 'redux-framework-demo' ), + 'subtitle' => __( 'Also called a "fold" parent.', 'redux-framework-demo' ), + 'desc' => __( 'Items set with a fold to this ID will hide unless this is set to the appropriate value.', 'redux-framework-demo' ), + 'default' => false, + ), + array( + 'id' => 'switch-child2', + 'type' => 'switch', + 'required' => array( 'switch-parent', '=', '1' ), + 'title' => __( 'Switch2 - Enable the above switch and this one for patterns to show', 'redux-framework-demo' ), + 'subtitle' => __( 'Also called a "fold" parent.', 'redux-framework-demo' ), + 'desc' => __( 'Items set with a fold to this ID will hide unless this is set to the appropriate value.', 'redux-framework-demo' ), + 'default' => false, + ), + array( + 'id' => 'opt-patterns', + 'type' => 'image_select', + 'tiles' => true, + 'required' => array( + array( 'switch-child1', 'equals', 1 ), + array( 'switch-child2', 'equals', 1 ), + ), + 'title' => __( 'Images Option (with pattern=>true)', 'redux-framework-demo' ), + 'subtitle' => __( 'Select a background pattern.', 'redux-framework-demo' ), + 'default' => 0, + 'options' => $sample_patterns + , + ), + array( + 'id' => 'opt-homepage-layout', + 'type' => 'sorter', + 'title' => 'Layout Manager Advanced', + 'subtitle' => 'You can add multiple drop areas or columns.', + 'compiler' => 'true', + 'options' => array( + 'enabled' => array( + 'highlights' => 'Highlights', + 'slider' => 'Slider', + 'staticpage' => 'Static Page', + 'services' => 'Services' + ), + 'disabled' => array(), + 'backup' => array(), + ), + 'limits' => array( + 'disabled' => 1, + 'backup' => 2, + ), + ), + array( + 'id' => 'opt-homepage-layout-2', + 'type' => 'sorter', + 'title' => 'Homepage Layout Manager', + 'desc' => 'Organize how you want the layout to appear on the homepage', + 'compiler' => 'true', + 'options' => array( + 'disabled' => array( + 'highlights' => 'Highlights', + 'slider' => 'Slider', + ), + 'enabled' => array( + 'staticpage' => 'Static Page', + 'services' => 'Services' + ), + ), + ), + array( + 'id' => 'opt-slides', + 'type' => 'slides', + 'title' => __( 'Slides Options', 'redux-framework-demo' ), + 'subtitle' => __( 'Unlimited slides with drag and drop sortings.', 'redux-framework-demo' ), + 'desc' => __( 'This field will store all slides values into a multidimensional array to use into a foreach loop.', 'redux-framework-demo' ), + 'placeholder' => array( + 'title' => __( 'This is a title', 'redux-framework-demo' ), + 'description' => __( 'Description Here', 'redux-framework-demo' ), + 'url' => __( 'Give us a link!', 'redux-framework-demo' ), + ), + ), + array( + 'id' => 'opt-presets', + 'type' => 'image_select', + 'presets' => true, + 'title' => __( 'Preset', 'redux-framework-demo' ), + 'subtitle' => __( 'This allows you to set a json string or array to override multiple preferences in your theme.', 'redux-framework-demo' ), + 'default' => 0, + 'desc' => __( 'This allows you to set a json string or array to override multiple preferences in your theme.', 'redux-framework-demo' ), + 'options' => array( + '1' => array( + 'alt' => 'Preset 1', + 'img' => ReduxFramework::$_url . '../sample/presets/preset1.png', + 'presets' => array( + 'switch-on' => 1, + 'switch-off' => 1, + 'switch-parent' => 1 + ) + ), + '2' => array( + 'alt' => 'Preset 2', + 'img' => ReduxFramework::$_url . '../sample/presets/preset2.png', + 'presets' => '{"opt-slider-label":"1", "opt-slider-text":"10"}' + ), + ), + ), + array( + 'id' => 'opt-typography', + 'type' => 'typography', + 'title' => __( 'Typography', 'redux-framework-demo' ), + //'compiler' => true, // Use if you want to hook in your own CSS compiler + 'google' => true, + // Disable google fonts. Won't work if you haven't defined your google api key + 'font-backup' => true, + // Select a backup non-google font in addition to a google font + //'font-style' => false, // Includes font-style and weight. Can use font-style or font-weight to declare + //'subsets' => false, // Only appears if google is true and subsets not set to false + //'font-size' => false, + //'line-height' => false, + //'word-spacing' => true, // Defaults to false + //'letter-spacing'=> true, // Defaults to false + //'color' => false, + //'preview' => false, // Disable the previewer + 'all_styles' => true, + // Enable all Google Font style/weight variations to be added to the page + 'output' => array( 'h2.site-description, .entry-title' ), + // An array of CSS selectors to apply this font style to dynamically + 'compiler' => array( 'h2.site-description-compiler' ), + // An array of CSS selectors to apply this font style to dynamically + 'units' => 'px', + // Defaults to px + 'subtitle' => __( 'Typography option with each property can be called individually.', 'redux-framework-demo' ), + 'default' => array( + 'color' => '#333', + 'font-style' => '700', + 'font-family' => 'Abel', + 'google' => true, + 'font-size' => '33px', + 'line-height' => '40px' + ), + ), + ), + ); + + $this->sections[] = array( + 'type' => 'divide', + ); + + $this->sections[] = array( + 'icon' => 'el-icon-cogs', + 'title' => __( 'General Settings', 'redux-framework-demo' ), + 'fields' => array( + array( + 'id' => 'opt-layout', + 'type' => 'image_select', + 'compiler' => true, + 'title' => __( 'Main Layout', 'redux-framework-demo' ), + 'subtitle' => __( 'Select main content and sidebar alignment. Choose between 1, 2 or 3 column layout.', 'redux-framework-demo' ), + 'options' => array( + '1' => array( + 'alt' => '1 Column', + 'img' => ReduxFramework::$_url . 'assets/img/1col.png' + ), + '2' => array( + 'alt' => '2 Column Left', + 'img' => ReduxFramework::$_url . 'assets/img/2cl.png' + ), + '3' => array( + 'alt' => '2 Column Right', + 'img' => ReduxFramework::$_url . 'assets/img/2cr.png' + ), + '4' => array( + 'alt' => '3 Column Middle', + 'img' => ReduxFramework::$_url . 'assets/img/3cm.png' + ), + '5' => array( + 'alt' => '3 Column Left', + 'img' => ReduxFramework::$_url . 'assets/img/3cl.png' + ), + '6' => array( + 'alt' => '3 Column Right', + 'img' => ReduxFramework::$_url . 'assets/img/3cr.png' + ) + ), + 'default' => '2' + ), + array( + 'id' => 'opt-textarea', + 'type' => 'textarea', + 'required' => array( 'layout', 'equals', '1' ), + 'title' => __( 'Tracking Code', 'redux-framework-demo' ), + 'subtitle' => __( 'Paste your Google Analytics (or other) tracking code here. This will be added into the footer template of your theme.', 'redux-framework-demo' ), + 'validate' => 'js', + 'desc' => 'Validate that it\'s javascript!', + ), + array( + 'id' => 'opt-ace-editor-css', + 'type' => 'ace_editor', + 'title' => __( 'CSS Code', 'redux-framework-demo' ), + 'subtitle' => __( 'Paste your CSS code here.', 'redux-framework-demo' ), + 'mode' => 'css', + 'theme' => 'monokai', + 'desc' => 'Possible modes can be found at http://ace.c9.io/.', + 'default' => "#header{\nmargin: 0 auto;\n}" + ), + /* + array( + 'id' => 'opt-ace-editor-js', + 'type' => 'ace_editor', + 'title' => __('JS Code', 'redux-framework-demo'), + 'subtitle' => __('Paste your JS code here.', 'redux-framework-demo'), + 'mode' => 'javascript', + 'theme' => 'chrome', + 'desc' => 'Possible modes can be found at http://ace.c9.io/.', + 'default' => "jQuery(document).ready(function(){\n\n});" + ), + array( + 'id' => 'opt-ace-editor-php', + 'type' => 'ace_editor', + 'title' => __('PHP Code', 'redux-framework-demo'), + 'subtitle' => __('Paste your PHP code here.', 'redux-framework-demo'), + 'mode' => 'php', + 'theme' => 'chrome', + 'desc' => 'Possible modes can be found at http://ace.c9.io/.', + 'default' => '' + ), + */ + array( + 'id' => 'opt-editor', + 'type' => 'editor', + 'title' => __( 'Footer Text', 'redux-framework-demo' ), + 'subtitle' => __( 'You can use the following shortcodes in your footer text: [wp-url] [site-url] [theme-url] [login-url] [logout-url] [site-title] [site-tagline] [current-year]', 'redux-framework-demo' ), + 'default' => 'Powered by Redux Framework.', + ), + array( + 'id' => 'password', + 'type' => 'password', + 'username' => true, + 'title' => 'SMTP Account', + //'placeholder' => array('username' => 'Enter your Username') + ) + ) + ); + + $this->sections[] = array( + 'icon' => 'el-icon-website', + 'title' => __( 'Styling Options', 'redux-framework-demo' ), + 'subsection' => true, + 'fields' => array( + array( + 'id' => 'opt-select-stylesheet', + 'type' => 'select', + 'title' => __( 'Theme Stylesheet', 'redux-framework-demo' ), + 'subtitle' => __( 'Select your themes alternative color scheme.', 'redux-framework-demo' ), + 'options' => array( 'default.css' => 'default.css', 'color1.css' => 'color1.css' ), + 'default' => 'default.css', + ), + array( + 'id' => 'opt-color-background', + 'type' => 'color', + 'output' => array( '.site-title' ), + 'title' => __( 'Body Background Color', 'redux-framework-demo' ), + 'subtitle' => __( 'Pick a background color for the theme (default: #fff).', 'redux-framework-demo' ), + 'default' => '#FFFFFF', + 'validate' => 'color', + ), + array( + 'id' => 'opt-background', + 'type' => 'background', + 'output' => array( 'body' ), + 'title' => __( 'Body Background', 'redux-framework-demo' ), + 'subtitle' => __( 'Body background with image, color, etc.', 'redux-framework-demo' ), + //'default' => '#FFFFFF', + ), + array( + 'id' => 'opt-color-footer', + 'type' => 'color', + 'title' => __( 'Footer Background Color', 'redux-framework-demo' ), + 'subtitle' => __( 'Pick a background color for the footer (default: #dd9933).', 'redux-framework-demo' ), + 'default' => '#dd9933', + 'validate' => 'color', + ), + array( + 'id' => 'opt-color-rgba', + 'type' => 'color_rgba', + 'title' => __( 'Color RGBA - BETA', 'redux-framework-demo' ), + 'subtitle' => __( 'Gives you the RGBA color. Still quite experimental. Use at your own risk.', 'redux-framework-demo' ), + 'default' => array( 'color' => '#dd9933', 'alpha' => '1.0' ), + 'output' => array( 'body' ), + 'mode' => 'background', + 'validate' => 'colorrgba', + ), + array( + 'id' => 'opt-color-header', + 'type' => 'color_gradient', + 'title' => __( 'Header Gradient Color Option', 'redux-framework-demo' ), + 'subtitle' => __( 'Only color validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'default' => array( + 'from' => '#1e73be', + 'to' => '#00897e' + ) + ), + array( + 'id' => 'opt-link-color', + 'type' => 'link_color', + 'title' => __( 'Links Color Option', 'redux-framework-demo' ), + 'subtitle' => __( 'Only color validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + //'regular' => false, // Disable Regular Color + //'hover' => false, // Disable Hover Color + //'active' => false, // Disable Active Color + //'visited' => true, // Enable Visited Color + 'default' => array( + 'regular' => '#aaa', + 'hover' => '#bbb', + 'active' => '#ccc', + ) + ), + array( + 'id' => 'opt-header-border', + 'type' => 'border', + 'title' => __( 'Header Border Option', 'redux-framework-demo' ), + 'subtitle' => __( 'Only color validation can be done on this field type', 'redux-framework-demo' ), + 'output' => array( '.site-header' ), + // An array of CSS selectors to apply this font style to + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'default' => array( + 'border-color' => '#1e73be', + 'border-style' => 'solid', + 'border-top' => '3px', + 'border-right' => '3px', + 'border-bottom' => '3px', + 'border-left' => '3px' + ) + ), + array( + 'id' => 'opt-spacing', + 'type' => 'spacing', + 'output' => array( '.site-header' ), + // An array of CSS selectors to apply this font style to + 'mode' => 'margin', + // absolute, padding, margin, defaults to padding + 'all' => true, + // Have one field that applies to all + //'top' => false, // Disable the top + //'right' => false, // Disable the right + //'bottom' => false, // Disable the bottom + //'left' => false, // Disable the left + //'units' => 'em', // You can specify a unit value. Possible: px, em, % + //'units_extended'=> 'true', // Allow users to select any type of unit + //'display_units' => 'false', // Set to false to hide the units if the units are specified + 'title' => __( 'Padding/Margin Option', 'redux-framework-demo' ), + 'subtitle' => __( 'Allow your users to choose the spacing or margin they want.', 'redux-framework-demo' ), + 'desc' => __( 'You can enable or disable any piece of this field. Top, Right, Bottom, Left, or Units.', 'redux-framework-demo' ), + 'default' => array( + 'margin-top' => '1px', + 'margin-right' => '2px', + 'margin-bottom' => '3px', + 'margin-left' => '4px' + ) + ), + array( + 'id' => 'opt-dimensions', + 'type' => 'dimensions', + 'units' => 'em', // You can specify a unit value. Possible: px, em, % + 'units_extended' => 'true', // Allow users to select any type of unit + 'title' => __( 'Dimensions (Width/Height) Option', 'redux-framework-demo' ), + 'subtitle' => __( 'Allow your users to choose width, height, and/or unit.', 'redux-framework-demo' ), + 'desc' => __( 'You can enable or disable any piece of this field. Width, Height, or Units.', 'redux-framework-demo' ), + 'default' => array( + 'width' => 200, + 'height' => 100, + ) + ), + array( + 'id' => 'opt-typography-body', + 'type' => 'typography', + 'title' => __( 'Body Font', 'redux-framework-demo' ), + 'subtitle' => __( 'Specify the body font properties.', 'redux-framework-demo' ), + 'google' => true, + 'default' => array( + 'color' => '#dd9933', + 'font-size' => '30px', + 'font-family' => 'Arial,Helvetica,sans-serif', + 'font-weight' => 'Normal', + ), + ), + array( + 'id' => 'opt-custom-css', + 'type' => 'textarea', + 'title' => __( 'Custom CSS', 'redux-framework-demo' ), + 'subtitle' => __( 'Quickly add some CSS to your theme by adding it to this block.', 'redux-framework-demo' ), + 'desc' => __( 'This field is even CSS validated!', 'redux-framework-demo' ), + 'validate' => 'css', + ), + array( + 'id' => 'opt-custom-html', + 'type' => 'textarea', + 'title' => __( 'Custom HTML', 'redux-framework-demo' ), + 'subtitle' => __( 'Just like a text box widget.', 'redux-framework-demo' ), + 'desc' => __( 'This field is even HTML validated!', 'redux-framework-demo' ), + 'validate' => 'html', + ), + ) + ); + + /** + * Note here I used a 'heading' in the sections array construct + * This allows you to use a different title on your options page + * instead of reusing the 'title' value. This can be done on any + * section - kp + */ + $this->sections[] = array( + 'icon' => 'el-icon-bullhorn', + 'title' => __( 'Field Validation', 'redux-framework-demo' ), + 'heading' => __( 'Validate ALL fields within Redux.', 'redux-framework-demo' ), + 'desc' => __( '

This is the Description. Again HTML is allowed2

', 'redux-framework-demo' ), + 'fields' => array( + array( + 'id' => 'opt-text-email', + 'type' => 'text', + 'title' => __( 'Text Option - Email Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'This is a little space under the Field Title in the Options table, additional info is good in here.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'email', + 'msg' => 'custom error message', + 'default' => 'test@test.com', + // 'text_hint' => array( + // 'title' => 'Valid Email Required!', + // 'content' => 'This field required a valid email address.' + // ) + ), + array( + 'id' => 'opt-text-post-type', + 'type' => 'text', + 'title' => __( 'Text Option with Data Attributes', 'redux-framework-demo' ), + 'subtitle' => __( 'You can also pass an options array if you want. Set the default to whatever you like.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'data' => 'post_type', + ), + array( + 'id' => 'opt-multi-text', + 'type' => 'multi_text', + 'title' => __( 'Multi Text Option - Color Validated', 'redux-framework-demo' ), + 'validate' => 'color', + 'subtitle' => __( 'If you enter an invalid color it will be removed. Try using the text "blue" as a color. ;)', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-text-url', + 'type' => 'text', + 'title' => __( 'Text Option - URL Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'This must be a URL.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'url', + 'default' => 'http://reduxframework.com', + // 'text_hint' => array( + // 'title' => '', + // 'content' => 'Please enter a valid URL in this field.' + // ) + ), + array( + 'id' => 'opt-text-numeric', + 'type' => 'text', + 'title' => __( 'Text Option - Numeric Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'This must be numeric.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'numeric', + 'default' => '0', + ), + array( + 'id' => 'opt-text-comma-numeric', + 'type' => 'text', + 'title' => __( 'Text Option - Comma Numeric Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'This must be a comma separated string of numerical values.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'comma_numeric', + 'default' => '0', + ), + array( + 'id' => 'opt-text-no-special-chars', + 'type' => 'text', + 'title' => __( 'Text Option - No Special Chars Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'This must be a alpha numeric only.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'no_special_chars', + 'default' => '0' + ), + array( + 'id' => 'opt-text-str_replace', + 'type' => 'text', + 'title' => __( 'Text Option - Str Replace Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'You decide.', 'redux-framework-demo' ), + 'desc' => __( 'This field\'s default value was changed by a filter hook!', 'redux-framework-demo' ), + 'validate' => 'str_replace', + 'str' => array( + 'search' => ' ', + 'replacement' => 'thisisaspace' + ), + 'default' => 'This is the default.' + ), + array( + 'id' => 'opt-text-preg_replace', + 'type' => 'text', + 'title' => __( 'Text Option - Preg Replace Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'You decide.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'preg_replace', + 'preg' => array( + 'pattern' => '/[^a-zA-Z_ -]/s', + 'replacement' => 'no numbers' + ), + 'default' => '0' + ), + array( + 'id' => 'opt-text-custom_validate', + 'type' => 'text', + 'title' => __( 'Text Option - Custom Callback Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'You decide.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate_callback' => 'redux_validate_callback_function', + 'default' => '0' + ), + array( + 'id' => 'opt-text-custom_validate-class', + 'type' => 'text', + 'title' => __( 'Text Option - Custom Callback Validated - Class', 'redux-framework-demo' ), + 'subtitle' => __( 'You decide.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate_callback' => array( $this, 'validate_callback_function' ), + // You can pass the current class + // Or pass the class name and method + //'validate_callback' => array( + // 'Redux_Framework_sample_config', + // 'validate_callback_function' + //), + 'default' => '0' + ), + array( + 'id' => 'opt-textarea-no-html', + 'type' => 'textarea', + 'title' => __( 'Textarea Option - No HTML Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'All HTML will be stripped', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'no_html', + 'default' => 'No HTML is allowed in here.' + ), + array( + 'id' => 'opt-textarea-html', + 'type' => 'textarea', + 'title' => __( 'Textarea Option - HTML Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'HTML Allowed (wp_kses)', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'html', //see http://codex.wordpress.org/Function_Reference/wp_kses_post + 'default' => 'HTML is allowed in here.' + ), + array( + 'id' => 'opt-textarea-some-html', + 'type' => 'textarea', + 'title' => __( 'Textarea Option - HTML Validated Custom', 'redux-framework-demo' ), + 'subtitle' => __( 'Custom HTML Allowed (wp_kses)', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'html_custom', + 'default' => '

Some HTML is allowed in here.

', + 'allowed_html' => array( '' ) //see http://codex.wordpress.org/Function_Reference/wp_kses + ), + array( + 'id' => 'opt-textarea-js', + 'type' => 'textarea', + 'title' => __( 'Textarea Option - JS Validated', 'redux-framework-demo' ), + 'subtitle' => __( 'JS will be escaped', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'validate' => 'js' + ), + ) + ); + + $this->sections[] = array( + 'icon' => 'el-icon-check', + 'title' => __( 'Radio/Checkbox Fields', 'redux-framework-demo' ), + 'desc' => __( '

This is the Description. Again HTML is allowed

', 'redux-framework-demo' ), + 'fields' => array( + array( + 'id' => 'opt-checkbox', + 'type' => 'checkbox', + 'title' => __( 'Checkbox Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'default' => '1'// 1 = on | 0 = off + ), + array( + 'id' => 'opt-multi-check', + 'type' => 'checkbox', + 'title' => __( 'Multi Checkbox Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + //Must provide key => value pairs for multi checkbox options + 'options' => array( + '1' => 'Opt 1', + '2' => 'Opt 2', + '3' => 'Opt 3' + ), + //See how std has changed? you also don't need to specify opts that are 0. + 'default' => array( + '1' => '1', + '2' => '0', + '3' => '0' + ) + ), + array( + 'id' => 'opt-checkbox-data', + 'type' => 'checkbox', + 'title' => __( 'Multi Checkbox Option (with menu data)', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'data' => 'menu' + ), + array( + 'id' => 'opt-checkbox-sidebar', + 'type' => 'checkbox', + 'title' => __( 'Multi Checkbox Option (with sidebar data)', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'data' => 'sidebars' + ), + array( + 'id' => 'opt-radio', + 'type' => 'radio', + 'title' => __( 'Radio Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + //Must provide key => value pairs for radio options + 'options' => array( + '1' => 'Opt 1', + '2' => 'Opt 2', + '3' => 'Opt 3' + ), + 'default' => '2' + ), + array( + 'id' => 'opt-radio-data', + 'type' => 'radio', + 'title' => __( 'Multi Checkbox Option (with menu data)', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'data' => 'menu' + ), + array( + 'id' => 'opt-image-select', + 'type' => 'image_select', + 'title' => __( 'Images Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + //Must provide key => value(array:title|img) pairs for radio options + 'options' => array( + '1' => array( 'title' => 'Opt 1', 'img' => 'images/align-none.png' ), + '2' => array( 'title' => 'Opt 2', 'img' => 'images/align-left.png' ), + '3' => array( 'title' => 'Opt 3', 'img' => 'images/align-center.png' ), + '4' => array( 'title' => 'Opt 4', 'img' => 'images/align-right.png' ) + ), + 'default' => '2' + ), + array( + 'id' => 'opt-image-select-layout', + 'type' => 'image_select', + 'title' => __( 'Images Option for Layout', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This uses some of the built in images, you can use them for layout options.', 'redux-framework-demo' ), + //Must provide key => value(array:title|img) pairs for radio options + 'options' => array( + '1' => array( + 'alt' => '1 Column', + 'img' => ReduxFramework::$_url . 'assets/img/1col.png' + ), + '2' => array( + 'alt' => '2 Column Left', + 'img' => ReduxFramework::$_url . 'assets/img/2cl.png' + ), + '3' => array( + 'alt' => '2 Column Right', + 'img' => ReduxFramework::$_url . 'assets/img/2cr.png' + ), + '4' => array( + 'alt' => '3 Column Middle', + 'img' => ReduxFramework::$_url . 'assets/img/3cm.png' + ), + '5' => array( + 'alt' => '3 Column Left', + 'img' => ReduxFramework::$_url . 'assets/img/3cl.png' + ), + '6' => array( + 'alt' => '3 Column Right', + 'img' => ReduxFramework::$_url . 'assets/img/3cr.png' + ) + ), + 'default' => '2' + ), + array( + 'id' => 'opt-sortable', + 'type' => 'sortable', + 'title' => __( 'Sortable Text Option', 'redux-framework-demo' ), + 'subtitle' => __( 'Define and reorder these however you want.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'options' => array( + 'si1' => 'Item 1', + 'si2' => 'Item 2', + 'si3' => 'Item 3', + ) + ), + array( + 'id' => 'opt-check-sortable', + 'type' => 'sortable', + 'mode' => 'checkbox', // checkbox or text + 'title' => __( 'Sortable Text Option', 'redux-framework-demo' ), + 'subtitle' => __( 'Define and reorder these however you want.', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'options' => array( + 'si1' => false, + 'si2' => true, + 'si3' => false, + ) + ), + ) + ); + + $this->sections[] = array( + 'icon' => 'el-icon-list-alt', + 'title' => __( 'Select Fields', 'redux-framework-demo' ), + 'desc' => __( '

This is the Description. Again HTML is allowed

', 'redux-framework-demo' ), + 'fields' => array( + array( + 'id' => 'opt-select', + 'type' => 'select', + 'title' => __( 'Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + //Must provide key => value pairs for select options + 'options' => array( + '1' => 'Opt 1', + '2' => 'Opt 2', + '3' => 'Opt 3' + ), + 'default' => '2' + ), + array( + 'id' => 'opt-multi-select', + 'type' => 'select', + 'multi' => true, + 'title' => __( 'Multi Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + //Must provide key => value pairs for radio options + 'options' => array( + '1' => 'Opt 1', + '2' => 'Opt 2', + '3' => 'Opt 3' + ), + 'required' => array( 'select', 'equals', array( '1', '3' ) ), + 'default' => array( '2', '3' ) + ), + array( + 'id' => 'opt-select-image', + 'type' => 'select_image', + 'title' => __( 'Select Image', 'redux-framework-demo' ), + 'subtitle' => __( 'A preview of the selected image will appear underneath the select box.', 'redux-framework-demo' ), + 'options' => $sample_patterns, + // Alternatively + //'options' => Array( + // 'img_name' => 'img_path' + // ) + 'default' => 'tree_bark.png', + ), + array( + 'id' => 'opt-info', + 'type' => 'info', + 'desc' => __( 'You can easily add a variety of data from WordPress.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-categories', + 'type' => 'select', + 'data' => 'categories', + 'title' => __( 'Categories Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-categories-multi', + 'type' => 'select', + 'data' => 'categories', + 'multi' => true, + 'title' => __( 'Categories Multi Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-pages', + 'type' => 'select', + 'data' => 'pages', + 'title' => __( 'Pages Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-multi-select-pages', + 'type' => 'select', + 'data' => 'pages', + 'multi' => true, + 'title' => __( 'Pages Multi Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-tags', + 'type' => 'select', + 'data' => 'tags', + 'title' => __( 'Tags Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-multi-select-tags', + 'type' => 'select', + 'data' => 'tags', + 'multi' => true, + 'title' => __( 'Tags Multi Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-menus', + 'type' => 'select', + 'data' => 'menus', + 'title' => __( 'Menus Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-multi-select-menus', + 'type' => 'select', + 'data' => 'menu', + 'multi' => true, + 'title' => __( 'Menus Multi Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-post-type', + 'type' => 'select', + 'data' => 'post_type', + 'title' => __( 'Post Type Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-multi-select-post-type', + 'type' => 'select', + 'data' => 'post_type', + 'multi' => true, + 'title' => __( 'Post Type Multi Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-multi-select-sortable', + 'type' => 'select', + 'data' => 'post_type', + 'multi' => true, + 'sortable' => true, + 'title' => __( 'Post Type Multi Select Option + Sortable', 'redux-framework-demo' ), + 'subtitle' => __( 'This field also has sortable enabled!', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-posts', + 'type' => 'select', + 'data' => 'post', + 'title' => __( 'Posts Select Option2', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-multi-select-posts', + 'type' => 'select', + 'data' => 'post', + 'multi' => true, + 'title' => __( 'Posts Multi Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-roles', + 'type' => 'select', + 'data' => 'roles', + 'title' => __( 'User Role Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-capabilities', + 'type' => 'select', + 'data' => 'capabilities', + 'multi' => true, + 'title' => __( 'Capabilities Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + ), + array( + 'id' => 'opt-select-elusive', + 'type' => 'select', + 'data' => 'elusive-icons', + 'title' => __( 'Elusive Icons Select Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'Here\'s a list of all the elusive icons by name and icon.', 'redux-framework-demo' ), + ), + ) + ); + + $theme_info = '
'; + $theme_info .= '

' . __( 'Theme URL: ', 'redux-framework-demo' ) . '' . $this->theme->get( 'ThemeURI' ) . '

'; + $theme_info .= '

' . __( 'Author: ', 'redux-framework-demo' ) . $this->theme->get( 'Author' ) . '

'; + $theme_info .= '

' . __( 'Version: ', 'redux-framework-demo' ) . $this->theme->get( 'Version' ) . '

'; + $theme_info .= '

' . $this->theme->get( 'Description' ) . '

'; + $tabs = $this->theme->get( 'Tags' ); + if ( ! empty( $tabs ) ) { + $theme_info .= '

' . __( 'Tags: ', 'redux-framework-demo' ) . implode( ', ', $tabs ) . '

'; + } + $theme_info .= '
'; + + if ( file_exists( dirname( __FILE__ ) . '/../README.md' ) ) { + $this->sections['theme_docs'] = array( + 'icon' => 'el-icon-list-alt', + 'title' => __( 'Documentation', 'redux-framework-demo' ), + 'fields' => array( + array( + 'id' => '17', + 'type' => 'raw', + 'markdown' => true, + 'content' => file_get_contents( dirname( __FILE__ ) . '/../README.md' ) + ), + ), + ); + } + + // You can append a new section at any time. + $this->sections[] = array( + 'icon' => 'el-icon-eye-open', + 'title' => __( 'Additional Fields', 'redux-framework-demo' ), + 'desc' => __( '

This is the Description. Again HTML is allowed

', 'redux-framework-demo' ), + 'fields' => array( + array( + 'id' => 'opt-datepicker', + 'type' => 'date', + 'title' => __( 'Date Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-divide', + 'type' => 'divide' + ), + array( + 'id' => 'opt-button-set', + 'type' => 'button_set', + 'title' => __( 'Button Set Option', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + //Must provide key => value pairs for radio options + 'options' => array( + '1' => 'Opt 1', + '2' => 'Opt 2', + '3' => 'Opt 3' + ), + 'default' => '2' + ), + array( + 'id' => 'opt-button-set-multi', + 'type' => 'button_set', + 'title' => __( 'Button Set, Multi Select', 'redux-framework-demo' ), + 'subtitle' => __( 'No validation can be done on this field type', 'redux-framework-demo' ), + 'desc' => __( 'This is the description field, again good for additional info.', 'redux-framework-demo' ), + 'multi' => true, + //Must provide key => value pairs for radio options + 'options' => array( + '1' => 'Opt 1', + '2' => 'Opt 2', + '3' => 'Opt 3' + ), + 'default' => array( '2', '3' ) + ), + array( + 'id' => 'opt-info-field', + 'type' => 'info', + 'desc' => __( 'This is the info field, if you want to break sections up.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-info-warning', + 'type' => 'info', + 'style' => 'warning', + 'title' => __( 'This is a title.', 'redux-framework-demo' ), + 'desc' => __( 'This is an info field with the warning style applied and a header.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-info-success', + 'type' => 'info', + 'style' => 'success', + 'icon' => 'el-icon-info-sign', + 'title' => __( 'This is a title.', 'redux-framework-demo' ), + 'desc' => __( 'This is an info field with the success style applied, a header and an icon.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-info-critical', + 'type' => 'info', + 'style' => 'critical', + 'icon' => 'el-icon-info-sign', + 'title' => __( 'This is a title.', 'redux-framework-demo' ), + 'desc' => __( 'This is an info field with the critical style applied, a header and an icon.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-raw_info', + 'type' => 'info', + 'required' => array( '18', 'equals', array( '1', '2' ) ), + 'raw_html' => true, + 'desc' => $sampleHTML, + ), + array( + 'id' => 'opt-info-normal', + 'type' => 'info', + 'notice' => true, + 'title' => __( 'This is a title.', 'redux-framework-demo' ), + 'desc' => __( 'This is an info notice field with the normal style applied, a header and an icon.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-notice-info', + 'type' => 'info', + 'notice' => true, + 'style' => 'info', + 'title' => __( 'This is a title.', 'redux-framework-demo' ), + 'desc' => __( 'This is an info notice field with the info style applied, a header and an icon.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-notice-warning', + 'type' => 'info', + 'notice' => true, + 'style' => 'warning', + 'icon' => 'el-icon-info-sign', + 'title' => __( 'This is a title.', 'redux-framework-demo' ), + 'desc' => __( 'This is an info notice field with the warning style applied, a header and an icon.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-notice-success', + 'type' => 'info', + 'notice' => true, + 'style' => 'success', + 'icon' => 'el-icon-info-sign', + 'title' => __( 'This is a title.', 'redux-framework-demo' ), + 'desc' => __( 'This is an info notice field with the success style applied, a header and an icon.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-notice-critical', + 'type' => 'info', + 'notice' => true, + 'style' => 'critical', + 'icon' => 'el-icon-info-sign', + 'title' => __( 'This is a title.', 'redux-framework-demo' ), + 'desc' => __( 'This is an notice field with the critical style applied, a header and an icon.', 'redux-framework-demo' ) + ), + array( + 'id' => 'opt-custom-callback', + 'type' => 'callback', + 'title' => __( 'Custom Field Callback', 'redux-framework-demo' ), + 'subtitle' => __( 'This is a completely unique field type', 'redux-framework-demo' ), + 'desc' => __( 'This is created with a callback function, so anything goes in this field. Make sure to define the function though.', 'redux-framework-demo' ), + 'callback' => 'redux_my_custom_field' + ), + array( + 'id' => 'opt-custom-callback-class', + 'type' => 'callback', + 'title' => __( 'Custom Field Callback - Class', 'redux-framework-demo' ), + 'subtitle' => __( 'This is a completely unique field type', 'redux-framework-demo' ), + 'desc' => __( 'This is created with a callback function, so anything goes in this field. Make sure to define the function though.', 'redux-framework-demo' ), + //'callback' => array( $this, 'class_field_callback' ) // Can use the current class object + 'callback' => array( 'Redux_Framework_sample_config', 'class_field_callback' ) + // Can use just class name + ), + array( + 'id' => 'opt-customizer-only-in-section', + 'type' => 'select', + 'title' => __( 'Customizer Only Option', 'redux-framework-demo' ), + 'subtitle' => __( 'The subtitle is NOT visible in customizer', 'redux-framework-demo' ), + 'desc' => __( 'The field desc is NOT visible in customizer.', 'redux-framework-demo' ), + 'customizer_only' => true, + //Must provide key => value pairs for select options + 'options' => array( + '1' => 'Opt 1', + '2' => 'Opt 2', + '3' => 'Opt 3' + ), + 'default' => '2' + ), + ) + ); + + $this->sections[] = array( + 'icon' => 'el-icon-list-alt', + 'title' => __( 'Customizer Only', 'redux-framework-demo' ), + 'desc' => __( '

This Section should be visible only in Customizer

', 'redux-framework-demo' ), + 'customizer_only' => true, + 'fields' => array( + array( + 'id' => 'opt-customizer-only', + 'type' => 'select', + 'title' => __( 'Customizer Only Option', 'redux-framework-demo' ), + 'subtitle' => __( 'The subtitle is NOT visible in customizer', 'redux-framework-demo' ), + 'desc' => __( 'The field desc is NOT visible in customizer.', 'redux-framework-demo' ), + 'customizer_only' => true, + //Must provide key => value pairs for select options + 'options' => array( + '1' => 'Opt 1', + '2' => 'Opt 2', + '3' => 'Opt 3' + ), + 'default' => '2' + ), + ) + ); + + $this->sections[] = array( + 'title' => __( 'Import / Export', 'redux-framework-demo' ), + 'desc' => __( 'Import and Export your Redux Framework settings from file, text or URL.', 'redux-framework-demo' ), + 'icon' => 'el-icon-refresh', + 'fields' => array( + array( + 'id' => 'opt-import-export', + 'type' => 'import_export', + 'title' => 'Import Export', + 'subtitle' => 'Save and restore your Redux options', + 'full_width' => false, + ), + ), + ); + + $this->sections[] = array( + 'type' => 'divide', + ); + + $this->sections[] = array( + 'icon' => 'el-icon-info-sign', + 'title' => __( 'Theme Information', 'redux-framework-demo' ), + 'desc' => __( '

This is the Description. Again HTML is allowed

', 'redux-framework-demo' ), + 'fields' => array( + array( + 'id' => 'opt-raw-info', + 'type' => 'raw', + 'content' => $item_info, + ) + ), + ); + + if ( file_exists( trailingslashit( dirname( __FILE__ ) ) . 'README.html' ) ) { + $tabs['docs'] = array( + 'icon' => 'el-icon-book', + 'title' => __( 'Documentation', 'redux-framework-demo' ), + 'content' => nl2br( file_get_contents( trailingslashit( dirname( __FILE__ ) ) . 'README.html' ) ) + ); + } + } + + public function setHelpTabs() { + + // Custom page help tabs, displayed using the help API. Tabs are shown in order of definition. + $this->args['help_tabs'][] = array( + 'id' => 'redux-help-tab-1', + 'title' => __( 'Theme Information 1', 'redux-framework-demo' ), + 'content' => __( '

This is the tab content, HTML is allowed.

', 'redux-framework-demo' ) + ); + + $this->args['help_tabs'][] = array( + 'id' => 'redux-help-tab-2', + 'title' => __( 'Theme Information 2', 'redux-framework-demo' ), + 'content' => __( '

This is the tab content, HTML is allowed.

', 'redux-framework-demo' ) + ); + + // Set the help sidebar + $this->args['help_sidebar'] = __( '

This is the sidebar content, HTML is allowed.

', 'redux-framework-demo' ); + } + + /** + * All the possible arguments for Redux. + * For full documentation on arguments, please refer to: https://github.com/ReduxFramework/ReduxFramework/wiki/Arguments + * */ + public function setArguments() { + + $theme = wp_get_theme(); // For use with some settings. Not necessary. + + $this->args = array( + // TYPICAL -> Change these values as you need/desire + 'opt_name' => 'redux_demo', + // This is where your data is stored in the database and also becomes your global variable name. + 'display_name' => $theme->get( 'Name' ), + // Name that appears at the top of your panel + 'display_version' => $theme->get( 'Version' ), + // Version that appears at the top of your panel + 'menu_type' => 'menu', + //Specify if the admin menu should appear or not. Options: menu or submenu (Under appearance only) + 'allow_sub_menu' => true, + // Show the sections below the admin menu item or not + 'menu_title' => __( 'Sample Options', 'redux-framework-demo' ), + 'page_title' => __( 'Sample Options', 'redux-framework-demo' ), + // You will need to generate a Google API key to use this feature. + // Please visit: https://developers.google.com/fonts/docs/developer_api#Auth + 'google_api_key' => '', + // Set it you want google fonts to update weekly. A google_api_key value is required. + 'google_update_weekly' => false, + // Must be defined to add google fonts to the typography module + 'async_typography' => true, + // Use a asynchronous font on the front end or font string + //'disable_google_fonts_link' => true, // Disable this in case you want to create your own google fonts loader + 'admin_bar' => true, + // Show the panel pages on the admin bar + 'admin_bar_icon' => 'dashicons-portfolio', + // Choose an icon for the admin bar menu + 'admin_bar_priority' => 50, + // Choose an priority for the admin bar menu + 'global_variable' => '', + // Set a different name for your global variable other than the opt_name + 'dev_mode' => true, + // Show the time the page took to load, etc + 'update_notice' => true, + // If dev_mode is enabled, will notify developer of updated versions available in the GitHub Repo + 'customizer' => true, + // Enable basic customizer support + //'open_expanded' => true, // Allow you to start the panel in an expanded way initially. + //'disable_save_warn' => true, // Disable the save warning when a user changes a field + + // OPTIONAL -> Give you extra features + 'page_priority' => null, + // Order where the menu appears in the admin area. If there is any conflict, something will not show. Warning. + 'page_parent' => 'themes.php', + // For a full list of options, visit: http://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters + 'page_permissions' => 'manage_options', + // Permissions needed to access the options panel. + 'menu_icon' => '', + // Specify a custom URL to an icon + 'last_tab' => '', + // Force your panel to always open to a specific tab (by id) + 'page_icon' => 'icon-themes', + // Icon displayed in the admin panel next to your menu_title + 'page_slug' => '_options', + // Page slug used to denote the panel + 'save_defaults' => true, + // On load save the defaults to DB before user clicks save or not + 'default_show' => false, + // If true, shows the default value next to each field that is not the default value. + 'default_mark' => '', + // What to print by the field's title if the value shown is default. Suggested: * + 'show_import_export' => true, + // Shows the Import/Export panel when not used as a field. + + // CAREFUL -> These options are for advanced use only + 'transient_time' => 60 * MINUTE_IN_SECONDS, + 'output' => true, + // Global shut-off for dynamic CSS output by the framework. Will also disable google fonts output + 'output_tag' => true, + // Allows dynamic CSS to be generated for customizer and google fonts, but stops the dynamic CSS from going to the head + // 'footer_credit' => '', // Disable the footer credit of Redux. Please leave if you can help it. + + // FUTURE -> Not in use yet, but reserved or partially implemented. Use at your own risk. + 'database' => '', + // possible: options, theme_mods, theme_mods_expanded, transient. Not fully functional, warning! + 'system_info' => false, + // REMOVE + + // HINTS + 'hints' => array( + 'icon' => 'icon-question-sign', + 'icon_position' => 'right', + 'icon_color' => 'lightgray', + 'icon_size' => 'normal', + 'tip_style' => array( + 'color' => 'light', + 'shadow' => true, + 'rounded' => false, + 'style' => '', + ), + 'tip_position' => array( + 'my' => 'top left', + 'at' => 'bottom right', + ), + 'tip_effect' => array( + 'show' => array( + 'effect' => 'slide', + 'duration' => '500', + 'event' => 'mouseover', + ), + 'hide' => array( + 'effect' => 'slide', + 'duration' => '500', + 'event' => 'click mouseleave', + ), + ), + ) + ); + + // ADMIN BAR LINKS -> Setup custom links in the admin bar menu as external items. + $this->args['admin_bar_links'][] = array( + 'id' => 'redux-docs', + 'href' => 'http://docs.reduxframework.com/', + 'title' => __( 'Documentation', 'redux-framework-demo' ), + ); + + $this->args['admin_bar_links'][] = array( + //'id' => 'redux-support', + 'href' => 'https://github.com/ReduxFramework/redux-framework/issues', + 'title' => __( 'Support', 'redux-framework-demo' ), + ); + + $this->args['admin_bar_links'][] = array( + 'id' => 'redux-extensions', + 'href' => 'reduxframework.com/extensions', + 'title' => __( 'Extensions', 'redux-framework-demo' ), + ); + + // SOCIAL ICONS -> Setup custom links in the footer for quick links in your panel footer icons. + $this->args['share_icons'][] = array( + 'url' => 'https://github.com/ReduxFramework/ReduxFramework', + 'title' => 'Visit us on GitHub', + 'icon' => 'el-icon-github' + //'img' => '', // You can use icon OR img. IMG needs to be a full URL. + ); + $this->args['share_icons'][] = array( + 'url' => 'https://www.facebook.com/pages/Redux-Framework/243141545850368', + 'title' => 'Like us on Facebook', + 'icon' => 'el-icon-facebook' + ); + $this->args['share_icons'][] = array( + 'url' => 'http://twitter.com/reduxframework', + 'title' => 'Follow us on Twitter', + 'icon' => 'el-icon-twitter' + ); + $this->args['share_icons'][] = array( + 'url' => 'http://www.linkedin.com/company/redux-framework', + 'title' => 'Find us on LinkedIn', + 'icon' => 'el-icon-linkedin' + ); + + // Panel Intro text -> before the form + if ( ! isset( $this->args['global_variable'] ) || $this->args['global_variable'] !== false ) { + if ( ! empty( $this->args['global_variable'] ) ) { + $v = $this->args['global_variable']; + } else { + $v = str_replace( '-', '_', $this->args['opt_name'] ); + } + $this->args['intro_text'] = sprintf( __( '

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: $%1$s

', 'redux-framework-demo' ), $v ); + } else { + $this->args['intro_text'] = __( '

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.

', 'redux-framework-demo' ); + } + + // Add content after the form. + $this->args['footer_text'] = __( '

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.

', 'redux-framework-demo' ); + } + + public function validate_callback_function( $field, $value, $existing_value ) { + $error = true; + $value = 'just testing'; + + /* + do your validation + + if(something) { + $value = $value; + } elseif(something else) { + $error = true; + $value = $existing_value; + + } + */ + + $return['value'] = $value; + $field['msg'] = 'your custom error message'; + if ( $error == true ) { + $return['error'] = $field; + } + + return $return; + } + + public function class_field_callback( $field, $value ) { + print_r( $field ); + echo '
CLASS CALLBACK'; + print_r( $value ); + } + + } + + global $reduxConfig; + $reduxConfig = new Redux_Framework_sample_config(); + } else { + echo "The class named Redux_Framework_sample_config has already been called. Developers, you need to prefix this class with your company name or you'll run into problems!"; + } + + /** + * Custom function for the callback referenced above + */ + if ( ! function_exists( 'redux_my_custom_field' ) ): + function redux_my_custom_field( $field, $value ) { + print_r( $field ); + echo '
'; + print_r( $value ); + } + endif; + + /** + * Custom function for the callback validation referenced above + * */ + if ( ! function_exists( 'redux_validate_callback_function' ) ): + function redux_validate_callback_function( $field, $value, $existing_value ) { + $error = true; + $value = 'just testing'; + + /* + do your validation + + if(something) { + $value = $value; + } elseif(something else) { + $error = true; + $value = $existing_value; + + } + */ + + $return['value'] = $value; + $field['msg'] = 'your custom error message'; + if ( $error == true ) { + $return['error'] = $field; + } + + return $return; + } + endif; diff --git a/admin/core/um-admin-redux.php b/admin/core/um-admin-redux.php index f721fedc..7ceab405 100644 --- a/admin/core/um-admin-redux.php +++ b/admin/core/um-admin-redux.php @@ -44,127 +44,79 @@ } - public function setHelpTabs() { + public function setHelpTabs() { - } + } - public function setArguments() { + public function setArguments() { - $this->args = array( - 'opt_name' => 'um_options', // This is where your data is stored in the database and also becomes your global variable name. - 'display_name' => 'Settings', // Name that appears at the top of your panel - 'display_version' => ultimatemember_version, // Version that appears at the top of your panel - 'menu_type' => 'submenu', //Specify if the admin menu should appear or not. Options: menu or submenu (Under appearance only) - 'allow_sub_menu' => false, // Show the sections below the admin menu item or not - 'menu_title' => __('Settings', 'redux-framework-demo'), - 'page_title' => __('Settings', 'redux-framework-demo'), - - 'google_api_key' => '', // Must be defined to add google fonts to the typography module - 'async_typography' => true, // Use a asynchronous font on the front end or font string - 'admin_bar' => false, // Show the panel pages on the admin bar - 'global_variable' => '', // Set a different name for your global variable other than the opt_name - 'dev_mode' => false, // Show the time the page took to load, etc - 'customizer' => false, // Enable basic customizer support - 'page_priority' => null, // Order where the menu appears in the admin area. If there is any conflict, something will not show. Warning. - 'page_parent' => 'ultimatemember', // For a full list of options, visit: http://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters - 'page_permissions' => 'manage_options', // Permissions needed to access the options panel. - 'menu_icon' => 'dashicons-admin-users', // Specify a custom URL to an icon - 'last_tab' => '', // Force your panel to always open to a specific tab (by id) - 'page_icon' => 'icon-themes', // Icon displayed in the admin panel next to your menu_title - 'page_slug' => 'um_options', // Page slug used to denote the panel - 'save_defaults' => true, // On load save the defaults to DB before user clicks save or not - 'default_show' => false, // If true, shows the default value next to each field that is not the default value. - 'default_mark' => '', // What to print by the field's title if the value shown is default. Suggested: * - 'show_import_export' => false, // Shows the Import/Export panel when not used as a field. + $this->args = array( + 'opt_name' => 'um_options', // This is where your data is stored in the database and also becomes your global variable name. + 'display_name' => 'Settings', // Name that appears at the top of your panel + 'display_version' => ultimatemember_version, // Version that appears at the top of your panel + 'menu_type' => 'submenu', //Specify if the admin menu should appear or not. Options: menu or submenu (Under appearance only) + 'allow_sub_menu' => false, // Show the sections below the admin menu item or not + 'menu_title' => __('Settings', 'redux-framework-demo'), + 'page_title' => __('Settings', 'redux-framework-demo'), + + 'google_api_key' => '', // Must be defined to add google fonts to the typography module + 'async_typography' => true, // Use a asynchronous font on the front end or font string + 'admin_bar' => false, // Show the panel pages on the admin bar + 'global_variable' => '', // Set a different name for your global variable other than the opt_name + 'dev_mode' => false, // Show the time the page took to load, etc + 'customizer' => false, // Enable basic customizer support + 'page_priority' => null, // Order where the menu appears in the admin area. If there is any conflict, something will not show. Warning. + 'page_parent' => 'ultimatemember', // For a full list of options, visit: http://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters + 'page_permissions' => 'manage_options', // Permissions needed to access the options panel. + 'menu_icon' => 'dashicons-admin-users', // Specify a custom URL to an icon + 'last_tab' => '', // Force your panel to always open to a specific tab (by id) + 'page_icon' => 'icon-themes', // Icon displayed in the admin panel next to your menu_title + 'page_slug' => 'um_options', // Page slug used to denote the panel + 'save_defaults' => true, // On load save the defaults to DB before user clicks save or not + 'default_show' => false, // If true, shows the default value next to each field that is not the default value. + 'default_mark' => '', // What to print by the field's title if the value shown is default. Suggested: * + 'show_import_export' => false, // Shows the Import/Export panel when not used as a field. - 'transient_time' => 60 * MINUTE_IN_SECONDS, - 'output' => true, // Global shut-off for dynamic CSS output by the framework. Will also disable google fonts output - 'output_tag' => true, // Allows dynamic CSS to be generated for customizer and google fonts, but stops the dynamic CSS from going to the head - 'footer_credit' => '', // Disable the footer credit of Redux. Please leave if you can help it. - - 'hints' => array( - 'icon' => 'icon-question-sign', - 'icon_position' => 'right', - 'icon_color' => 'lightgray', - 'icon_size' => 'normal', - 'tip_style' => array( - 'color' => 'light', - 'shadow' => true, - 'rounded' => false, - 'style' => '', - ), - 'tip_position' => array( - 'my' => 'top left', - 'at' => 'bottom right', - ), - 'tip_effect' => array( - 'show' => array( - 'effect' => 'slide', - 'duration' => '500', - 'event' => 'mouseover', - ), - 'hide' => array( - 'effect' => 'slide', - 'duration' => '500', - 'event' => 'click mouseleave', - ), - ), - ) + 'transient_time' => 60 * MINUTE_IN_SECONDS, + 'output' => true, // Global shut-off for dynamic CSS output by the framework. Will also disable google fonts output + 'output_tag' => true, // Allows dynamic CSS to be generated for customizer and google fonts, but stops the dynamic CSS from going to the head + 'footer_credit' => false, // Disable the footer credit of Redux. Please leave if you can help it. + + ); - ); - - // SOCIAL ICONS -> Setup custom links in the footer for quick links in your panel footer icons. - $this->args['share_icons'][] = array( - 'url' => 'https://github.com/ultimatemember/ultimatemember', - 'title' => 'GitHub Repository', - 'icon' => 'um-icon-social-github' - ); - $this->args['share_icons'][] = array( - 'url' => 'https://trello.com/b/30quaczv/ultimate-member', - 'title' => 'Roadmap', - 'icon' => 'um-faicon-trello' - ); - $this->args['share_icons'][] = array( - 'url' => 'https://facebook.com/pages/Ultimate-Member/1413909622233054', - 'title' => 'Like us on Facebook', - 'icon' => 'um-icon-social-facebook' - ); - $this->args['share_icons'][] = array( - 'url' => 'https://twitter.com/umplugin', - 'title' => 'Follow us on Twitter', - 'icon' => 'um-icon-social-twitter' - ); - $this->args['share_icons'][] = array( - 'url' => 'https://google.com/+ultimatemember', - 'title' => 'Follow us on Google+', - 'icon' => 'um-icon-social-googleplus' - ); - $this->args['share_icons'][] = array( - 'url' => 'https://youtube.com/user/umplugin', - 'title' => 'We\'re on YouTube', - 'icon' => 'um-icon-social-youtube' - ); + // SOCIAL ICONS -> Setup custom links in the footer for quick links in your panel footer icons. + $this->args['share_icons'][] = array( + 'url' => 'https://github.com/ultimatemember/ultimatemember', + 'title' => 'GitHub Repository', + 'icon' => 'um-icon-social-github' + ); + $this->args['share_icons'][] = array( + 'url' => 'https://trello.com/b/30quaczv/ultimate-member', + 'title' => 'Roadmap', + 'icon' => 'um-faicon-trello' + ); + $this->args['share_icons'][] = array( + 'url' => 'https://facebook.com/pages/Ultimate-Member/1413909622233054', + 'title' => 'Like us on Facebook', + 'icon' => 'um-icon-social-facebook' + ); + $this->args['share_icons'][] = array( + 'url' => 'https://twitter.com/umplugin', + 'title' => 'Follow us on Twitter', + 'icon' => 'um-icon-social-twitter' + ); + $this->args['share_icons'][] = array( + 'url' => 'https://google.com/+ultimatemember', + 'title' => 'Follow us on Google+', + 'icon' => 'um-icon-social-googleplus' + ); + $this->args['share_icons'][] = array( + 'url' => 'https://youtube.com/user/umplugin', + 'title' => 'We\'re on YouTube', + 'icon' => 'um-icon-social-youtube' + ); - } - - public function validate_callback_function( $field, $value, $existing_value ) { - $error = true; - $value = 'just testing'; - - $return['value'] = $value; - $field['msg'] = 'your custom error message'; - if ( $error == true ) { - $return['error'] = $field; - } - - return $return; - } - - public function class_field_callback( $field, $value ) { - print_r( $field ); - echo '
CLASS CALLBACK'; - print_r( $value ); - } + } } @@ -172,26 +124,3 @@ $reduxConfig = new UM_Redux_Framework_Config(); } - - if ( ! function_exists( 'redux_my_custom_field' ) ): - function redux_my_custom_field( $field, $value ) { - print_r( $field ); - echo '
'; - print_r( $value ); - } - endif; - - if ( ! function_exists( 'redux_validate_callback_function' ) ): - function redux_validate_callback_function( $field, $value, $existing_value ) { - $error = true; - $value = 'just testing'; - - $return['value'] = $value; - $field['msg'] = 'your custom error message'; - if ( $error == true ) { - $return['error'] = $field; - } - - return $return; - } - endif; diff --git a/admin/um-admin-init.php b/admin/um-admin-init.php index 73647d8b..e75d3582 100644 --- a/admin/um-admin-init.php +++ b/admin/um-admin-init.php @@ -6,7 +6,13 @@ class UM_Admin_API { $this->slug = 'ultimatemember'; - add_action('admin_init', array(&$this, 'admin_init'), 0); + $this->about_tabs['about'] = 'About'; + $this->about_tabs['start'] = 'Getting Started'; + + add_action('admin_init', array(&$this, 'admin_init'), 0); + + add_action('admin_menu', array(&$this, 'admin_menu'), 0 ); + add_action('admin_menu', array(&$this, 'secondary_menu_items'), 1000 ); if ( !class_exists( 'ReduxFramework' ) && file_exists( um_path . 'admin/core/lib/ReduxFramework/ReduxCore/framework.php' ) ) { require_once( um_path . 'admin/core/lib/ReduxFramework/ReduxCore/framework.php' ); @@ -17,6 +23,62 @@ class UM_Admin_API { } + /*** + *** @Creates menu + ***/ + function admin_menu() { + + add_menu_page( __('Ultimate Member', $this->slug), __('Ultimate Member', $this->slug), 'manage_options', $this->slug, array(&$this, 'admin_page'), 'dashicons-admin-users', '66.78578'); + + add_submenu_page( $this->slug, __('Dashboard', $this->slug), __('Dashboard', $this->slug), 'manage_options', $this->slug, array(&$this, 'admin_page') ); + + foreach( $this->about_tabs as $k => $tab ) { + add_submenu_page( '_'. $k . '_um', sprintf(__('%s | Ultimate Member', $this->slug), $tab), sprintf(__('%s | Ultimate Member', $this->slug), $tab), 'manage_options', $this->slug . '-' . $k, array(&$this, 'admin_page') ); + } + + } + + /*** + *** @After "settings" menu + ***/ + function secondary_menu_items() { + + add_submenu_page( $this->slug, __('Forms', $this->slug), __('Forms', $this->slug), 'manage_options', 'edit.php?post_type=um_form', '', '' ); + + add_submenu_page( $this->slug, __('User Roles', $this->slug), __('User Roles', $this->slug), 'manage_options', 'edit.php?post_type=um_role', '', '' ); + + if ( um_get_option('members_page' ) || !get_option('um_options') ){ + add_submenu_page( $this->slug, __('Member Directories', $this->slug), __('Member Directories', $this->slug), 'manage_options', 'edit.php?post_type=um_directory', '', '' ); + } + + } + + /*** + *** @Admin page function + ***/ + function admin_page() { + + $page = $_REQUEST['page']; + + if ( $page == 'ultimatemember' ) { + include_once um_path . 'admin/templates/dashboard.php'; + } + + if ( strstr( $page, 'ultimatemember-' ) ) { + + $template = str_replace('ultimatemember-','',$page); + $file = um_path . 'admin/templates/'. $template . '.php'; + + if ( file_exists( $file ) ){ + include_once um_path . 'admin/templates/'. $template . '.php'; + } else { + echo '

' . __('Please create a team.php template in admin templates.','ultimatemember') . '

'; + } + + } + + } + /*** *** @Init ***/ @@ -43,7 +105,7 @@ class UM_Admin_API { require_once um_path . 'admin/core/um-admin-actions.php'; require_once um_path . 'admin/core/um-admin-filters-fields.php'; - + /* initialize UM administration */ $this->columns = new UM_Admin_Columns(); $this->styles = new UM_Admin_Enqueue();